欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+Pygame實戰(zhàn)之瘋狂吃水果游戲的實現(xiàn)

 更新時間:2022年06月29日 08:58:55   作者:顧木子吖  
吃豆人和切水果這兩個游戲相信大家都不陌生吧,本文將利用Python中的Pygame模塊編寫出一款結(jié)合吃豆人+切水果的新游戲:瘋狂吃水果,感興趣的可以了解一下

導語

嘿嘿!木木子今日閃現(xiàn)——已經(jīng)給大家寫了很多內(nèi)容啦~

涉及的人工智能、初學者、爬蟲、數(shù)據(jù)分析(這方面的一般不過審核)游戲........

PS:

吃豆人我寫過了哈

Python+Pygame實戰(zhàn)之吃豆豆游戲的實現(xiàn)

切水果我寫過了哈

Python Pygame實戰(zhàn)之水果忍者游戲的實現(xiàn)

今天二者集合,做出一款新游戲,哈哈哈,名字叫做《瘋狂??吃水果》小游戲,其實聽著挺??的,但是做出來的效果其實沒有想象中那么高大尚吶!(給你們打個預防針)

本文是基于Pygame寫的一款游戲哈!

一、準備中 

1)游戲玩法

隨機掉落:西瓜??加分、葡萄??減分、炸彈??一條生命值初始為二。鼠標右鍵移動。加減多少分具體就等你們自己玩兒了哈,都劇透了就不好玩了撒!每次的游戲代碼都給你們留點兒底,嘻嘻,自己摸索嘛~

2)環(huán)境安裝

小編使用的環(huán)境:Python3、Pycharm社區(qū)版、tkinter、Pygame模塊,部分自 帶模塊不展示。

模塊安裝:pip install -i https://pypi.douban.com/simple/+模塊名

3)素材準備

準備了背景音樂更有勁兒啦!記得seven這首歌嘛,還挺好聽的。

?準備好的素材圖片背景掉落的物品等。

二、代碼展示

代碼超級多的!僅展示部分

主程序

import tkinter
import random
import time
import Param
import Image
import Bonus
import Deduction
import Bean
import Bomb
import pygame
# 定義物質(zhì)列表(包含加分西瓜和消分葡萄和炸彈)
bonusth = []
deductionth = []
bigbombs = []
# 定義bean變量,保存豆豆對象
bean =  ""
# 定義當前用戶的初始分數(shù)
score = 0
life = 2
# 定義游戲狀態(tài)
game_state = Param.GAME_START
 
# 創(chuàng)建窗體
game_window = tkinter.Tk()
# 窗口文字設(shè)置
game_window.title('I LOVE FRUIT')
# 窗口位置處理
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)
 
# 時間標志
count = 0
num = 30 
 
def create_fruit():# 生成水果
    global count
    global num
    global score
    if score % 10 ==1:
        if num >= 8:
            num -= 8
    count += 1
    if count % num == 0:
        c = random.randint(1,10)
        if c <= 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)
        elif c<=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)
 
def step_fruit():
    # 遍歷所有的物質(zhì),調(diào)用移動的方法
    for bonus in bonusth:
        bonus.step(window_canvas)
    for deduction in deductionth:
        deduction.step(window_canvas)
    for bigbomb in bigbombs:
        bigbomb.step(window_canvas)
 
def judge_state(event):
    global game_state
    if game_state == Param.GAME_START:
        game_state = Param.GAME_RUNNING
        # 畫分
        window_canvas.create_text(20, 20, text="分數(shù):%d" % (score), anchor=tkinter.NW, fill="white",\
        font="time 12 bold",tag="SCORE")
        # 畫生命
        window_canvas.create_text(20, 50, text="生命:%d" % (life), anchor=tkinter.NW, fill="white",\
        font="time 12 bold",tag="LIFE")
        # 刪除啟動圖片
        window_canvas.delete("Start")
 
    elif game_state == Param.GAME_STOP:
        window_canvas.delete("bean")
        window_canvas.delete("STOP")
        game_state = Param.GAME_START
        game_start()
 
def bean_move(event):
    if game_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)
 
def out_of_bounds():
    # 獲取所有物質(zhì),判斷是否越界
    for deduction in deductionth:
        if deduction.out_of_bounds():
            window_canvas.delete(deduction.tag)
            deductionth.remove(deduction)
    for bonus in bonusth:
        global outnum
        if bonus.out_of_bounds():
            outnum += 1
            window_canvas.delete(bonus.tag)
            bonusth.remove(bonus)
        if outnum >= 5:
            game_state = Param.GAME_STOP
                # 畫游戲結(jié)束的狀態(tài)
            game_over()
    for bigbomb in bigbombs:
        if bigbomb.out_of_bounds():
            window_canvas.delete(bigbomb.tag)
            bigbombs.remove(bigbomb)
 
def bomb_action():
    global score
    global life
    global bean
    global game_state
    #加分
    for bonus in bonusth:
        if bonus.bomb(bean):
            window_canvas.delete(bonus.tag)
            bonusth.remove(bonus)
            score += 3
    #減分
    for deduction in deductionth:
        if deduction.bomb(bean):
            window_canvas.delete(deduction.tag)
            deductionth.remove(deduction)
            if score - 5 < 0:
                score = 0
                game_state = Param.GAME_STOP
                # 畫游戲結(jié)束的狀態(tài)
                game_over()
            else:
                score -= 5
                
    for bigbomb in bigbombs:
        if bigbomb.bomb(bean):
            window_canvas.delete(bigbomb.tag)
            bigbombs.remove(bigbomb)
            # 如果分數(shù)或生命小于0 游戲結(jié)束
            if life - 1 <= 0:
                life = 0
                game_state = Param.GAME_STOP
                # 畫游戲結(jié)束的狀態(tài)
                game_over()
            else:
                life -= 1            
 
