一、给玩家坦克一个脆弱的家
测试玩了一下,才发现玩家的家还没安排。
1、载入家的图片。
2、地图字典索引,生命值设为1,生命脆弱哦。
3、wall_map方法中设定家的位置。
if data.iloc[row, colum] == '家':
wall_type = 'home'
wall = Wall(surface, filename, wall_type, colum * 25, row * 25)
wall_sprites.add(wall)
二、关于家的碰撞设定
1、双方坦克不能穿过家,暂且按除草以外的墙来处理,这里就不改了。
2、被敌方子弹击中,结束游戏,在敌方坦克子弹与墙的碰撞中加一条,家被射击,玩家生命数量为0,终结游戏。
elif b_wall.wall_type == 'home':
player.life = 0
三、信息提示:
1、在main.py中定义draw_text方法。
def draw_text(surface, text, x, y, size):
font = pygame.font.Font(os.path.join('font', 'HarmonyOS_Sans_SC_Regular.ttf'), size)
font_text = font.render(text, False, (255, 255, 255))
font_rect = font_text.get_rect()
font_rect.x = x
font_rect.y = y
surface.blit(font_text, (x, y))
2、在start_interface中绘制提示选择进入游戏的方式。
# 开始界面函数
def start_interface(surface):
start_image = pygame.image.load(os.path.join('image', 'game', 'GameStart.png'))
surface.blit(start_image, (0, 0))
mini_image = pygame.image.load((os.path.join('image', 'game', 'mini_tank.png')))
surface.blit(mini_image, (340, 310 + option_number * 45))
draw_text(surface, '按Tab键选择菜单,按Enter键进入', 340, 270, 20)
3、在main.py中定义game_info方法,完善游戏界面及玩法提示。
def game_info(surface, player):
surface.fill((100, 100, 100), (900, 0, 1000, 600))
draw_text(surface, '玩家坦克: ' + str(player.life), 905, 20, 12)
draw_text(surface, '游戏说明: ', 905, 60, 12)
draw_text(surface, '← 向左移动', 905, 80, 12)
draw_text(surface, '↑ 向上移动', 905, 100, 12)
draw_text(surface, '↓ 向下移动', 905, 120, 12)
draw_text(surface, '→ 向右移动', 905, 140, 12)
draw_text(surface, '空格键发射子弹', 905, 160, 12)
draw_text(surface, '击毁敌方坦克数:', 905, 220, 12)
draw_text(surface, str(player.score), 905, 240, 20)
测试结果:
这里贴一下地图excel文件的内容,通过pandas读取excel文件,并进行字符与图片的匹配,就可以得到游戏地图了。
四、爆炸效果:
写一个爆炸效果:explode.py,在坦克被击毁时显示。
import os.path
import pygame
class Explode:
def __init__(self, surface, x, y):
self.surface = surface
self.image = pygame.image.load(os.path.join('image', 'explode', 'explode.png'))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def update(self):
for i in range(6):
self.image = pygame.image.load(os.path.join('image', 'explode', 'explode.png'))
self.surface.blit(self.image, (self.rect.x, self.rect.y))
五、声音效果:
准备了五种声音效果,开始游戏、结束游戏,射击、坦克移动以及击杀地方坦克,建立sound.py文件,在各自地方响应。
import pygame
import os
move_sound = os.path.join('sound', 'move.wav')
shoot_sound = os.path.join('sound', 'shoot.wav')
intro_sound = os.path.join('sound', 'intro.wav')
game_over_sound = os.path.join('sound', 'game_over.wav')
kill_sound = os.path.join('sound', 'kill.wav')
class Music:
def __init__(self, sound_name):
pygame.mixer.init()
self.sound_name = sound_name
self.sound = pygame.mixer.Sound(self.sound_name)
def play(self, loops=0):
self.sound.set_volume(0.2)
self.sound.play(loops)
基本就这个样子吧,如果想进入第二关地图,可以通过判定得分来控制level实现。
标签:sound,python,text,self,surface,pygame,image,os,边学边 From: https://blog.csdn.net/2302_76282232/article/details/136674777