吃豆人和削蘋果這兩個(gè)游戲想必大家都知道吧,本文運(yùn)用Python里的Pygame控制模塊編寫出一個(gè)融合吃豆人+切水果的新手游:玩命吃蘋果,有興趣的話可以認(rèn)識(shí)一下
引言
哈哈哈!木木子今天浮現(xiàn)——早已來(lái)給大家看了不少具體內(nèi)容啦~
涉及到的人工智能、新手、網(wǎng)絡(luò)爬蟲(chóng)、數(shù)據(jù)統(tǒng)計(jì)分析(這一塊的通常但是審批)手機(jī)游戲...
PS:
吃豆人我寫過(guò)了哈
Python+Pygame實(shí)戰(zhàn)之吃豆豆游戲的實(shí)現(xiàn)
切水果我寫過(guò)了哈
PythonPygame實(shí)戰(zhàn)之水果忍者游戲的實(shí)現(xiàn)
今天二者集合,做出一款新游戲,哈哈哈,名字叫做《瘋狂????吃水果》小游戲,其實(shí)聽(tīng)著挺????的,但是做出來(lái)的效果其實(shí)沒(méi)有想象中那么高大尚吶!(給你們打個(gè)預(yù)防針)
本文是基于Pygame寫的一款游戲哈!
一、籌備中
1)游戲的玩法
任意爆出:甜瓜????大大加分、紅提????扣分、定時(shí)炸彈????1條血量原始為二。鼠標(biāo)點(diǎn)擊挪動(dòng)。加減法考多少分實(shí)際就等著大家自己去玩了哈,都劇透了就沒(méi)意思了撒!每一次的游戲代碼也給大家留一點(diǎn)兒底,哈哈,自己琢磨嘛~
2)環(huán)境安裝
我應(yīng)用的生活環(huán)境:Python3、Pycharm社區(qū)版、tkinter、Pygame控制模塊,一部分內(nèi)置控制模塊不展現(xiàn)。
控制模塊組裝:pipinstall-ihttps://pypi.douban.com/simple/+控制模塊名
3)素材內(nèi)容提前準(zhǔn)備
安排了音樂(lè)伴奏更有勁兒啦!還記得seven這首歌曲嘛,還挺好聽(tīng)。
二、代碼展示
代碼超級(jí)多的!僅展示部分
主程序
importtkinter importrandom importtime importParam importImage importBonus importDeduction importBean importBomb importpygame #定義物質(zhì)列表(包含加分西瓜和消分葡萄和炸彈) bonusth=[] deductionth=[] bigbombs=[] #定義bean變量,保存豆豆對(duì)象 bean="" #定義當(dāng)前用戶的初始分?jǐn)?shù) score=0 life=2 #定義游戲狀態(tài) game_state=Param.GAME_START #創(chuàng)建窗體 game_window=tkinter.Tk() #窗口文字設(shè)置 game_window.title('ILOVEFRUIT') #窗口位置處理 screenwidth=game_window.winfo_screenwidth() screenheight=game_window.winfo_screenheight() size='%dx%d+%d+%d'%(Param.GAME_WIDTH,Param.GAME_HEIGHT,(screenwidth-Param.GAME_WIDTH)/2,50) game_window.geometry(size) #加載游戲用到的所有的圖片 background_image,bean_image,Bonus_image,Bomb_image,Deduction_image=Image.load_image(tkinter) Start,Stop=Image.load_state_image(tkinter) #獲取畫布 window_canvas=tkinter.Canvas(game_window) #畫布包裝方式 window_canvas.pack(expand=tkinter.YES,fill=tkinter.BOTH) #時(shí)間標(biāo)志 count=0 num=30 defcreate_fruit():#生成水果 globalcount globalnum globalscore ifscore%10==1: ifnum>=8: num-=8 count+=1 ifcount%num==0: c=random.randint(1,10) ifc<=5: #加分水果生成 bonus=Bonus.Bonus(Bonus_image) bonusth.append(bonus)#物質(zhì)添加到列表中 window_canvas.create_image(bonus.x,bonus.y,anchor=tkinter.NW,image=bonus.image,tag=bonus.tag) elifc<=8: #銷分水果生成 deduction=Deduction.Deduction(Deduction_image) deductionth.append(deduction) window_canvas.create_image(deduction.x,deduction.y,anchor=tkinter.NW,image=deduction.image,tag=deduction.tag) else: #炸彈生成 bigbomb=Bomb.BigBomb(Bomb_image) bigbombs.append(bigbomb) window_canvas.create_image(bigbomb.x,bigbomb.y,anchor=tkinter.NW,image=bigbomb.image,tag=bigbomb.tag) defstep_fruit(): #遍歷所有的物質(zhì),調(diào)用移動(dòng)的方法 forbonusinbonusth: bonus.step(window_canvas) fordeductionindeductionth: deduction.step(window_canvas) forbigbombinbigbombs: bigbomb.step(window_canvas) defjudge_state(event): globalgame_state ifgame_state==Param.GAME_START: game_state=Param.GAME_RUNNING #畫分 window_canvas.create_text(20,20,text="分?jǐn)?shù):%d"%(score),anchor=tkinter.NW,fill="white",\ font="time12bold",tag="SCORE") #畫生命 window_canvas.create_text(20,50,text="生命:%d"%(life),anchor=tkinter.NW,fill="white",\ font="time12bold",tag="LIFE") #刪除啟動(dòng)圖片 window_canvas.delete("Start") elifgame_state==Param.GAME_STOP: window_canvas.delete("bean") window_canvas.delete("STOP") game_state=Param.GAME_START game_start() defbean_move(event): ifgame_state==Param.GAME_RUNNING: now_x=bean.x now_y=bean.y bean.x=event.x-bean.w/2 bean.y=event.y-bean.h/2 window_canvas.move("bean",bean.x-now_x,bean.y-now_y) defout_of_bounds(): #獲取所有物質(zhì),判斷是否越界 fordeductionindeductionth: ifdeduction.out_of_bounds(): window_canvas.delete(deduction.tag) deductionth.remove(deduction) forbonusinbonusth: globaloutnum ifbonus.out_of_bounds(): outnum+=1 window_canvas.delete(bonus.tag) bonusth.remove(bonus) ifoutnum>=5: game_state=Param.GAME_STOP #畫游戲結(jié)束的狀態(tài) game_over() forbigbombinbigbombs: ifbigbomb.out_of_bounds(): window_canvas.delete(bigbomb.tag) bigbombs.remove(bigbomb) defbomb_action(): globalscore globallife globalbean globalgame_state #加分 forbonusinbonusth: ifbonus.bomb(bean): window_canvas.delete(bonus.tag) bonusth.remove(bonus) score+=3 #減分 fordeductionindeductionth: ifdeduction.bomb(bean): window_canvas.delete(deduction.tag) deductionth.remove(deduction) ifscore-5<0: score=0 game_state=Param.GAME_STOP #畫游戲結(jié)束的狀態(tài) game_over() else: score-=5 forbigbombinbigbombs: ifbigbomb.bomb(bean): window_canvas.delete(bigbomb.tag) bigbombs.remove(bigbomb) #如果分?jǐn)?shù)或生命小于0游戲結(jié)束 iflife-1<=0: life=0 game_state=Param.GAME_STOP #畫游戲結(jié)束的狀態(tài) game_over() else: life-=1 defdraw_action(): #畫分 window_canvas.delete("SCORE") #畫生命 window_canvas.delete("LIFE") window_canvas.create_text(20,20,text="分?jǐn)?shù):%d"%(score),anchor=tkinter.NW,fill="white",font="time12bold",tag="SCORE") window_canvas.create_text(20,50,text="生命:%d"%(life),anchor=tkinter.NW,fill="white",font="time12bold",tag="LIFE") defgame_over(): globalgame_state game_state=Param.GAME_STOP fordeductionindeductionth: window_canvas.delete(deduction.tag) forbonusinbonusth: window_canvas.delete(bonus.tag) forbigbombinbigbombs: window_canvas.delete(bigbomb.tag) deductionth.clear() bonusth.clear() bigbombs.clear() window_canvas.create_image(0,0,anchor=tkinter.NW,image=Stop,tag="STOP") ifpygame.mixer.music.get_busy()==True: pygame.mixer.music.stop()#停止播放 defgame_start(): globalscore globallife globalnum globaloutnum num=30 score=0 life=2 outnum=0 #畫游戲背景 window_canvas.create_image(0,0,anchor=tkinter.NW,image=background_image,tag="background") #創(chuàng)建豆豆對(duì)象 globalbean bean=Bean.Bean(bean_image) window_canvas.create_image(bean.x,bean.y,anchor=tkinter.NW,image=bean.image,tag="bean") window_canvas.create_image(0,0,anchor=tkinter.NW,image=Start,tag="Start") pygame.mixer.init() pygame.mixer.music.load('Seve(鋼琴版).mp3')#加載背景音樂(lè) ifpygame.mixer.music.get_busy()==False: pygame.mixer.music.play(300,0)#重復(fù)300次,從第一秒開(kāi)始播放 defgame(): ifgame_state==Param.GAME_START: game_start() #鼠標(biāo)監(jiān)聽(tīng) window_canvas.bind("<Motion>",bean_move) window_canvas.bind("<Button-1>",judge_state) whileTrue: ifgame_state==Param.GAME_RUNNING: #物質(zhì)入場(chǎng) create_fruit() #物質(zhì)動(dòng)起來(lái) step_fruit() #刪除越界的物質(zhì) out_of_bounds() #檢測(cè)碰撞 bomb_action() ifscore>=0: #畫分和生命 draw_action() #更新顯示 game_window.update() time.sleep(0.04) if__name__=="__main__": game() game_window.mainloop()
三、效果展示
1)游戲界面
2)隨機(jī)截圖
3)消耗結(jié)束
綜上所述,這篇文章就給大家介紹完畢,希望可以給大家?guī)?lái)幫助
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/128813.html
小編寫這篇文章的一個(gè)主要目的,主要是用來(lái)給大家去做個(gè)相關(guān)的介紹,介紹的內(nèi)容主要是涉及到相關(guān)的游戲?qū)崿F(xiàn),比如怎么去做游戲呢?比如說(shuō),怎么去做打豆豆的游戲呢?關(guān)于這方面的內(nèi)容,下面就給大家詳細(xì)解答下。 序言 前天晚上,玩起了在我們的學(xué)生時(shí)代經(jīng)常玩的一些游戲,吃豆豆,但是我發(fā)現(xiàn),在一局游戲當(dāng)中,我們命的條數(shù)是比較少的,我根本不能吃完所有的豆豆,總是被敵人吃掉 于是,我在想怎么能夠保證我達(dá)到吃完...
摘要:先看看最后效果圖片的話是從網(wǎng)上小魚(yú)兒那個(gè)案例里面拿的,實(shí)現(xiàn)的功能如下是通過(guò)方向鍵操作烏龜,進(jìn)行吃魚(yú)吃魚(yú)的時(shí)候根據(jù)烏龜?shù)淖鴺?biāo)和魚(yú)的進(jìn)行檢測(cè),在碰撞區(qū)域則干掉這條魚(yú)背景音樂(lè)和吃魚(yú)音樂(lè)的播放分?jǐn)?shù)累積魚(yú)的平滑游動(dòng)控制幀頻實(shí)現(xiàn)代碼導(dǎo)入一些常用的函數(shù)烏 先看看最后效果 圖片的話是從網(wǎng)上小魚(yú)兒那個(gè)案例里面拿的,實(shí)現(xiàn)的功能如下: 是通過(guò)方向鍵操作烏龜,進(jìn)行吃魚(yú) 吃魚(yú)的時(shí)候根據(jù)烏龜?shù)膞,y坐標(biāo)和魚(yú)的x...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
Pydub是1個(gè)根據(jù)ffmpeg的Python數(shù)字音頻處理控制模塊,封裝形式了很多ffmpeg最底層插口,因而用這個(gè)方法做歌曲格式轉(zhuǎn)化會(huì)十分方便。今日為大家介紹它歌曲格式轉(zhuǎn)化作用,基本上適用所有歌曲音頻文件格式,所需要的可以了解一下 Pydub是1個(gè)根據(jù)ffmpeg的Python數(shù)字音頻處理控制模塊,封裝形式了很多ffmpeg最底層插口,因而用這個(gè)方法做歌曲格式轉(zhuǎn)化會(huì)十分方便,假如你閱讀文章...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02