python實現(xiàn)簡單flappy bird
更新時間:2018年12月24日 11:48:20 作者:wwxy261
這篇文章主要為大家詳細介紹了python實現(xiàn)簡單flappy bird小游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了python實現(xiàn)flappy bird的簡單代碼,供大家參考,具體內(nèi)容如下
import pygame
from pygame.locals import *
from sys import exit
import random
# 屏幕寬度
SCREENWIDTH = 288
# 屏幕高度
SCREENHEIGHT = 512
IMAGES = {}
# 背景圖片地址
BACKGROUND_PATH = 'back_ground.png'
PIPE_PATH = 'pipe.png'
BASE_PATH = 'base.png'
PLAYER_PATH = (
'bird2_0.png',
'bird2_1.png',
'bird2_2.png',
)
# 初始化
pygame.init()
# 創(chuàng)建窗口
SCREEN = pygame.display.set_mode((SCREENHEIGHT, SCREENHEIGHT))
# 設(shè)置窗口標(biāo)題
pygame.display.set_caption("Flappy Bird")
# 加載圖片,透明用convert_alpha,不透明用convert
IMAGES['background'] = pygame.image.load(BACKGROUND_PATH).convert()
IMAGES['base'] = pygame.image.load(BASE_PATH).convert_alpha()
IMAGES['bird'] = (
pygame.image.load(PLAYER_PATH[0]).convert_alpha(),
pygame.image.load(PLAYER_PATH[1]).convert_alpha(),
pygame.image.load(PLAYER_PATH[2]).convert_alpha(),
)
IMAGES['pipe'] = (
pygame.transform.rotate(pygame.image.load(PIPE_PATH).convert_alpha(), 180),
pygame.image.load(PIPE_PATH).convert_alpha()
)
BASEY = SCREENHEIGHT * 0.82
# 設(shè)置幀率
FPS = 30
FPSCLOCK = pygame.time.Clock()
PIPE_WIDTH = IMAGES['pipe'][0].get_width()
PIPE_HEIGHT = IMAGES['pipe'][0].get_height()
PLAYER_WIDTH = IMAGES['bird'][0].get_width()
PLAYER_HEIGHT = IMAGES['bird'][0].get_height()
PIPEGAPSIZE = 100 # 兩個水管之間的距離
x = SCREENWIDTH//2
y = SCREENHEIGHT//2
move_x = 0
move_y = 0
flap = 0 # 小鳥初始狀態(tài)
pipeVelX = -4 # 管道x方向的速度
playerVelY = 0 # 小鳥y方向的初速度
playerMaxVelY = 10 # 小鳥y方向的最大速度
playerMinVelY = -8 # 小鳥y方向的最小速度
playerAccY = 2 # 小鳥y方向的下降加速度
playerFlapAcc = -3 # 小鳥y方向的上升加速度
playerFLapped = False # 當(dāng)小鳥飛的時候為真
playery = int((SCREENHEIGHT - PLAYER_HEIGHT)/2)
# 隨機移動柱子
def getRandomPipe():
# 兩個水管之間的距離有如下變量
gapYs = [20, 30, 40, 50, 60, 70, 80, 90]
index = random.randint(0, len(gapYs) - 1)
gapY = gapYs[index]
gapY += int(BASEY * 0.2)
# 水管x坐標(biāo)
pipeX = SCREENWIDTH + 10
return [
{'x': pipeX, 'y': gapY - PIPE_HEIGHT}, # 上面水管的左上角位置
{'x': pipeX, 'y': gapY + PIPEGAPSIZE}, # 下面水管的左上角位置
]
newPipel = getRandomPipe()
upperPipes = [
{'x': SCREENWIDTH, 'y':newPipel[0]['y']}
]
lowerPipes = [
{'x': SCREENWIDTH, 'y':newPipel[1]['y']}
]
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
elif event.type == KEYDOWN:
if event.key == K_LEFT:
move_x = -3
elif event.key == K_RIGHT:
move_x = 3
elif event.key == K_UP:
move_y = -3
elif event.key == K_DOWN:
move_y = 3
elif event.type == KEYUP:
move_x = 0
move_y = 0
x = x + move_x
y = y + move_y
# 防止沖出邊界
if x > SCREENWIDTH:
x = 0
elif x < 0:
x = SCREENWIDTH
if y > SCREENHEIGHT:
y = 0
elif y < 0:
y = SCREENHEIGHT
# 貼圖在左上角
SCREEN.blit(IMAGES['background'], (0, 0)) # 背景
# 顯示水管
for uPipe, lPipe in zip(upperPipes, lowerPipes):
SCREEN.blit(IMAGES['pipe'][0], (uPipe['x'], uPipe['y']))
SCREEN.blit(IMAGES['pipe'][1], (lPipe['x'], lPipe['y']))
# 放小鳥
SCREEN.blit(IMAGES['bird'][flap], (x, y))
flap = flap + 1
if flap % 3 == 0:
flap = 0
for uPipe, lPipe in zip(upperPipes, lowerPipes):
uPipe['x'] += pipeVelX
lPipe['x'] += pipeVelX
# 當(dāng)水管移動到某一位置的時候,生成新的水管
if 0 < upperPipes[0]['x'] < 5:
newPipe = getRandomPipe()
upperPipes.append(newPipe[0])
lowerPipes.append(newPipe[1])
# 如果水管從右往左移動到邊緣,則摧毀水管
if upperPipes[0]['x'] < -PIPE_WIDTH:
# 隊列頭出隊
upperPipes.pop(0)
lowerPipes.pop(0)
# 刷新畫面
pygame.display.update()
FPSCLOCK.tick(FPS)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用Python簡單實現(xiàn)個貪吃蛇小游戲(保姆級教程)
本文基于Windows環(huán)境開發(fā),適合Python新手,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
解決pyCharm中 module 調(diào)用失敗的問題
今天小編就為大家分享一篇解決pyCharm中 module 調(diào)用失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python使用OpenCV獲取高動態(tài)范圍成像HDR
這篇文章主要介紹了python使用OpenCV獲取高動態(tài)范圍成像HDR,如何使用不同曝光設(shè)置拍攝的多張圖像創(chuàng)建高動態(tài)范圍圖像HDR,下文嗎更詳細的內(nèi)容介紹,需要的小伙伴可以參考一下2022-04-04

