python编写呆呆小鸟游戏

####################引用数据库与函数######################
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()
上一篇:教你利用python 的单人AI 扫雷游戏


下一篇:pygame用blit()实现动画效果