####################引用数据库与函数######################
import pygame
from random import randrange
pygame.init()
from time import sleep
######################定义变量###########################
frame = 0 #当前在0帧处
map_width = 284
map_height = 512 #因为图片大小是284*512的
FPS = 60
pipes = [[200,4]]
bird = [40,map_height//2-50]
gravity = 0.2
velocity = 0
gameScreen = pygame.display.set_mode((map_width,map_height))
clock = pygame.time.Clock()
bird_wing_up = bird_wing_up_copy = pygame.image.load("images/bird_wing_up.png")
bird_wing_down = bird_wing_down_copy = pygame.image.load("images/bird_wing_down.png")
background = pygame.image.load("images/background.png")
pipe_body = pygame.image.load("images/pipe_body.png")
pipe_end = pygame.image.load("images/pipe_end.png")
#######################定义函数##########################
def draw_pipes():
global pipes
for n in range(len(pipes)):
for m in range(pipes[n][1]):
gameScreen.blit(pipe_body,(pipes[n][0],m*32))#一个小管子的高度是32
for m in range(pipes[n][1]+6,16):
gameScreen.blit(pipe_body, (pipes[n][0], m * 32))
gameScreen.blit(pipe_end,(pipes[n][0],pipes[n][1] * 32))
gameScreen.blit(pipe_end,(pipes[n][0],(pipes[n][1]+5) * 32))
pipes[n][0] -= 1
def draw_bird(x,y):
global frame
if 0<= frame < 30:
gameScreen.blit(bird_wing_up, (x, y))
frame += 1
elif 30<= frame <=60:
gameScreen.blit(bird_wing_down, (x, y))
frame += 1
if frame == 60:
frame = 0
def safe():
if bird[1]>map_height-35:
print('you die ! fw')
return False
if bird[1] < 0:
print('you die ! fw')
return False
if pipes[0][0]-30 < bird[0] < pipes[0][0]+79 :
if bird[1]<(pipes[0][1]+1)*32 or bird[1]>(pipes[0][1]+4)*32:
print("You die ! fw")
return False
return True
def reset():
global bird,velocity, gravity, bird_wing_down, bird_wing_up, frame, map_width, map_height, FPS, pipes
frame = 0 # 当前在0帧处
map_width = 284
map_height = 512 # 因为图片大小是284*512的
FPS = 60
pipes.clear()
bird.clear()
pipes = [[200, 4]]
bird = [40, map_height // 2 - 50]
gravity = 0.2
velocity = 0
def gameLoop():
while True:
global velocity,gravity,bird_wing_down,bird_wing_up
if len(pipes)<4:
x = pipes[-1][0]+200
open_pos = randrange(1,9)
pipes.append([x,open_pos])
if pipes[0][0]< -100 :
pipes.pop(0)
for event in pygame.event.get(): #记录用户所有的操作
if event.type == pygame.KEYDOWN:
bird[1] -= 40
velocity = 0
if event.type == pygame.QUIT:
pygame.quit()
return
velocity += gravity
bird[1]+= velocity
bird_wing_down = pygame.transform.rotate(bird_wing_down_copy,-90*(velocity/15))
bird_wing_up= pygame.transform.rotate(bird_wing_up_copy, -90*(velocity/ 15))
gameScreen.blit(background, (0, 0)) # blit:位块传送
draw_pipes()
draw_bird(bird[0],bird[1])#↓→为正
pygame.display.update()
if not safe():
sleep(3)
reset()
clock.tick(FPS)
#######################主程序##########################
gameLoop()
|