python垃圾分类图像识别算法_Python 实现一个简单的垃圾分类小游戏(已获校级二等奖)...
作者:Vincentish
https://blog.csdn.net/Vincentish/article/details/107495432
項目簡介
本項目報名參加了“兗州中材杯”武漢理工大學第十一屆環保創意作品大賽藝術理念組比賽。組員共三名,本人負責代碼實現部分,其余兩人分別負責項目策劃與場景人物繪制。
項目背景
小組中負責策劃的同學經過一定的調研之后發現,我校在校學生普遍缺乏垃圾分類方面的知識。經過討論后,我們把游戲方向定位于“垃圾分類”,游戲類型定位于像素風游戲,由于本人水平和時間有限,只能將玩法設計得盡量簡單。感謝另外兩位組員,他們的努力掩蓋了我水平上的不足。
玩法介紹
家控制一名角色在操場背景上移動,垃圾桶在操場邊上。撿起垃圾丟進相應的垃圾桶內,若全部正確投放則游戲成功,否則游戲失敗。游戲期間,若有不清楚該作何分類的垃圾,則可以點擊圖書館的按鈕,進入圖書館查詢。圖書館提供垃圾圖鑒和分類標準兩種信息。垃圾圖鑒幫助玩家分辨自己撿到的垃圾,而分類標準指每種垃圾的定義及舉例。
項目成果
本項目在“兗州中材杯”武漢理工大學第十一屆環保創意作品大賽藝術理念組比賽中最終獲得了第五名、二等獎的成績,距第四名僅差0.5分。
項目實現
寫項目時本人僅自學了一個月的Python,且本人是大一新生,對計算機科學的基礎知識了解甚少,若代碼風格幼稚、愚蠢,還望讀者見諒。
模塊劃分
游戲按場景分為以下幾個模塊:開始游戲界面、游戲說明界面、人物選擇界面、操場界面(主要游戲場地)、圖書館外界面、圖書館內界面、游戲結束界面。
代碼實現
直接上代碼:
import?pygame?as?pyimport?sys
import?random
from?pygame.locals?import?*
#===========================================================
#========================前期準備===========================
py.init()
#注:游戲需要的所有文件(圖片等)都放在同游戲目錄的"Files"目錄下。
#定義一個按鈕類
class?Button(py.rect.Rect):
????def?__init__(self,?obj):
????????super().__init__(obj)
????def?has(self,?pos):
????????if?self.right?>=?pos[0]?>=?self.left?and?self.bottom?>=?pos[1]?>=?self.top:
????????????return?True
????????else:
????????????return?False
screen?=?py.display.set_mode((1000,?650))
#===========================================================
#=========================圖書館內==========================
def?knowledge(selection):
????path?=?'Files\\inside_liberary\\knowledge'?+?str(selection)?+?'.jpg'
????know?=?py.image.load(path)
????know?=?py.transform.smoothscale(know,(1000,650))
????screen.blit(know,(0,0))
????exits?=?py.image.load('Files\\inside_liberary\\back.png')
????exits?=?py.transform.smoothscale(exits,(72,72))
????exit_button?=?screen.blit(exits,(918,?570))
????exit_button?=?Button(exit_button)
????py.display.flip()
????#進入事件循環
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????pos?=?py.mouse.get_pos()
????????????????#點擊離開該頁面
????????????????if?exit_button.has(pos):
????????????????????selection?=?0
????????????????????break
????????if?not?selection:
????????????break
def?inside_Liberary():
????ilib?=?py.image.load('Files\\inside_liberary\\Inside.jpg')
????ilib?=?py.transform.smoothscale(ilib,(1000,650))
????screen.blit(ilib,(0,0))
????#退出圖書館的按鈕
????exits?=?py.image.load('Files\\inside_liberary\\exit.png')
????exits?=?py.transform.smoothscale(exits,(72,81))
????exit_button?=?screen.blit(exits,(5,?560))
????exit_button?=?Button(exit_button)
????#廚余垃圾按鈕
????rubbish1?=?py.image.load('Files\\inside_liberary\\rubbish1.png')
????rubbish1?=?py.transform.smoothscale(rubbish1,(150,298))
????rubbish1_button?=?screen.blit(rubbish1,?(80,150))
????rubbish1_button?=?Button(rubbish1_button)
????#可回收垃圾按鈕
????rubbish2?=?py.image.load('Files\\inside_liberary\\rubbish2.png')
????rubbish2?=?py.transform.smoothscale(rubbish2,(150,298))
????rubbish2_button?=?screen.blit(rubbish2,?(310,150))
????rubbish2_button?=?Button(rubbish2_button)
????#有害垃圾按鈕
????rubbish3?=?py.image.load('Files\\inside_liberary\\rubbish3.png')
????rubbish3?=?py.transform.smoothscale(rubbish3,(150,298))
????rubbish3_button?=?screen.blit(rubbish3,?(540,150))
????rubbish3_button?=?Button(rubbish3_button)
????#不可回收垃圾按鈕
????rubbish4?=?py.image.load('Files\\inside_liberary\\rubbish4.png')
????rubbish4?=?py.transform.smoothscale(rubbish4,(150,298))
????rubbish4_button?=?screen.blit(rubbish4,?(770,150))
????rubbish4_button?=?Button(rubbish4_button)
????#圖鑒按鈕
????rubbish5?=?py.image.load('Files\\inside_liberary\\rubbish5.png')
????rubbish5?=?py.transform.smoothscale(rubbish5,(82,?72))
????rubbish5_button?=?screen.blit(rubbish5,?(903,560))
????rubbish5_button?=?Button(rubbish5_button)
????
????py.display.flip()
????selection?=?-1
????#進入事件循環
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????pos?=?py.mouse.get_pos()
????????????????#點擊離開圖書館
????????????????if?exit_button.has(pos):
????????????????????selection?=?0
????????????????????break
????????????????#點擊廚余垃圾
????????????????if?rubbish1_button.has(pos):
????????????????????selection?=?1
????????????????????break
????????????????#點擊可回收垃圾
????????????????if?rubbish2_button.has(pos):
????????????????????selection?=?2
????????????????????break
????????????????#點擊有害垃圾
????????????????if?rubbish3_button.has(pos):
????????????????????selection?=?3
????????????????????break
????????????????#點擊不可回收垃圾
????????????????if?rubbish4_button.has(pos):
????????????????????selection?=?4
????????????????????break
????????????????#點擊圖鑒
????????????????if?rubbish5_button.has(pos):
????????????????????selection?=?5
????????????????????break
????????if?selection?!=?-1:
????????????break
????if?selection:
????????knowledge(selection)
????????inside_Liberary()
#===========================================================
#=========================圖書館外==========================
def?outside_Liberary():
????olib?=?py.image.load('Files\\outside_liberary\\Outside.jpg')
????olib?=?py.transform.smoothscale(olib,(1000,650))
????screen.blit(olib,(0,0))
????#進入圖書館的按鈕
????enter?=?py.image.load('Files\\outside_liberary\\enter_lib.png')
????enter?=?py.transform.smoothscale(enter,(72,?72))
????enter_button?=?screen.blit(enter,(470,550))
????enter_button?=?Button(enter_button)
????#退出圖書館的按鈕
????exits?=?py.image.load('Files\\outside_liberary\\playground.png')
????exits?=?py.transform.smoothscale(exits,(72,?51))
????exit_button?=?screen.blit(exits,(5,?590))
????exit_button?=?Button(exit_button)
????py.display.flip()
????selection?=?-1
????#進入事件循環
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????pos?=?py.mouse.get_pos()
????????????????#點擊返回操場
????????????????if?exit_button.has(pos):
????????????????????selection?=?0
????????????????????break
????????????????#點擊進入圖書館
????????????????if?enter_button.has(pos):
????????????????????selection?=?1
????????????????????break
????????if?selection?!=?-1:
????????????break
????if?selection:
????????inside_Liberary()
????????outside_Liberary()
#===========================================================
#==========================游戲幫助=========================
def?help_page():
????background?=?py.image.load('Files\\help\\background.jpg')
????background?=?py.transform.smoothscale(background,(1000,650))
????screen.blit(background,(0,0))
????#返回按鈕
????exits?=?py.image.load('Files\\help\\back.png')
????exits?=?py.transform.smoothscale(exits,(72,57))
????exit_button?=?screen.blit(exits,(5,?585))
????exit_button?=?Button(exit_button)
????py.display.flip()
????back?=?0
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????pos?=?py.mouse.get_pos()
????????????????if?exit_button.has(pos):
????????????????????back?=?1
????????????????????break
????????if?back:
????????????break
????????????????
#===========================================================
#==========================游戲結束=========================
def?game_over(result):
????path?=?'Files\\game_over\\result'?+?str(result)?+?'.png'
????background?=?py.image.load(path)
????background?=?py.transform.smoothscale(background,(1000,650))
????screen.blit(background,(0,0))
????py.display.flip()
????temp?=?0
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????temp?=?1
????????????????break
????????if?temp:
????????????break
#===========================================================
#==========================操場環節=========================
choices?=?['01',?'02',?'11',?'12',?'21',?'22',?'31']
class?Rubbish():
????def?__init__(self,?sort):
????????self.sort?=?sort
????????self.img?=?py.image.load('Files\\playground\\'?+?sort?+?'.png')
????????x?=?random.randint(100,?1400)
????????y?=?random.randint(110,?900)
????????self.position?=?self.img.get_rect()
????????self.position?=?self.position.move((x,?y))
????????screen.blit(self.img,?self.position)
class?Role():
????def?__init__(self,?role):
????????self.r_side?=?py.image.load('Files\\playground\\'?+?role?+?'1.png')
????????self.r_walk?=?py.image.load('Files\\playground\\'?+?role?+?'2.png')
????????self.l_side?=?py.transform.flip(self.r_side,?True,?False)
????????self.l_walk?=?py.transform.flip(self.r_walk,?True,?False)
????????self.img?=?self.?r_side
????????self.position?=?self.img.get_rect()
????????screen.blit(self.img,?self.position)
????????self.rubbish?=?None
????def?move(self,?key):
????????if?key?==?K_UP:
????????????if?self.position.top?<=?200:
????????????????return?(0,?2)
????????????else:
????????????????self.position?=?self.position.move(0,?-2)
????????????????return?0
????????if?key?==?K_DOWN:
????????????if?self.position.bottom?>=?450:
????????????????return?(0,?-2)
????????????else:
????????????????self.position?=?self.position.move(0,?2)
????????????????return?0
????????if?key?==?K_RIGHT:
????????????if?self.position.right?>=?800:
????????????????return?(-2,?0)
????????????else:
????????????????self.position?=?self.position.move(2,?0)
????????????????return?0
????????if?key?==?K_LEFT:
????????????if?self.position.left?<=?200:
????????????????return?(2,?0)
????????????else:
????????????????self.position?=?self.position.move(-2,?0)
????????????????return?0
????????
class?Trash_can():
????def?__init__(self,?num):
????????self.?num?=?num
????????self.img?=?py.image.load('Files\\playground\\'?+?str(num)?+?'.png')
????????self.img?=?py.transform.smoothscale(self.img,(100,?92))
????????self.position?=?self.img.get_rect()
????????self.position?=?self.position.move((100?+?num*200,?0))
????????screen.blit(self.img,?self.position)
def?playground(selection):
????background?=?py.image.load('Files\\playground\\Playground.jpg')
????screen.blit(background,?[0,?0])
????lib?=?py.image.load('Files\\playground\\liberary.png')
????lib?=?py.transform.smoothscale(lib,?(78,?72))
????lib_button?=?screen.blit(lib,?(900,?10))
????lib_button?=?Button(lib_button)
????trash_can?=?[]
????for?num?in?range(0,?4):
????????trash_can.append(Trash_can(num))
????role?=?Role(selection)
????rubbish?=?[]
????for?sort?in?choices:
????????rubbish.append(Rubbish(sort))
????py.display.flip()
????down?=?0
????go?=?None
????move_bg?=?[0,?0]
????temp?=?0
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????pos?=?py.mouse.get_pos()
????????????????if?lib_button.has(pos):
????????????????????outside_Liberary()
????????????if?event.type?==?KEYDOWN?and\
???????????????event.key?in?(K_UP,?K_DOWN,?K_RIGHT,?K_LEFT):
????????????????if?event.key?==?K_RIGHT:
????????????????????role.img?=?role.r_side
????????????????elif?event.key?==?K_LEFT:
????????????????????role.img?=?role.l_side
????????????????down?=?1
????????????????go?=?event.key
????????????if?event.type?==?KEYUP?and?event.key?==?go:
????????????????if?event.key?==?K_RIGHT:
????????????????????role.img?=?role.r_side
????????????????elif?event.key?==?K_LEFT:
????????????????????role.img?=?role.l_side
????????????????down?=?0
????????take?=?role.position.collidelist([each.position?for?each?in?rubbish])
????????if?take?>=?0?and?not?role.rubbish:
????????????role.rubbish?=?rubbish[take].sort[0]
????????????del?rubbish[take]
????????put?=?role.position.collidelist([each.position?for?each?in?trash_can])
????????if?put?>=?0?and?role.rubbish:
????????????if?role.rubbish?==?str(trash_can[put].num):
????????????????role.rubbish?=?None
????????????????if?not?len(rubbish):
????????????????????game_over(1)
????????????????????break
????????????else:
????????????????game_over(2)
????????????????break
????????if?down:
????????????moved?=?role.move(go)
????????????temp?+=?1
????????????if?not?temp?%?20:
????????????????if?role.img?==?role.r_side:
????????????????????role.img?=?role.r_walk
????????????????elif?role.img?==?role.r_walk:
????????????????????role.img?=?role.r_side
????????????????elif?role.img?==?role.l_side:
????????????????????role.img?=?role.l_walk
????????????????else:
????????????????????role.img?=?role.l_side
????????????if?moved:
????????????????if?0?>=?moved[0]?+?move_bg[0]?>=?-497?and?\
???????????????????0?>=?moved[1]?+?move_bg[1]?>=?-326:
????????????????????for?i?in?range(2):
????????????????????????move_bg[i]?+=?moved[i]
????????????????????for?each?in?rubbish:
????????????????????????each.position?=?each.position.move(moved)
????????????????????for?each?in?trash_can:
????????????????????????each.position?=?each.position.move(moved)
????????????????elif?role.position.left?-?moved[0]?>=?0?and\
?????????????????????role.position.right?-?moved[0]?<=?1000?and\
?????????????????????role.position.top?-?moved[1]?>=?0?and\
?????????????????????role.position.bottom?-?moved[1]?<=?650:
????????????????????role.?position?=?role.position.move([-i?for?i?in?moved])
????????screen.blit(background,?move_bg)
????????lib?=?py.image.load('Files\\playground\\liberary.png')
????????lib?=?py.transform.smoothscale(lib,?(78,?72))
????????lib_button?=?screen.blit(lib,?(900,?10))
????????lib_button?=?Button(lib_button)
????????for?each?in?trash_can:
????????????screen.blit(each.img,?each.position)
????????for?each?in?rubbish:
????????????screen.blit(each.img,?each.position)
????????screen.blit(role.img,?role.position)
????????py.display.flip()
#===========================================================
#==========================選擇人物=========================
def?choose_role():
????background?=?py.image.load('Files\\choose_player\\background.jpg')
????background?=?py.transform.smoothscale(background,(1000,650))
????screen.blit(background,?(0,?0))
????man?=?py.image.load('Files\\choose_player\\man.png')
????man?=?py.transform.smoothscale(man,(123,?325))
????man_button?=?screen.blit(man,(200,?200))
????man_button?=?Button(man_button)
????woman?=?py.image.load('Files\\choose_player\\woman.png')
????woman?=?py.transform.smoothscale(woman,(113,?325))
????woman_button?=?screen.blit(woman,(687,?200))
????woman_button?=?Button(woman_button)
????py.display.flip()
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????pos?=?py.mouse.get_pos()
????????????????if?man_button.has(pos):
????????????????????return?'man'
????????????????if?woman_button.has(pos):
????????????????????return?'woman'
????????????????
#===========================================================
#========================開始游戲界面========================
def?start():
????background?=?py.image.load('Files\\start\\background.jpg')
????background?=?py.transform.smoothscale(background,(1000,650))
????screen.blit(background,?(0,?0))
????start_game?=?py.image.load('Files\\start\\start_game.png')
????start_game?=?py.transform.smoothscale(start_game,(140,?149))
????start_button?=?screen.blit(start_game,(150,?330))
????start_button?=?Button(start_button)
????game_help?=?py.image.load('Files\\start\\game_help.png')
????game_help?=?py.transform.smoothscale(game_help,(280,?182))
????help_button?=?screen.blit(game_help,(380,?320))
????help_button?=?Button(help_button)
????quit_game?=?py.image.load('Files\\start\\quit_game.png')
????quit_game?=?py.transform.smoothscale(quit_game,(200,160))
????quit_button?=?screen.blit(quit_game,(680,?330))
????quit_button?=?Button(quit_button)
????py.display.flip()
????while?True:
????????for?event?in?py.event.get():
????????????if?event.type?==?QUIT:
????????????????sys.exit()
????????????if?event.type?==?MOUSEBUTTONDOWN:
????????????????pos?=?py.mouse.get_pos()
????????????????if?start_button.has(pos):
????????????????????role?=?choose_role()
????????????????????playground(role)
????????????????????break
????????????????elif?help_button.has(pos):
????????????????????help_page()
????????????????????break
????????????????elif?quit_button.has(pos):
????????????????????sys.exit()
????????break
????start()
start()
游戲效果
游戲演示如下:
分享或在看是對我最大的支持總結
以上是生活随笔為你收集整理的python垃圾分类图像识别算法_Python 实现一个简单的垃圾分类小游戏(已获校级二等奖)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php if判断两个条件_PHP中if相
- 下一篇: python 常量_大疆机甲大师Pyth