基于pygame的自定义游戏《the box》

目录

引言

创建一款什么样的游戏

需要实现什么样的功能

如何去实现基本的功能

背景模块

主角色模块

场景模块

逻辑模块


引言

        最近在学习java之余,利用空余时间写了一款基于pygame的游戏,主要是想测试pygame各方面的性能,其次是因为python语言的简洁性,写起来是真的舒服,最后是拿来自娱自乐一下还挺有趣的(划重点)。声明:该游戏所有代码均为原创,纯手工制作而成。我会在文末放上游戏运行需要的完整文件包,需要的朋友请自取。

创建一款什么样的游戏

       由于pygame本身是一款轻量级的游戏开发工具,可以实现的功能也是比较的有限,因此为了简单化,便于操作等目的,本文通过创建一个基本矩形方块来实现各种目的,因为是以矩形方块作为主要操作对象,所以游戏命名为《The Box》。

需要实现什么样的功能

        作为一款测试开发游戏,需要实现的功能比较的基本,由于是一款二维平面游戏,因此需要实现一些较为传统的功能:

  • 游戏主要操作对象的创建与交互
  • 游戏中基本的键鼠交互
  • 游戏中场景的构建与其他对象的交互
  • 游戏中其他非环境对象的创建与交互
  • 游戏中基本循环逻辑的实现

        除了以上几个需要实现的基本功能,还需要考虑游戏的基本逻辑构建,所谓的逻辑构建就是为了实现游戏需要达到的目的,比如游戏能否足够有趣,是否具有可玩性,是否有足够的交互性等,当然这些都在不在本文的考虑范围之内(悲)。

如何去实现基本的功能

        目前只是初步的实现了一下一些基本功能,因为最近比较忙就暂停开发了,所以先发布一下看看自己有没有可能哪天能捡起来(笑)。废话不多说,先看目前的实现效果:

《 The Box》

        看起来还行,就是太呆了(大笑)。好了关于如何实现的问题,其实我们只需要从模块化设计入手就行。这款游戏主要是通过几个基本模块来实现的:背景模块、主角色模块、场景模块、逻辑模块。上面几个模块主要实现的功能及代码如下:

背景模块

# 背景墙
class BackgroundWall(py.sprite.Sprite):
    def __init__(self, screen):
        py.sprite.Sprite.__init__(self)
        wallPath = '../素材库/背景墙素材/'
        self.index = 0
        self.imageFiles = [os.path.join(wallPath, i) for i in os.listdir(wallPath)]
        self.images = [py.transform.smoothscale(py.image.load(name), (screen.get_width(), screen.get_height())) for name
                       in self.imageFiles]
        self.image = self.images[self.index]
        self.rect = self.image.get_rect()
        self.rect.topleft = (0, 0)

    def update(self, game_time):
        timeH, timeM = divmod(game_time, 60)
        self.index = int(timeH)
        if self.index>17:
            self.index =17- self.index%17
        self.image = self.images[self.index]
        self.rect = self.image.get_rect()
        self.rect.topleft = (0, 0)

        背景模块顾名思义是用来创建游戏的背景,本文在此实现的功能也是极其简单,主要通过调用游戏时间来实现游戏背景的自动切换。如果你想实现各种功能,比如说随着BGM切换背景,或者通过某种事件切换背景都是可以的,只需要在update函数中添加各种需要的功能即可。

主角色模块

class CubeHuman(object):
    def __init__(self, screen):
        self.x = screen.get_width()
        self.y = screen.get_height()
        self.CubeBodyGroup = py.sprite.Group()
        self.CubeEyeballGroup = py.sprite.Group()
        self.CubeMouthGroup = py.sprite.Group()
        self.CubeEyesGroup = py.sprite.Group()
        self.cube_body = self.CubeBody()
        self.cube_eyes = self.CubeEyes()
        self.cube_eyeball = self.CubeEyeball()
        self.cube_mouth = self.CubeMouth()
        self.CubeBodyGroup.add(self.cube_body)
        self.CubeEyeballGroup.add(self.cube_eyeball)
        self.CubeMouthGroup.add(self.cube_mouth)
        self.CubeEyesGroup.add(self.cube_eyes)

        # 伤害,血量等自身参数
        self.basicDamage = 10  # 基础伤害
        self.basic = 10  # 基础防御
        self.basicHp = 100  # 基础血量
        self.basicMp = 100  # 基础蓝量
        self.HP = 100
        self.MP = 100

        self.rate = 4
        hpImage = py.image.load('../素材库/血条和蓝条/血条.png')
        hpRect = hpImage.get_rect()
        self.hpImage = py.transform.smoothscale(hpImage,
                                                (int(hpRec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值