猫史档案馆


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

用户:天上的流星_tianqiVirus天上的流星_tianqiVirus查看:0 回复:1 评论:0 创建时间:2019-06-24T17:37:46


教你用pygame开发游戏

今日游戏:飞机大战(自创)

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

那就去看看我之前

的帖子

 

为了改善效果,我们可以在屏幕上添加heartPointscore的情况

hp值上次添加了,这次我们创建一个score变量

在上创建hp变量的代码后面加上这个

score = 0

同时,我们要做到打中敌机就加分的效果,请在图中位置添加这行代码

center_image

这个大家都懂的吧

		score+=1

那么,怎么把这个分数和hp(注意我这里没加绿缩小)显示出来呢?

最好的办法是把文字转换成图片然后用blit显示

在pygame中,有这样的方法叫render,其用法如下

font.render(str,bool,[int,int,int])

这里的font是字体,可以理解为一个变量,也就是说需要定义的

最简单定义方式如下

font = pygame.font.SysFont(str,int)

SysFont内的str是字体的名称,int是字号

回到render,它里面的str是你要显示的字的内容

bool是是否锯齿边,就是填True或者False

剩下的一个列表或元组是填RGB值,R G B三个值都为0颜色就是黑色,都为255颜色就是白色

同时三个值分别代表红,绿,蓝,即光的三原色,数值越高,红,绿,蓝的程度也越高

我们先使用SysFont

font = pygame.font.SysFont("Lucida Console",20)

我比较喜欢用的字体是Lucida Console字体

接下来,我们显示文本

为了实时更新数据,我们要把它放在循环内

请在循环开始输入以下代码

	score_text = font.render("score:" + str(score),True,(255,255,255))
	hp_text = font.render("health:" + str(hp),True,(255,255,255))

然后用blit显示

请在上次侦测飞机是否毁灭的代码前面

面加上以下代码

	screen.blit(score_text,(5,5))
	screen.blit(hp_text,(5,25))

要放到大多数blit代码后面的原因和显示爆炸特效的原因是一样的

看看效果center_image

这样,今天的任务就这样了

最终代码如下

import pygame
import random #随机数

pygame.init() #初始化pygame
screen = pygame.display.set_mode((338,492))#设置屏幕大小
pygame.display.set_caption("飞机大战")#设置屏幕标题
font = pygame.font.SysFont("Lucida Console",16)

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
score = 0

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:

	score_text = font.render("score:" + str(score),True,(255,255,255))
	hp_text = font.render("health:" + str(hp),True,(255,255,255))

	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)
		score+=1
	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))
	screen.blit(score_text,(5,5))
	screen.blit(hp_text,(5,25))

	if hp<=0 or planeRect.colliderect(enemyRect):
		screen.blit(exeplosion,(x-54,y-54))

	pygame.display.update()

pygame.quit() #退出pygame

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

id:天上的流星

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


回复

上一页1 页 / 共 1下一页
Xing_yuXing_yu

uuuuuuuuu

点赞0


评论