【Pygame小游戏(1)——坦克大战_绘制地图】

1、源码来源:

wangxingyao/TankWar: 小游戏坦克大战(python + pygame) (github.com)icon-default.png?t=N7T8https://github.com/wangxingyao/TankWar?tab=readme-ov-file

2、效果: 

 

3、地图绘制:

1、导入pygame模块;

import pygame # 导入pygame模块

2、获取图片路径——最好放在同级目录:

'''
brickImage = r"..\image\brick.png":这行代码定义了一个名为 brickImage 的变量,
它存储了一个指向名为 brick.png 的图像文件的路径。
该图像文件位于当前工作目录的上一级目录中的 image 文件夹内。
这里的 .. 表示上一级目录,\ 是目录分隔符(在Windows系统中)
,而 brick.png 是目标图像文件的名称。
'''
brickImage          = r"..\image\brick.png"  # 砖墙图片路径
'''
ironImage = r"..\image\iron.png":类似地,这行代码定义了一个名为 ironImage 的变量,
它存储了一个指向名为 iron.png 的图像文件的路径。
这个图像文件也位于与 brick.png 相同的目录下。
'''
ironImage           = r"..\image\iron.png"   # 铁墙图片路径
'''
在这两行代码中,定义了两个字符串变量 brickImage 和 ironImage,
它们分别用于存储指向图像文件的路径。这些路径使用了原始字符串(raw string)的语法,
即在字符串前加上 r 前缀,这样做是为了避免在路径中的反斜杠(\)被解释为转义字符。
'''

注释如果看着乱自行删除

3、创建类——砖墙:

#  创建一个Brick类(砖墙-可被消灭的砖)   用于加载其图片和位置
class Brick(pygame.sprite.Sprite):
    #通过__init__方法,我们可以为对象实例设置初始属性值,
    # 这些属性值将作为对象的一部分,并可以在对象的其他方法中被访问和修改。
    def __init__(self):  # 定义
        pygame.sprite.Sprite.__init__(self)
        #加载图像   pygame.image.load()  加载砖墙的图片
        self.image = pygame.image.load(brickImage)
        # 获取图片的位置  self.image.get_rect(topleft=())
        # topleft=()设定在屏幕上的位置
        self.rect = self.image.get_rect()

准确说Brick应该是“砖”,这里我们默认叫“砖墙”,在游戏内实现可被消灭;

3、创建类——铁墙:

#  创建一个Iron(铁墙-不可被消灭的砖)   用于加载其图片和位置
class Iron(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        #加载图像   pygame.image.load()  加载铁墙的图片
        self.image = pygame.image.load(ironImage)
        # 获取图片的位置  self.image.get_rect(topleft=()
        # topleft=()设定在屏幕上的位置
        self.rect = self.image.get_rect()

Iron = 翻译来是 “铁”

4、创建地图:

1、创建精灵组;
#  创建一个Map(地图)   用于绘制地形
class Map():
    def __init__(self):
        # 创建一个砖墙的精灵组
        self.brickGroup = pygame.sprite.Group()
        # 创建一个铁墙的精灵族
        self.ironGroup  = pygame.sprite.Group()
            
2、创建位置列表:
        
        # 数字代表地图中的位置
        # 画砖块
        X1379 = [2, 3, 6, 7, 18, 19, 22, 23]
        Y1379 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 18, 19, 20, 21, 22, 23]
        X28 = [10, 11, 14, 15]
        Y28 = [2, 3, 4, 5, 6, 7, 8, 11, 12, 15, 16, 17, 18, 19, 20]
        X46 = [4, 5, 6, 7, 18, 19, 20, 21]
        Y46 = [13, 14]
        X5  = [12, 13]
        Y5  = [16, 17]
        X0Y0 = [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]
        
3、绘制第一组墙体:
        for x in X1379:
            for y in Y1379:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
       
效果
4、绘制第二组墙体:

        for x in X28:
            for y in Y28:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
效果:
5、绘制第三组墙体:
        for x in X46:
            for y in Y46:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x in X5:
            for y in Y5:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
效果:

