目 录
一、程序设计思路......................................................................................................................... 1
1.1开发环境................................................................................................................................... 2
1.2功能需求....................................................................................................................................3
二、程序设计与实现.......................................................................................................................4
2.1项目文件组织结构......................................................................................................................5
2.2程序框架结构示意图...................................................................................................................6
2.3文件及函数功能设计...................................................................................................................7
三、程序完整源码............................................................................................................................8
四、程序运行结果............................................................................................................................9
- 程序设计思路
操作系统及版本:Windows11
开发工具及版本:PyCharm 2022.2.2(Python 3.10.3)
1.2、功能需求分析
主要模块:
1. 游戏初始化模块:包括游戏界面、音效、背景等的初始化。
2. 地图绘制模块:包括植物和僵尸的位置、道路、坑洞等地图要素的绘制。
3. 游戏对象模块:包括植物、僵尸、子弹、阳光等游戏物品的绘制,以及它们的行为和互动。
4. 菜单及设置模块:包括游戏菜单、关卡选择、暂停、音效、难度等设置的实现。
5. 游戏逻辑模块:包括处理游戏中的各种事件、自动化战斗、计算分数等逻辑处理。
6. 存档和读档模块:将玩家的成绩和游戏设置保存在磁盘中,以便下次启动时读取。
可能用到的第三方库:
1. Pygame:Python 游戏应用程序框架。
2. Numpy:Python 数组计算库。
3. Matplotlib:Python 绘图库。
4. PyInstaller:Python 应用程序打包工具。
5. Py2exe:Python Windows 下的应用程序打包工具。
6. PyGTK:Python GUI 工具包。
7. PyQT:Python GUI 工具包。
2.3文件及函数功能设计
2.3.1 main.py
判断当前脚本的执行环境是否是主程序(即在命令行中直接运行),若是则执行该段代码
2.3.2 tool.py
这段代码主要是一个游戏引擎的基本框架,包括了状态State和控制Control两个主要类,并且有完成该引擎所需的辅助函数。
其中State类有startup、cleanup和update三个抽象方法,具体实现则需要继承该类并重写这三个方法。control类主要提供了事件循环和状态转换的功能,并配合State类对当前状态进行更新和渲染。load_image_frames和load_all_gfx函数则是辅助方法,用于读取资源文件夹中的图片资源
2.3.3 main.py
这段代码是一个Python模块,包含一个名为"main"的函数和一些导入语句。它从当前目录(表示为".")中导入了名为"tool"、"constants"和"state"的模块。
在"main"函数中,它创建了一个名为"game"的"Control"对象,并将一个字典"state_dict"传递给其"setup_states"方法。该字典按键值对的形式包含了各种状态的名称(作为常量在"constants"模块中定义)和相应的状态对象。这些对象可以是"mainmenu.Menu"、"screen.GameVictoryScreen"、"screen.GameLoseScreen"或"level.Level"。接下来,代码将"MAIN_MENU"状态设置为起始状态,并调用"main"方法来启动游戏。
这段代码是一个简单的游戏框架,定义了不同的游戏状态并提供了在这些状态之间切换的方法。导入的"tool"模块提供了游戏引擎的核心功能,而其他两个导入的模块则包含了游戏状态的定义和实现。这段代码应该被理解为一个游戏的主要入口点,它将整个游戏架构组合在一起并启动游戏循环。
2.3.4 constants.py
这段代码主要是定义了游戏中使用到的一些常量,包括界面大小、颜色、状态、植物和僵尸的相关信息等。这些常量可以作为程序中的基础变量,用于控制游戏的逻辑和行为。
2.3.5 mainmenu.py
这段代码实现了一个游戏菜单界面。在游戏菜单界面中,有一个选项(option),玩家可以通过点击该选项来开始游戏。代码中通过setupBackground()和setupOption()函数来初始化菜单背景和选项。checkOptionClick()函数用来检测玩家是否点击了选项,如果点击了则标记选项已经被点击,并记录当前时间。在update()函数中,如果选项已经被点击,就通过不断变换选项的图像来实现动画效果,同时检测动画是否播放了一定时间,如果播放超过一定时间,则标记菜单界面已经结束,可以进入游戏了。最后,在update()函数中,通过blit()函数把菜单背景和选项图像显示在游戏屏幕上。
2.3.6 screen.py
这段代码定义了一个pygame游戏中用于显示屏幕的类。该类继承了一个名为tool.State的类,并覆盖了其中的一些方法。在该类中,三个重要的方法是startup、update和setupImage。startup方法用于初始化屏幕,接收了三个参数current_time、persist和self。current_time表示当前时间,persist是一个字典,用于保存游戏信息,self为类自身。在startup方法中,屏幕的起始时间(start_time)、下一个屏幕状态(next)、游戏信息(game_info)、以及要显示的图像(image)都被设置了。setupImage方法则是用于根据图像名称设置要显示的图像,并将其绘制到游戏屏幕上。update方法用于更新游戏屏幕,通过判断当前时间是否超过了屏幕结束时间(end_time),来决定是否绘制图像。如果当前时间小于结束时间,则将游戏屏幕设置为白色,并绘制图像;否则就表示游戏已结束,将done属性设置为True,表示需要退出当前屏幕。类Screen还定义了一个名为ScreenLose的子类和一个名为ScreenWin的子类,这两个子类分别用于显示游戏失败和游戏胜利的屏幕,这两个子类都继承了父类Screen,并对其进行了覆盖。
链接: https://pan.baidu.com/s/1W00l71G98nILwzkln8yOgg?pwd=ll15
提取码: ll15