<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python開發(fā)教程:基于pygame的兔子吃月餅小游戲

          共 6622字,需瀏覽 14分鐘

           ·

          2021-09-20 08:22

          中秋佳節(jié)就快來臨,給各位大佬整個兔子吃月餅的小游戲助助興,廢話不多說,開整。

          小游戲規(guī)則簡介

          玩家通過"wsad"或者"↑↓←→"鍵控制兔子移動,使得兔子可以吃到更多的月餅,月餅一旦生成之后位置不會變,也不會消失,就等著兔子去吃,就是這么簡單。但是吃了月餅會變重,重到一定程度會有想不到的效果。

          實(shí)現(xiàn)

          使用Python的pygame模塊開發(fā),pygame是用來開發(fā)游戲軟件的Python第三方庫,基于SDL庫的基礎(chǔ)上開發(fā)。可以創(chuàng)建功能豐富的游戲和多媒體程序,用它來開發(fā)小游戲非常適合。

          初始化游戲窗口

          import sysimport pygame
          width = 800height = 800# 初始化所有pygame模塊pygame.init()# 創(chuàng)建游戲主窗口 width * heightwindows = pygame.display.set_mode((width, height))pygame.display.set_caption('兔子吃月餅??!')# 游戲循環(huán)while True: # 給屏幕填充顏色 windows.fill((204, 204, 255)) for event in pygame.event.get(): # 判斷事件是否是退出事件,是則退出 if event.type == pygame.QUIT: # 先退出pygame窗口,再退出程序 pygame.quit() sys.exit() pygame.display.flip()

          游戲邏輯

          實(shí)現(xiàn)玩家類

          玩家應(yīng)該包括以下屬性:位置、角色大小、分?jǐn)?shù)等,還應(yīng)該有移動位置move的方法,由于在此玩家控制的是一只兔子,玩法是吃月餅,所以把分?jǐn)?shù)換為重量。
          class Rabbit:    """    玩家兔子類    """
          def __init__(self, top, left, height, width): # 初始位置及大小 self.top = top self.left = left self.height = height self.width = width # 游戲人物的初始位置 self.rect = pygame.Rect(self.left, self.top, self.width, self.height)
          self.player_image = pygame.image.load('兔子.png') self.player_stretched_image = pygame.transform.scale(self.player_image, (height, width))
          # 控制移動變量 self.move_left = False self.move_right = False self.move_up = False self.move_down = False # 每次移動的大小 self.MOVESPEED = 5 # 重量 self.weight = 5
          def move(self): """ 控制移動 :return: """ if self.move_down and self.rect.bottom < height: self.rect.top += self.MOVESPEED self.rect.bottom += self.MOVESPEED if self.move_up and self.rect.top > 0: self.rect.top -= self.MOVESPEED self.rect.bottom -= self.MOVESPEED if self.move_left and self.rect.left > 0: self.rect.left -= self.MOVESPEED self.rect.right -= self.MOVESPEED if self.move_right and self.rect.right < width: self.rect.left += self.MOVESPEED self.rect.right += self.MOVESPEED

          實(shí)現(xiàn)月餅類

          月餅包括月餅的位置大小,及月餅的圖像,月餅的圖像在已有的圖像中隨機(jī)選擇。
          class MoonCake:    """    月餅類    """
          def __init__(self): # 位置及大小 self.rect = pygame.Rect(random.randint(0, 750), random.randint(0, 750), 20, 20) # 圖像        self.moon_cake_image = pygame.image.load("./月餅/月餅{}.png".format(random.randint(18)))

          交互邏輯

          主要在游戲窗口內(nèi)生成并顯示玩家兔子和月餅,然后監(jiān)聽鍵盤事件,監(jiān)聽"wsad"或者"↑↓←→"鍵,來控制兔子上下左右的進(jìn)行移動,再實(shí)現(xiàn)碰撞檢測來驗證兔子是否吃到月餅,吃到月餅則重量增加。運(yùn)行過程中也會不斷判斷月餅的數(shù)量,并不斷增加。
          def game_run():    global width    global height    # 是否結(jié)束    end = False    # 創(chuàng)建時鐘對象 (可以控制游戲循環(huán)頻率)    clock = pygame.time.Clock()    # 月餅計數(shù)器    moon_cake_limit = 20
          player = None if not player: player = Rabbit(300, 100, 64, 64) moon_cakes = [] for i in range(20): moon_cake = MoonCake() moon_cakes.append(moon_cake)
          # 游戲循環(huán) while True and not end: # 給屏幕填充顏色 windows.fill((204, 204, 255)) # 監(jiān)聽鍵盤事件 key_pressed = pygame.key.get_pressed() if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]: player.move_right = False player.move_left = True if key_pressed[pygame.K_d] or key_pressed[pygame.K_RIGHT]: player.move_left = False player.move_right = True if key_pressed[pygame.K_w] or key_pressed[pygame.K_UP]: player.move_down = False player.move_up = True if key_pressed[pygame.K_s] or key_pressed[pygame.K_DOWN]: player.move_up = False player.move_down = True player.move() for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYUP: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.key == K_LEFT or event.key == K_a: player.move_left = False if event.key == K_RIGHT or event.key == K_d: player.move_right = False if event.key == K_UP or event.key == K_w: player.move_up = False if event.key == K_DOWN or event.key == K_s: player.move_down = False
          # 月餅不足20時生成新的月餅 if len(moon_cakes) < moon_cake_limit: # 生成新的月餅 moon_cakes.append(MoonCake())
          # 畫兔子 windows.blit(player.player_stretched_image, player.rect) # 顯示兔子的重量 text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 30) text_fmt = text.render("重量:{}斤!".format(player.weight), True, (255, 255, 255)) windows.blit(text_fmt, (0, 0)) # 畫月餅 for moon_cake in moon_cakes: windows.blit(moon_cake.moon_cake_image, moon_cake.rect) # 碰撞檢測 for moon_cake in moon_cakes: if player.rect.colliderect(moon_cake.rect): moon_cakes.remove(moon_cake) # 吃到月餅兔子會變重 player.weight += 2
          pygame.display.flip() pygame.display.update() # 通過時鐘對象指定循環(huán)頻率 clock.tick(40)
          運(yùn)行如下:

          突然發(fā)現(xiàn),這樣的話這個游戲永遠(yuǎn)不會結(jié)束,可以一直玩下去,上面我們說了,兔子吃到月餅重量會增加,那我們增加一個機(jī)制:等兔子的重量大于100斤的時候,游戲結(jié)束,對!你沒有看錯!,就是這么草率?。?!
          在碰撞檢測循環(huán)里加入以下邏輯:
          if player.weight > 10:    end = True    while end:        # 游戲結(jié)束        windows.fill((204, 204, 255))        text = pygame.font.SysFont("microsoftyaheimicrosoftyaheiui", 50)        text_fmt1 = text.render("你的兔子撐死了!!".format(player.weight), True, (255, 255, 255))        text_fmt2 = text.render("game over!".format(player.weight), True, (255, 255, 255))        windows.blit(text_fmt1, (200, 200))        windows.blit(text_fmt2, (260, 300))        clock.tick(40)        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                sys.exit()                # 按任意鍵繼續(xù)            if event.type == pygame.KEYDOWN:                end = False                # 重新生成玩家兔子及月餅                player = Rabbit(random.randint(0, 750), random.randint(0, 750), 64, 64)                moon_cakes.clear()                for i in range(20):                    moon_cake = MoonCake()                    moon_cakes.append(moon_cake)
          pygame.display.flip() pygame.display.update()
          為了方便調(diào)試,改成了兔子重量大于10斤,即結(jié)束。運(yùn)行如下:
          完成!感謝閱讀,提前祝大家中秋快樂?。。?/span>

          搜索下方加老師微信

          老師微信號:XTUOL1988切記備注學(xué)習(xí)Python

          領(lǐng)取Python web開發(fā),Python爬蟲,Python數(shù)據(jù)分析,人工智能等精品學(xué)習(xí)課程。帶你從零基礎(chǔ)系統(tǒng)性的學(xué)好Python!

          *聲明:本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請聯(lián)系我們刪除或授權(quán)


          瀏覽 32
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99国精产品自偷自偷综合 | 翔田千里在线播放 | 久久成人人人人精品欧 | 久久久久99精品欧美成人 | 精品久久久久久久久久久久久久 |