Python实现王思聪吃热狗
本游戏要完成开始界面和游戏界面的实现和切换。实现热狗、王思聪和玩家飞机的碰撞检测检测。为消失的王思聪添加爆炸效果为消失的飞机添加爆炸效果。
首先得在网上找到王思聪图像和飞机、热狗、背景图,音效,首先要创建窗口和并插入背景图片,实现背景图像的无缝交替,判断是否飞机和王思聪是否移出屏幕,指定飞机和王思聪的初始位置、初始速度和初始血量,响应按键实现玩家飞机发射子弹,碰撞检测实现热狗消灭王思聪。
(1)搭建Pygame开发环境;
(2)实现开始界面,设置游戏声音和背景;
(3)实现游戏界面;
(4)实现玩家飞机的显示和销毁,控制移动;
(5)实现王思聪的随机显示和销毁;
(6)实现热狗的显示和销毁、移动;
(7)实现界面的实时刷新;
(8)实现玩家分数记录;
(9)实现王思聪被击中后的爆炸效果;
(10)实现背景音乐。
首先创建一个开始界面类,在这个类中创建它的构造函数。实现开始界面图片集合,定义屏幕窗口大小:
screen=pygame.display.set_mode((480,750))
实现背景图片:将加载到内存的图片绘制到屏幕指定的位置, 将背景图片绘制到屏幕,绘制就调用屏幕对象的blit方法,刷新屏幕显示,否则绘制的图片无法显示,添加文字显示游戏名称和制作人信息,实现开始按钮图片,判断鼠标是否在按钮范围,区域检测,如果玩家鼠标点击按钮,进入游戏界面,即调用游戏界面类的Show()方法,并让isPlay置位True。
创建游戏界面类,并实现其构造函数,当玩家鼠标点击开始界面中的开始游戏按钮,调用游戏界面
实现背景图片的无缝衔接:
self.rect1=self.rect1.move(0,self.speed)
self.rect2=self.rect2.move(0,self.speed)
if self.rect1.y>=720:
self.rect1.y=self.rect2.y-768
if self.rect2.y>=720:
self.rect2.y=self.rect1.y-768
self.screen.blit(self.image1,self.rect1)
self.screen.blit(self.image2,self.rect2)
设置字体并在屏幕左上角显示玩家分数和血量:
myFont=pygame.font.Font("font/Marker Felt.ttf",30)
创建玩家飞机类,并实现其构造函数,显示玩家飞机图片,指定玩家飞机初始位置为屏幕的下侧中间的位置、初始速度为1和初始血量为1,初始分数为1,当热狗击中王思聪时,分数加10。
监听用户做的各种操作,响应按键实现玩家飞机移动:当玩家按下键盘上的a键,飞机向左移动;当玩家按下键盘上的d键,飞机向右移动;当玩家按下键盘上的w键,飞机向上移动;当玩家按下键盘上的s键,飞机向下移动:
if i.type==pygame.KEYDOWN:
if i.key==pygame.K_a:
Hero.left=True
......
发射热狗,即调用热狗类的Show()方法。
碰撞检测,当玩家飞机碰到王思聪时。销毁玩家飞机,返回开始界面。
创建王思聪类,并实现其构造函数,显示王思聪图片,使用随机函数random()指定王思聪随机位置和出现频率,并设置初始速度为1和初始血量为1,如图3-5所示:
图3-5 王思聪
实现碰撞检测,当热狗击中王思聪时,让王思聪血量减一,即执行死亡动画,动画就是将多张静止的图片快速的播放,这里就涉及到帧数的问题,一般每秒60刷新60次就能制作高品质的动画。这里我将王思聪图像缓慢替换为死亡图片,并销毁王思聪和热狗:
self.screen.blit(self.imgs[self.deadIndex],self.rect)
self.deadAdd+=1
if self.deadAdd==30:
self.deadIndex+=1
if self.deadIndex==len(self.imgs):
sounds[0].play()
heroObj.score+=10 # 加分
if self in enemyList:
enemyList.remove(self)
self.deadAdd=0
如图所示:
创建热狗类,并实现其构造函数,获取玩家飞机位置,在玩家飞机的上面出现,并向上移动,当热狗击中王思聪时,将王思聪图像缓慢替换为死亡图片,并销毁热狗:
if self.rect.y<=-20:
if self in bulletList:
bulletList.remove(self)
self.screen.blit(self.image,self.rect)
如图所示:
最终效果如图3-7所示: