- Python
pygame第十课---小鸟飞飞2
- 2024-5-25 19:44:25 @
设置动画管道精灵的类---管道的图纸
管道的运动规则
创建一个精灵组来放管道精灵,为之后和小鸟的碰撞检测做准备
生成管道,并且确认随机位置
失败条件的设置
新管道的生成
游戏运行是更新的素材
游戏失败时更新的素材
重新开始时重置管道设置
1 条评论
-
mrhowe SU @ 2024-5-25 20:27:29
import pygame as pg import sys,random pg.init() #初始化 pg.display.set_caption("飞翔的小鸟")#设置标题 width,height = 700,500 win = pg.display.set_mode((width,height)) bg = pg.image.load("./img/bg_day.png").convert() #导入背景图片 bg = pg.transform.smoothscale(bg,(width,height)) # 设置背景图片的尺寸成窗口大小 font36 = pg.font.SysFont("微软雅黑",36) # 设置游戏内文字的字体和大小 clock = pg.time.Clock() # 开启时钟设置 running = False # 设置监控变量,默认游戏没有运行 high_score = current_score = 0 # 最高分和当前游戏得分两个变量初始化为0 msg = font36.render("按空格开始游戏",1,(0,0,0)) bird_images = [] #定义用来储存小鸟图片的列表 for i in range(3): img = pg.image.load(f"./img/bird0_{i}.png").convert_alpha() bird_images.append(img) class Bird(pg.sprite.Sprite): def __init__(self,images): pg.sprite.Sprite.__init__(self) self.images = images self.image = images[0] self.rect = self.image.get_rect() # 尺寸设置 self.rect.topleft = 150,300 # 位置设置 self.speed = 0 # 速度设置 self.frame = 0 def update(self): self.speed+= 0.5 self.rect.y += self.speed self.frame += 1 if self.frame>2: self.frame=0 self.image = self.images[self.frame] class Pipe(pg.sprite.Sprite): def __init__(self,image,top): pg.sprite.Sprite.__init__(self) self.image = image self.rect = self.image.get_rect() # 尺寸设置 self.mask = pg.mask.from_surface(self.image) self.rect.topleft = width,top def update(self): self.rect.x -= 5 if self.rect.right<0: self.kill() pipes = pg.sprite.Group() pipe_down_image = pg.image.load(f"./img/pipe_down.png").convert_alpha() pipe_up_image = pg.image.load(f"./img/pipe_up.png").convert_alpha() def add_pipe(): top = random.randint(-300,0) space = random.randint(100,200) pipes.add(Pipe(pipe_down_image,top)) pipes.add(Pipe(pipe_up_image,320+space+top)) add_pipe() bird = Bird(bird_images) while True : win.blit(bg,(0,0)) for event in pg.event.get(): if event.type == pg.QUIT: pg.quit() sys.exit() if event.type == pg.KEYDOWN and event.key == pg.K_SPACE: if not running: # 是否是没有开始游戏状态按的空格,也就是游戏开始状态 running = True bird = Bird(bird_images) pipes.empty() # 清空管道精灵组 add_pipe() # 往管道精灵组添加新的管道 else: bird.speed = -8 if running: # 失败条件 if (bird.rect.y<0 or bird.rect.y>height) or\ pg.sprite.spritecollide(bird,pipes,False , pg.sprite.collide_mask): running =False pg.time.wait(500) # 新管道生成 if len(pipes)==0: current_score +=1 add_pipe() bird.update() # 小鸟更新动作规则 win.blit(bird.image,bird.rect) # 小鸟更新图片和位置 pipes.update() # 管道精灵组更新动作规则 score = font36.render("Score:"+str(current_score),1,(0,0,0)) win.blit(score,(20,10)) # 把得分信息写在20,10的位置 pipes.draw(win) # 把管道精灵组中的动画精灵绘制在win窗口 else : high_score = max(high_score,current_score) current_score = 0 win.blit(font36.render("High Score:"+str(high_score),1,(0,0,0)),(200,300)) # 把最高分写在200,300的位置 win.blit(msg,(200,200)) clock.tick(60) pg.display.flip()
- 1