首页 > 编程语言 >python/pygame坦克游戏边学边写笔记(六)

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

时间:2024-03-19 16:00:29浏览次数:49  
标签:sound python text self surface pygame image os 边学边

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

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

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

相关文章

  • 超全!Python读取文件方法
    文件是无处不在的,无论我们使用哪种编程语言,处理文件对于每个程序员都是必不可少的文件处理是一种用于创建文件、写入数据和从中读取数据的过程,Python拥有丰富的用于处理不同文件类型的包,从而使得我们可以更加轻松方便的完成文件处理的工作本文大纲:使用上下文管理器打开......
  • python垃圾回收机制
    Python中的垃圾回收机制是自动的,它主要使用了引用计数来追踪和回收内存。1、引用计数当一个对象被创建时,就会被分配一块内存,然后将其引用计数设置为1。当另一个变量引用该对象时,引用计数就会增加1。当一个对象的引用计数变为0时,说明该对象没有任何引用,Python解释器就会将......
  • python(pip)包/模块:如何离线安装?
    1、生成requirements.txt文件如果有同环境服务器,可直接生成requirements.txt,会把当前服务器下的包和版本写入文件中。pipfreeze>requirements.txt如安装指定包,创建requirements.txt,输入包名==版本号//只输入包名,默认最新版本。例:xlwt==1.3.02、下载包在requirements.t......
  • Python数据库模块(sqlite3,SQLite3)
    一、sqlite命令创建数据库:在控制台sqlite3name.databases查看数据库.tables查看表格名databaseName.dump>dumpName将数据库存在文本文件dumpName中,恢复就用databaseName<dumpName;attachdatabase......
  • Python中常用网络编程模块
    一、网络基础网络由下往上分为:物理层、数据链路层、网络怪、传输层、会话层、表示层和应用层。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输;socket则是对TCP/IP协议的封装,它本身不是协议,而是一个调用接口;HTTP、FTP是应用协议,主要解决如何包装数据;TCP连接的三次握手:......
  • Python环境下基于注意力机制的小样本轴承故障诊断
    传统的基于特征提取与分类相结合的轴承智能诊断算法,对信号处理要求很高的专家经验,既费时又缺乏通用性。基于深度学习的智能轴承故障诊断方由于具有强大的特征提取能力,避免了繁琐复杂的特征提取工作,但是大多数研究都是在标准数据集下进行的,这意味着模型能够使用足量的数据进行训......
  • OpenCV4中的图像滤波函数定义,原理,以及区别(Python)
    图像滤波1.方框滤波方框滤波的滤波器为矩形,滤波器中的所有元素值均相等。定义如下:dst=boxFilter(src,ddepth,ksize,dst=None,anchor=None,normalize=None,borderType=None)src:输入图像。ddepth:处理后的目标图像的深度,若为-1,则深度与原始图像的深度相同。ks......
  • python自动化——自动化框架常用封装代码复习
    日志模块:importloggingimportosdefcreat_log(name="mylog",level="DEBUG",filename="log.log",sh_level="DEBUG",fh_level="DEBUG"):log=logging.getLogger(name)log.setLevel(level)fh=lo......
  • 分月饼【华为OD机试JAVA&Python&C++&JS题解】
    一.题目-分月饼中秋节,公司分月饼,m个员工,买了n个月饼,m<=n,每个员工至少分1个月饼,但可以分多个,单人分到最多月饼的个数是Max1,单人分到第二多月饼个数是Max2,Max1-Max2<=3,单人分到第n-1多月饼个数是Max(n-1),单人分到第n多月饼个数是Max(n),Max(n-1)–Max(n)<=3,问有多少......
  • Python爬虫是什么?核心概念和原理
    一、爬虫的概念和作用1.1概念:        网络爬虫也叫网络蜘蛛,特指一类自动批量下载网络资源的程序,这是一个比较口语化的定义。更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序.1.2作用1.2.1数据采集        大数据时代来临......