def draw_action():
    # 畫分
    window_canvas.delete("SCORE")
    # 畫生命
    window_canvas.delete("LIFE")
    window_canvas.create_text(20,20,text="分數(shù):%d"%(score),anchor=tkinter.NW,fill="white",font="time 12 bold",tag="SCORE")
    window_canvas.create_text(20,50,text="生命:%d"%(life),anchor=tkinter.NW,fill="white",font="time 12 bold",tag="LIFE")
    
def game_over():
    global game_state
    game_state = Param.GAME_STOP
    for deduction in deductionth:
        window_canvas.delete(deduction.tag)
    for bonus in bonusth:
        window_canvas.delete(bonus.tag)
    for bigbomb in bigbombs:
        window_canvas.delete(bigbomb.tag)
    deductionth.clear()
    bonusth.clear()
    bigbombs.clear()
    window_canvas.create_image(0,0,anchor=tkinter.NW,image=Stop,tag="STOP")
    if pygame.mixer.music.get_busy() == True:
        pygame.mixer.music.stop()#停止播放
    
def game_start():
    global score
    global life
    global num
    global outnum
    num = 30
    score = 0
    life = 2
    outnum = 0
    # 畫游戲背景
    window_canvas.create_image(0, 0, anchor=tkinter.NW, image=background_image, tag="background")
    # 創(chuàng)建豆豆對象
    global bean
    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') #加載背景音樂
    if pygame.mixer.music.get_busy() == False:
        pygame.mixer.music.play(300,0)#重復300次,從第一秒開始播放
    
def game():
    if game_state == Param.GAME_START:
        game_start()
        # 鼠標監(jiān)聽
        window_canvas.bind("<Motion>",bean_move)
        window_canvas.bind("<Button-1>",judge_state)
 
    while True:
        if game_state == Param.GAME_RUNNING:
            # 物質(zhì)入場
            create_fruit()
            # 物質(zhì)動起來
            step_fruit()
            # 刪除越界的物質(zhì)
            out_of_bounds()
            # 檢測碰撞
            bomb_action()
            if score >= 0:
                # 畫分和生命
                draw_action()
                # 更新顯示
        game_window.update()
        time.sleep(0.04)
 
if __name__ == "__main__":
    game()
    game_window.mainloop()

三、效果展示

1)游戲界面

2)隨機截圖

3)消耗結(jié)束

以上就是Python+Pygame實戰(zhàn)之瘋狂吃水果游戲的實現(xiàn)的詳細內(nèi)容,更多關(guān)于Python Pygame瘋狂吃水果的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PyQt子線程處理業(yè)務(wù)事件的問題解決

    PyQt子線程處理業(yè)務(wù)事件的問題解決

    在PyQt中,主線程通常是指GUI主循環(huán)所在的線程,而子線程則是執(zhí)行實際工作的線程,本文主要介紹了PyQt子線程處理業(yè)務(wù)事件的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • python 列表遞歸求和、計數(shù)、求最大元素的實例

    python 列表遞歸求和、計數(shù)、求最大元素的實例

    今天小編就為大家分享一篇python 列表遞歸求和、計數(shù)、求最大元素的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • PyTorch中的Variable變量詳解

    PyTorch中的Variable變量詳解

    今天小編就為大家分享一篇PyTorch中的Variable變量詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 反編譯exe文件為py文件的實例代碼

    python 反編譯exe文件為py文件的實例代碼

    這篇文章主要介紹了python 反編譯exe文件為py文件的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • python字符串定義的三種方式

    python字符串定義的三種方式

    在Python中,字符串是一個非常重要的數(shù)據(jù)類型,可用來存儲和操作文本數(shù)據(jù),本文主要介紹了python字符串定義的三種方式,具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • 蘋果Macbook Pro13 M1芯片安裝Pillow的方法步驟

    蘋果Macbook Pro13 M1芯片安裝Pillow的方法步驟

    Pillow作為python的第三方圖像處理庫,提供了廣泛的文件格式支持,本文主要介紹了蘋果Macbook Pro13 M1芯片安裝Pillow,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • keras實現(xiàn)多種分類網(wǎng)絡(luò)的方式

    keras實現(xiàn)多種分類網(wǎng)絡(luò)的方式

    這篇文章主要介紹了keras實現(xiàn)多種分類網(wǎng)絡(luò)的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Django web框架使用url path name詳解

    Django web框架使用url path name詳解

    這篇文章主要介紹了Django web框架使用url path name詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Django 解決由save方法引發(fā)的錯誤

    Django 解決由save方法引發(fā)的錯誤

    這篇文章主要介紹了Django 解決由save方法引發(fā)的錯誤,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Django3基于WebSocket實現(xiàn)WebShell的詳細過程

    Django3基于WebSocket實現(xiàn)WebShell的詳細過程

    最近工作中需要開發(fā)前端操作遠程虛擬機的功能,簡稱WebShell,普通應用大部分用的都是wsgi.py配合nginx部署線上服務(wù). 這次主要使用asgi.py,具體實現(xiàn)過程跟隨小編一起看看吧
    2021-08-08

最新評論