6、绘制第四组墙体:
        for x, y in X0Y0:
            self.brick = Brick()
            self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
            self.brickGroup.add(self.brick)
效果:

7、绘制第五组墙体:
        # 画铁墙
        for x, y in [(0,14),(1,14),(12,6),(13,6),(12,7),(13,7),(24,14),(25,14)]:
            self.iron = Iron()
            self.iron.rect.left, self.iron.rect.top = 3 + x * 24, 3 + y * 24
            self.ironGroup.add(self.iron)
效果:
4、最终效果:

本人在CAD里面画的,理解意思就可以,以下是全部代码:

import pygame # 导入pygame模块

'''
brickImage = r"..\image\brick.png":这行代码定义了一个名为 brickImage 的变量,
它存储了一个指向名为 brick.png 的图像文件的路径。
该图像文件位于当前工作目录的上一级目录中的 image 文件夹内。
这里的 .. 表示上一级目录,\ 是目录分隔符(在Windows系统中)
,而 brick.png 是目标图像文件的名称。
'''
brickImage          = r"..\image\brick.png"  # 砖墙图片路径
'''
ironImage = r"..\image\iron.png":类似地,这行代码定义了一个名为 ironImage 的变量,
它存储了一个指向名为 iron.png 的图像文件的路径。
这个图像文件也位于与 brick.png 相同的目录下。
'''
ironImage           = r"..\image\iron.png"   # 铁墙图片路径
'''
在这两行代码中,定义了两个字符串变量 brickImage 和 ironImage,
它们分别用于存储指向图像文件的路径。这些路径使用了原始字符串(raw string)的语法,
即在字符串前加上 r 前缀,这样做是为了避免在路径中的反斜杠(\)被解释为转义字符。
'''
#  创建一个Brick(砖墙-可被消灭的砖)   用于加载其图片和位置
class Brick(pygame.sprite.Sprite):
    #通过__init__方法,我们可以为对象实例设置初始属性值,
    # 这些属性值将作为对象的一部分,并可以在对象的其他方法中被访问和修改。
    def __init__(self):  # 定义
        pygame.sprite.Sprite.__init__(self)
        #加载图像   pygame.image.load()  加载砖墙的图片
        self.image = pygame.image.load(brickImage)
        # 获取图片的位置  self.image.get_rect(topleft=())
        # topleft=()设定在屏幕上的位置
        self.rect = self.image.get_rect()
#  创建一个Iron(铁墙-不可被消灭的砖)   用于加载其图片和位置
class Iron(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        #加载图像   pygame.image.load()  加载铁墙的图片
        self.image = pygame.image.load(ironImage)
        # 获取图片的位置  self.image.get_rect(topleft=()
        # topleft=()设定在屏幕上的位置
        self.rect = self.image.get_rect()
#  创建一个Map(地图)   用于绘制地形
class Map():
    def __init__(self):
        self.brickGroup = pygame.sprite.Group()
        self.ironGroup  = pygame.sprite.Group()
        
        # 数字代表地图中的位置
        # 画砖块
        X1379 = [2, 3, 6, 7, 18, 19, 22, 23]
        Y1379 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 18, 19, 20, 21, 22, 23]
        X28 = [10, 11, 14, 15]
        Y28 = [2, 3, 4, 5, 6, 7, 8, 11, 12, 15, 16, 17, 18, 19, 20]
        X46 = [4, 5, 6, 7, 18, 19, 20, 21]
        Y46 = [13, 14]
        X5  = [12, 13]
        Y5  = [16, 17]
        X0Y0 = [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]
        for x in X1379:
            for y in Y1379:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x in X28:
            for y in Y28:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x in X46:
            for y in Y46:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x in X5:
            for y in Y5:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x, y in X0Y0:
            self.brick = Brick()
            self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
            self.brickGroup.add(self.brick)
        
        # 画石头
        for x, y in [(0,14),(1,14),(12,6),(13,6),(12,7),(13,7),(24,14),(25,14)]:
            self.iron = Iron()
            self.iron.rect.left, self.iron.rect.top = 3 + x * 24, 3 + y * 24
            self.ironGroup.add(self.iron)
            
        

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值