猫史档案馆


【pygame:飞机大战】教你用pygame开发游戏 Part4

用户:天上的流星_tianqiVirus天上的流星_tianqiVirus查看:0 回复:2 评论:0 创建时间:2019-06-04T19:51:13


教你用pygame开发游戏

今日游戏:飞机大战

如果你有几行代码没看懂,那么你可能是没看过上一次的结果

那就去看看我之前的帖子

 

上次我们说要加入炮弹

那么我们在assets文件夹下新建Bullet(子弹)文件夹

并放入图片center_image

顺便一提,我还是没有找到方法去让你们获取图片文件,喵瑞啦

总之,先加载pygameSurface

在统一加载pygameSurface的代码中加入这些

bullet = pygame.image.load("assets/image/Bullet/bullet.png")
enemy_bullet = pygame.image.load("assets/image/Bullet/bullet_enemy.png")

加载完毕后,我们添喵方子弹的代码

不幸的是,我没有研究出稳定的,像源码编辑器里的克隆的代码

所以,我们不得不等子弹飞出屏幕后回到我方飞机再次发射

但在此之前,我们得初始化各个子弹的坐标

bullet_y = -52
bullet_x = 0
enemy_bullet_x = 0
enemy_bullet_y = 492

注意,这个 bullet_y = -52  enemy_bullet_y = 492 的原理和当时初始化飞机坐标的原理是一样的

可以参考我之前发布的帖子

然后,我们再使用上面的思路,就能得到代码

请在循环内统一改变pygameSurface坐标的代码后加上

bullet_y-=4

然后请在图片中代码第52行后面加上第53~55行,即如下center_image

if bullet_y <= -52:
		bullet_y = y-26
		bullet_x = x-25

注意这个 x,y ,他们是代码 x,y = pygame.mouse.get_pos() 的返回值,即鼠标位置

众所周知,飞机是一直跟随鼠标移动的,那么让子弹跟随飞机移动,就可以直接让子弹跟随鼠标

而代码 -26 -25 分别是子弹文件分辨率的一半

现在,再用 blit 将pygameSurface显现

请在一系列blit函数后面加上这个

screen.blit(bullet,(bullet_x,bullet_y))

保存运行

center_image

Gut!

现在加入敌机子弹。其中心思想和我方子弹一样

在下图38行代码后面加上39行代码

center_image

enemy_bullet_y+=3.5

为了像我方子弹一样重复出现,我们要和我方子弹一样的事

请在下图第56行后面加上第57~59行center_image

if enemy_bullet_y >= 492:
		enemy_bullet_x = enemy_x + 15
		enemy_bullet_y = enemy_y + 10

只是不同的是,我方子弹可以跟随鼠标,但敌方子弹只能跟着敌机,因为敌机没有连鼠标

再用 blit 显示

screen.blit(enemy_bullet,(enemy_bullet_x,enemy_bullet_y))

然后就很斯巴拉喜了

center_image

那么,子弹就这样做摆设了?

没错,至少目前只能做摆设

大家可以试着做做看敌机子弹射中我方飞机造成反应

最终代码为

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")

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

while keepGoing:

	background_y+=1
	going_time+=1
	enemy_y+=2
	bullet_y-=4
	enemy_bullet_y+=3.5

	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

	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))

	pygame.display.update()

pygame.quit() #退出pygame

哦等等,还没完

这个最终代码是为了防止我自己写对了而帖子上写错了而出现的

这样,我们这一次的任务就完成了

想要继续学习pygame和游戏制作的请关注

id:天上的流星

本帖内的所有代码,思想仅供参考,请勿用于商业盈利用途

 


回复

上一页1 页 / 共 1下一页
十三月的季节十三月的季节

good

点赞0


评论


BYS海阔凭鱼跃天高任鸟飞BYS海阔凭鱼跃天高任鸟飞

关于克隆可以看https://shequ.codemao.cn/community/260580——pygame内置的外星人游戏,那里面的发射子弹应该是克隆

点赞0


评论