python/pygame坦克游戏边学边写笔记(六)

一、给玩家坦克一个脆弱的家

测试玩了一下,才发现玩家的家还没安排。

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实现。

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值