用户:天上的流星_tianqiVirus查看:0 回复:0 评论:0 创建时间:2019-06-23T13:47:36
教你用pygame开发游戏
今日游戏:飞机大战(自创)
如果对几行代码没有看懂,那么你可能是没看过上一次的结果
那就去看看我之前的帖子
今天我们来当消防员,扑灭我们子弹的嚣张气焰
但是有一个问题,这是我们的飞机,我们也不能一打到就把它给废了
那还怎么玩啊
所以我们可以先给它减少health point
health point,简称hp
所以我们先在循环前加入hp这个变量
hp = 3
我还是那句老话,注意缩进
有了“欺负”的对象后,我们加入碰撞检测的代码,在上次检测的代码后面
if enemy_bullet_Rect.colliderect(planeRect):
hp-=1
enemy_bullet_x = enemy_x + 15
enemy_bullet_y = enemy_y + 10
有了health point概念,我们就可以让飞机喵了
同时,我们知道子弹打中目标就不继续往后了
所以要把子弹返回敌机
当hp为非正数时,飞机就嗝屁了
在以上代码后面加上这个
if hp<=0:
pass
我们可以在if语句里加入一个print看看效果怎么样
还有,你碰到敌鸡你也得玩完
所以在以上if内加入一个表达式,成为:
if hp<=0 or planeRect.colliderect(enemyRect):
print("deutschland") #print里面的东西你们随便打
起作用了
然后飞机会怎么样
炸了
现在获取爆炸图片,在源码编辑器里应该有
转换成pygameSurface,在循环前加入代码
exeplosion = pygame.image.load("assets/image/exeplosion/exeplosion.png")
获取图片分辨率
除以2约为54*54
那么在显示时,我们可以把它放在鼠标x坐标-54,y坐标-54的地方
要基于鼠标坐标移动是因为飞机是跟随鼠标的,在爆炸时也一样
那么我们把之前的print改为如下
if hp<=0 or planeRect.colliderect(enemyRect):
screen.blit(exeplosion,(x-54,y-54))
还要把代码放到最后
因为目前代码在设置背景的代码后面,会被覆盖掉
移到这里就行了
看看效果
这样,今天的任务就这样了
最终代码如下
import pygame
import random #随机数
pygame.init() #初始化pygame
screen = pygame.display.set_mode((338,492))#设置屏幕大小
pygame.display.set_caption("飞机大战")#设置屏幕标题
background_1=pygame.image.load("assets/image/background.png")
background_2=pygame.image.load("assets/image/background.png") #流动式背景
plane = [
pygame.image.load("assets/image/plane/plane_1.png"),
pygame.image.load("assets/image/plane/plane_2.png"),
pygame.image.load("assets/image/plane/plane_3.png"),
pygame.image.load("assets/image/plane/plane_4.png")
] #飞机造型
enemy = pygame.image.load("assets/image/plane/Enemy.png")
bullet = pygame.image.load("assets/image/Bullet/bullet.png")
enemy_bullet = pygame.image.load("assets/image/Bullet/bullet_enemy.png")
exeplosion = pygame.image.load("assets/image/exeplosion/exeplosion.png")
keepGoing=True #控制程序持续运行
going_time=0
background_y = 0
plane_x=0
plane_y=492
enemy_y = 0
enemy_x = 0
bullet_y = -52
bullet_x = 0
enemy_bullet_x = 0
enemy_bullet_y = 492
hp = 3
planeRect = pygame.Rect(plane_x+42,plane_y+8,21,46)
enemyRect = pygame.Rect(enemy_x+25,enemy_y+10,29,35)
bulletRect = pygame.Rect(bullet_x+11,bullet_y+10,29,26)
enemy_bullet_Rect = pygame.Rect(enemy_bullet_x+10,enemy_bullet_y+20,27,24)
while keepGoing:
background_y+=1
going_time+=1
enemy_y+=2
bullet_y-=4
enemy_bullet_y+=3.5
planeRect.x = plane_x+42
planeRect.y = plane_y+8
enemyRect.x = enemy_x+25
enemyRect.y = enemy_y+10
bulletRect.x = bullet_x+11
bulletRect.y = bullet_y+10
enemy_bullet_Rect.x = enemy_bullet_x+10
enemy_bullet_Rect.y = enemy_bullet_y+20
for event in pygame.event.get():#检测鼠标和键盘按下,移动之类的事件
if event.type == pygame.QUIT: #检测是否按下关闭键
keepGoing = False #如果是就退出循环
x,y = pygame.mouse.get_pos()
plane_x=x-53
plane_y=y-34 #飞机跟随鼠标移动
if background_y == 492:
background_y = 0
if enemy_y >= 492:
enemy_y = -58
enemy_x = random.randint(0,259)
if bullet_y <= -52:
bullet_y = y-26
bullet_x = x-25
if enemy_bullet_y >= 492:
enemy_bullet_x = enemy_x + 15
enemy_bullet_y = enemy_y + 10
if bulletRect.colliderect(enemyRect):
enemy_y = -58
enemy_x = random.randint(0,259)
if enemy_bullet_Rect.colliderect(planeRect):
hp-=1
enemy_bullet_x = enemy_x + 15
enemy_bullet_y = enemy_y + 10
screen.blit(background_1,(0,background_y))
screen.blit(background_2,(0,background_y-492))
screen.blit(plane[going_time%4],(plane_x,plane_y))
screen.blit(enemy,(enemy_x,enemy_y))
screen.blit(bullet,(bullet_x,bullet_y))
screen.blit(enemy_bullet,(enemy_bullet_x,enemy_bullet_y))
if hp<=0 or planeRect.colliderect(enemyRect):
screen.blit(exeplosion,(x-54,y-54))
pygame.display.update()
pygame.quit() #退出pygame
想要继续学习pygame和游戏制作的请关注
id:天上的流星
本帖内的所有代码,思想仅供参考,请勿用于商业盈利用途