目录
摘要 2
一, 引言 3
1.1中国游戏产业的现状 3
1.2中国游戏产业的未来发展局势 4
1.3植物大战僵尸游戏的发展状况 4
二、系统结构 5
2.1 Python3.8.2 IDLE 简介 5
2.2 Python 3.8.2开发过程 6
2.3 功能介绍 6
2.4.概要设计图 7
2.4.1. 画面设计 7
2.4.2. 游戏过程 8
2.4.3. 游戏结束 8
2.4.4. 添加功能 8
三.详细设计 9
3.1 程序设计分析 9
3.2 主要函数及模块 9
3.2、1.主要模块 9
3.2、2.主要函数 10
3.3 主要代码 11
3.3、1.设计游戏界面 11
3.3、2.设计游戏所需植物 12
3.3、3.设计游戏胜负的标准 15
3.3、4.设计游戏所需僵尸 16
3.3、5.设计游戏主程序 17
四.实验效果 22
五.总结与展望 23

摘要

现如今,人们生活节奏日益加快,繁忙冗杂的工作、学习和生活使人们的生活
变的枯燥,没有新意,休息时间越来越少。面对这样的生活,人们大都渴望在这仅有的休息时间里,找到一些能让身心放松的娱乐活动。于是,植物大战僵尸这款游戏就进入了大众的视野。本次设计的主题就是植物大战僵尸游戏的设计,游戏的主要内容分为游戏界面设计和游戏功能设计两大部分,其中游戏界面设计以满足视听觉体验为主,游戏功能设计是在满足原有的贪吃蛇游戏基本功能的基础上添加一些其他的功能。本次毕业设计运用的开发语言是Python语言,Python语言拥有十分丰富的函数库和模块库,本次设计主要运用其中的pygame模块
关键词:植物大战僵尸;python;游戏;函数库;pygame;

一,引言
游戏是当下社会十分推崇的一种娱乐方式,近年来,各式各样的游戏如雨后春笋般拔节而出,有些游戏披荆斩棘,脱颖而出,也有些游戏精疲力竭,隐于尘埃。但不管是哪种游戏,都为人们带去了欢声笑语。在工作学习之余,身心疲惫,大多数人会选择来一款有趣的游戏来放松放松疲惫不堪的内心;在生活闲暇时候,百无聊赖,很多人会打开久违的游戏来打发打发生锈的时光。当然,对人们来说,电影、音乐、阅读、旅游这些都是不错的娱乐方式,但随着社会发展的步伐在加快,这些传统的娱乐方式已经渐渐跟不上人们的娱乐需求了,游戏理所当然地走进了人们的视野。可以这么说,游戏,已经成为了生活中不可或缺一个东西,它能为人们带来很多生活中得不到的乐趣和满足。 
植物大战僵尸游戏作为一款深受大家喜爱的经典游戏,伴随着很多人的童年和青春,是很多年轻人甚至中年人的游戏起点,发展到现在,更是受到各阶层广大人群的热衷和追捧

1.1中国游戏产业的现状
近年来,随着科技的飞速发展,人民生活水平的日益提高,人们对生活品质的要求日渐愈高,在娱乐休闲方式的选择上也变得更加多元化,游戏产业就是其中最耀眼夺目的方式之一。
由于中国拥有庞大的人口基数和较大产业自由,再加上中国的市场开放度高,因此游戏产业在中国的市场上取得了令人瞩目的发展成果。根据新华网发布的《2019中国游戏产业发展报告》指出,社会对游戏娱乐消费支出不断增加,有效带动了游戏娱乐行业和游戏实体产品行业的快速发展。
通过数据来看,2019年,中国游戏行业总收入约为2189.6亿元,同比增长23.1%。 其中,网络游戏贡献游戏行业收入较大,全年估计约为2011亿元,同比增长23.1%;VR游戏收入约为4亿元,比去年同比增长28.2%;游戏实体产品收入约为176.6亿元,同比增长23.9%。
从游戏用户规模上来看,2019年,中国网络游戏用户市场增速稍有放缓。 其中,客户端游戏用户数量约为1.5亿,与2018年相比略有增长; 手机游戏用户约4.6亿,同比增长9%;VR游戏用户数量约为4000万,同比增长100%;电竞游戏用户数约2.2亿,同比增长69.2%。
1.2中国游戏产业的未来发展局势
正如我们所知道的,电子游戏起源于西方,已经有了近50年的历史,然而对于中国来说,发源于上世纪90年代后期的游戏产业还是个刚刚出生不久的婴儿,只是这个婴儿在短短二十年几年内已经成长的十分强壮。从最初的“游戏产业的史前时期”,到1994年中国内地游戏的“元年”,再到网络游戏异军突起的“网游时代”,中国游戏产业的发展可以说是举世瞩目,让人瞠目结舌。2017年新华网发布的《2019中国游戏产业发展》表示出,中国游戏产业的经济效益可以说是日益倍增,并且势头不减,相比于当初的“史前荒芜时代”来说,中国游戏产业取得的巨大发展是显而易见的。由此可知,未来几年中国游戏产业的发展必将又是一路高歌猛进。
再而言之,国家和政府的有效引导将继续推动高质量、高内容、高创新的原创精品游戏的研发;随着市场规模继续、持续地增长,将逐渐推动者中国的游戏产业朝着更加专业化、商业化和产业化的方向发展;长此以往,游戏产业必将成为中国文化海外输出的重要形式 。
1.3植物大战僵尸游戏的发展状况
1997年,诺基亚工程师 Taneli Armanto 为诺基亚 N 6610手机写了一款植物大战僵尸程序,命名为 Snake ,中译植物大战僵尸。
而后,在我们更加熟悉的诺基亚3310等机型上,安装了升级版的 Snake II 。
2000年,诺基亚重写了程序 Snake EX ,安装在同年发行的诺基亚9200上。
近十年来,植物大战僵尸游戏以各种形式出现在各大游戏网站,模式新颖,层出不穷,吸引了数以亿计的游戏爱好者前来游玩。2018年,《植物大战僵尸》横空出世,火爆一时。同年,腾讯游戏推出《植物大战僵尸》网络游戏,下载量居高不下。如此种种,使得贪吃蛇游戏成为国内外游戏史上传播最广泛的作品之一。
二、系统结构
2.1 Python3.8.2 IDLE 简介
在本次毕业设计中,系统开发平台为 windows10 ( 64bit ) ,程序设计语言为 Python 语言,程序运行环境为 Python3…8.2 。
Python 版本一般来说可以分为两大类: Python2+ 和 Python3+ 。这两种版本上几乎相同,只是 Python2+ 是原始版本,拥有更完善的功能,而 Python3+ 是比较新的版本,语言和语法更完善,更简洁,函数库也更庞大,因此,这二者可以说各有作用,适用于不同的程序设计。
IDLE 是由 Python 软件包自带的集成开发环境。用户可以使用它来方便地创建、运行、测试和调试 Python 程序。 IDLE 是 Python 的标准发行版,原始功能由 Guido van Rossum 亲自编写,经过其他人补充完整。 打开 IDLE 后,会出现一个增强的交互式解释器窗口。 另外,还有一个基于 Python 的编辑器、浏览器和调试器。 点击顶部下拉菜单的虚线将移动菜单到它自己的永久窗口。 IDLE 的调试器提供断点 、 步进和变量监控功能。
IDLE 为开发人员提供了许多有用的功能,例如自动缩进, IDLE 很清楚 python 的缩进语法( pytho n 要求代码块缩进),会根据需要自动缩进;还有语法高亮,单词自动补充等等功能,借助这些功能,我们可以有效提高软件的开发效率。另外, IDLE 使用颜色区分语法来突出显示代码。 Python 语言内置函数是紫色的,字符串为绿色,关键字为橙色,所有生成的结果都以蓝色显示,当然,这些颜色都是默认的,可以通过改变首选项来进行调整。
2.2 Python 3.8.2开发过程
Python 是一种解释性语言,它 不需要 如 C 或 C++ 之类的被 编译成二进制代码,它可以直接从源代码运行程序。当我们运行 Python 文件程序的时候, 文件源代码首先被 Python 解释器翻译成字节码,然后再交给 Python 字节码虚拟机来解释这些字节码,最后有 Python 运行输出 Result ,如图2-1原理图所示。

图 2-1 Python 原理图
2.3 功能介绍
该项目使用json文件存储关卡数据(例如僵尸的位置和时间,背景信息),并且支持白天状态功能。实施植物有:向日葵,豌豆实施僵尸有:僵尸
1.豌豆射手。豌豆射手一次发射一颗豌豆炮,升级的双重射手可以一次发射两颗

2.4.概要设计图
通过对植物大战僵尸的需求分析和功能设计,我们设计出游戏概要图如图4-1所示:

图 4-1 概要设计图

2.4.1. 画面设计

  1. 游戏的界面构造主要包括游戏运行界面尺寸 ( bg_size ) 的定义,背景幕布 (background) 的覆盖,以及墙壁 ( wall ) 和植物( obstacle ) 的添加。其中地图是沿着界面的边缘四周依次排列,障碍物是在墙壁以内的位置随机生成;
  2. 另外,在界面设计中 还添加了开始界面、暂停界面和结束界面。开始界面时,界面上出现英文:冒险模式和“点击任意键开始游戏”提示;暂停界面时,界面上出现“点击空格键继续游戏”的英文提示;结束界面时,会出现得分和历史记录显示,另外还添加了“重新开始”和“退出游戏”两个功能按钮。

2.4.2. 游戏过程
1.我们打开迷你游戏。我们用鼠标的左键点击植物僵尸。然后会打开植物僵尸的游戏。
2.我们选择武器。选择的是核桃,地瓜樱桃炸弹,红辣椒等武器。
3.我们开始种植植物,我们要种植向日葵,因为僵尸也有子弹,所以我们在种植向日葵的时候,还要用坚硬的核桃保护向日葵。然后我们在核桃的前面种植豌豆枪手和寒冰枪手。
4.还没有来得及放置武器,有敌人来的地方,我们可以放置地雷和地瓜。
5.点击太阳可以手机能量,当够100的时候可以建造豌豆射手。
豌豆射手是游戏中的攻击单位。

2.4.3. 游戏结束
1.当把所有的僵尸打完,游戏结束,获得胜利,音乐不会停止。
2.当僵尸突破防线,来到地图最后面,游戏失败,通关结束。

2.4.4. 添加功能

  1. 进入游戏
  2. 在游戏设计中添加了很多常规功能:
  3. 开始:游戏程序运行前,界面会出现提示,点击任意键 开始游戏。
  4. 记录分数:游戏运行过程,吃到食物会得分,功能性食物则会扣分,得分会记录在左上角。
  5. 暂停/开始:在游戏过程中可以点击Space键来控制游戏的暂停和开始。
  6. 结束:显示最终得分和最高纪录;会出现“ Restart ”和“ Finish ”两个功能按钮。

三.详细设计
3.1 程序设计分析
根据程序运行的过程设计程序设计流程图,如图5-1所示:

图 3-1 程序设计流程图
3.2 主要函数及模块
3.2、1.主要模块
表5-1 植物大战僵尸主要模块
模块 作用
pygame P ython 内置模块,游戏设计模块
sys 系统相关的信息模块
os 操作系统相关的调用和操作
math 数学模块,进行数学计算
random 生成随机数
time 时间模块,控制游戏帧频
traceback 提供了 print_exception 、 format_exception 等输出异常栈等常用的工具函数
hinder 障碍物模块,包含障碍物属性
Planet 植物武器模块,包括 plante 和 Body 两大类,包含了各自的相关的属性
supply 僵尸模块,包括 Food 和 Invincible 两大类,包含了各自的相关属性

3.2、2.主要函数
图5-2 植物大战僵尸主要函数
函数 作用
M ain() 主函数,控制游戏的所有进程
init() 初始化函数
Paint_screen() 绘制界面幕布
A dd_nomal_food () 将植物加入到数组中
A dd_invincible () 将僵尸加入到数组中
A dd_obstacle () 将生成的障碍物加入到数组中
Set_timer() 设置时间事件的长短
Blit() 绘制 rect 对象
M ove() 控制僵尸移动
E vent.get() get 游戏中产生的事件
Spritecollide () 动画精灵和数组各个对象之间的矩形冲突检测(碰撞检测)
R andint() 随机数生成函数
Reset() 重置 S urface 对象
I mage.load() 载入图片
F ont() 载入字体
M ixer.Sound() 载入游戏音效
M usic.load() 载入背景音乐

3.3 主要代码
3.3、1.设计游戏界面
#1 配置图片地址 自定义图片
IMAGE_PATH = ‘E:/python/pygame-master/imgs/’
#1 设置页面宽高
scrrr_width=800
scrrr_height =560
#1 创建控制游戏结束的状态
GAMEOVER = False
#4 图片加载报错处理
LOG = ‘文件:{}中的方法:{}出错’.format(file,name)
#3 创建地图类
class Map():
#3 存储两张不同颜色的图片名称
map_names_list = [IMAGE_PATH + ‘map1.png’, IMAGE_PATH + ‘map2.png’]
#3 初始化地图
def init(self, x, y, img_index):
self.image = pygame.image.load(Map.map_names_list[img_index])
self.position = (x, y)
# 是否能够种植
self.can_grow = True
#3 加载地图
def load_map(self):
MainGame.window.blit(self.image,self.position)
创建植物类 目前该游戏开发只有豌豆射手和向日葵两种植物。
3.3、2.设计游戏所需植物
#4 植物类
class Plant(pygame.sprite.Sprite):
def init(self):
super(Plant, self).init()
self.live=True

# 加载图片  使用自定义的图片
def load_image(self):if hasattr(self, 'image') and hasattr(self, 'rect'):MainGame.window.blit(self.image, self.rect)else:print(LOG)

#5 向日葵类
class Sunflower(Plant):
def init(self,x,y):
super(Sunflower, self).init()
self.image = pygame.image.load(‘E:/python/pygame-master/imgs/sunflower.png’)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.price = 50
self.hp = 100
#5 时间计数器
self.time_count = 0

#5 新增功能:生成阳光
def produce_money(self):self.time_count += 1if self.time_count == 25:MainGame.money += 5self.time_count = 0
#5 向日葵加入到窗口中
def display_sunflower(self):MainGame.window.blit(self.image,self.rect)

#6 豌豆射手类
class PeaShooter(Plant):
def init(self,x,y):
super(PeaShooter, self).init()
# self.image 为一个 surface
self.image = pygame.image.load(‘E:/python/pygame-master/imgs/peashooter.png’)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.price = 50
self.hp = 200
#6 发射计数器
self.shot_count = 0

#6 增加射击方法
def shot(self):#6 记录是否应该射击should_fire = Falsefor zombie in MainGame.zombie_list:if zombie.rect.y == self.rect.y and zombie.rect.x < 800 and zombie.rect.x > self.rect.x:should_fire = True#6 如果活着if self.live and should_fire:self.shot_count += 1#6 计数器到25发射一次if self.shot_count == 25:#6 基于当前豌豆射手的位置,创建子弹peabullet = PeaBullet(self)#6 将子弹存储到子弹列表中MainGame.peabullet_list.append(peabullet)self.shot_count = 0#6 将豌豆射手加入到窗口中的方法
def display_peashooter(self):MainGame.window.blit(self.image,self.rect)

#7 豌豆子弹类
class PeaBullet(pygame.sprite.Sprite):
def init(self,peashooter):
self.live = True
self.image = pygame.image.load(‘E:/python/pygame-master/imgs/peabullet.png’)
self.damage = 50
self.speed = 10
self.rect = self.image.get_rect()
self.rect.x = peashooter.rect.x + 60
self.rect.y = peashooter.rect.y + 15

def move_bullet(self):#7 在屏幕范围内,实现往右移动if self.rect.x < scrrr_width:self.rect.x += self.speedelse:self.live = False

3.3、3.设计游戏胜负的标准
#7 新增,子弹与僵尸的碰撞
def hit_zombie(self):
for zombie in MainGame.zombie_list:
if pygame.sprite.collide_rect(self,zombie):
#打中僵尸之后,修改子弹的状态,
self.live = False
#僵尸掉血
zombie.hp -= self.damage
if zombie.hp <= 0:
zombie.live = False
self.nextLevel()

#7闯关方法 定义好闯关标准
def nextLevel(self):MainGame.score += 20MainGame.remnant_score -=20for i in range(1,100):if MainGame.score==100*i and MainGame.remnant_score==0:MainGame.remnant_score=100*iMainGame.shaoguan+=1MainGame.produce_zombie+=50

3.3、4.设计游戏所需僵尸
#9 僵尸类
class Zombie(pygame.sprite.Sprite):
def init(self,x,y):
super(Zombie, self).init()
self.image = pygame.image.load(‘E:/python/pygame-master/imgs/zombie.png’)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.hp = 1000
self.damage = 2
self.speed = 1
self.live = True
self.stop = False
#9 僵尸的移动
def move_zombie(self):
if self.live and not self.stop:
self.rect.x -= self.speed
if self.rect.x < -80:
#8 调用游戏结束方法
MainGame().gameOver()

#9 判断僵尸是否碰撞到植物,如果碰撞,调用攻击植物的方法
def hit_plant(self):for plant in MainGame.plants_list:if pygame.sprite.collide_rect(self,plant):#8  僵尸移动状态的修改self.stop = Trueself.eat_plant(plant)
#9 僵尸攻击植物
def eat_plant(self,plant):#9 植物生命值减少plant.hp -= self.damage#9 植物死亡后的状态修改,以及地图状态的修改if plant.hp <= 0:a = plant.rect.y // 80 - 1b = plant.rect.x // 80map = MainGame.map_list[a][b]map.can_grow = Trueplant.live = False#8 修改僵尸的移动状态self.stop = False#9 将僵尸加载到地图中
def display_zombie(self):MainGame.window.blit(self.image,self.rect)

3.3、5.设计游戏主程序
主程序:
class MainGame():
#2 创建关数,得分,剩余分数,钱数
shaoguan = 1
score = 0
remnant_score = 100
money = 20000
#3 存储所有地图坐标点
map_points_list = []
#3 存储所有的地图块
map_list = []
#4 存储所有植物的列表
plants_list = []
#7 存储所有豌豆子弹的列表
peabullet_list = []
#9 新增存储所有僵尸的列表
zombie_list = []
count_zombie = 0
produce_zombie = 100
#1 加载游戏窗口
def init_window(self):
#1 调用显示模块的初始化
pygame.display.init()
#1 创建窗口
MainGame.window = pygame.display.set_mode([scrrr_width,scrrr_height])

#2 文本绘制
def draw_text(self, content, size, color):pygame.font.init()font = pygame.font.SysFont('kaiti', size)text = font.render(content, True, color)return text#2 加载帮助提示
def load_help_text(self):text1 = self.draw_text('1.按左键创建向日葵 2.按右键创建豌豆射手', 26, (255, 0, 0))MainGame.window.blit(text1, (5, 5))#3 初始化坐标点
def init_plant_points(self):for y in range(1, 7):points = []for x in range(10):point = (x, y)points.append(point)MainGame.map_points_list.append(points)print("MainGame.map_points_list", MainGame.map_points_list)#3 初始化地图
def init_map(self):for points in MainGame.map_points_list:temp_map_list = list()for point in points:# map = Noneif (point[0] + point[1]) % 2 == 0:map = Map(point[0] * 80, point[1] * 80, 0)else:map = Map(point[0] * 80, point[1] * 80, 1)# 将地图块加入到窗口中temp_map_list.append(map)print("temp_map_list", temp_map_list)MainGame.map_list.append(temp_map_list)print("MainGame.map_list", MainGame.map_list)#3 将地图加载到窗口中
def load_map(self):for temp_map_list in MainGame.map_list:for map in temp_map_list:map.load_map()#6 增加豌豆射手发射处理
def load_plants(self):for plant in MainGame.plants_list:#6 优化加载植物的处理逻辑if plant.live:if isinstance(plant, Sunflower):plant.display_sunflower()plant.produce_money()elif isinstance(plant, PeaShooter):plant.display_peashooter()plant.shot()else:MainGame.plants_list.remove(plant)#7 加载所有子弹的方法
def load_peabullets(self):for b in MainGame.peabullet_list:if b.live:b.display_peabullet()b.move_bullet()# v1.9 调用子弹是否打中僵尸的方法b.hit_zombie()else:MainGame.peabullet_list.remove(b)#8事件处理def deal_events(self):#8 获取所有事件eventList = pygame.event.get()#8 遍历事件列表,判断for e in eventList:if e.type == pygame.QUIT:self.gameOver()elif e.type == pygame.MOUSEBUTTONDOWN:# print('按下鼠标按键')print(e.pos)# print(e.button)#左键1  按下滚轮2 上转滚轮为4 下转滚轮为5  右键 3x = e.pos[0] // 80y = e.pos[1] // 80print(x, y)map = MainGame.map_list[y - 1][x]print(map.position)#8 增加创建时候的地图装填判断以及金钱判断if e.button == 1:if map.can_grow and MainGame.money >= 50:sunflower = Sunflower(map.position[0], map.position[1])MainGame.plants_list.append(sunflower)print('当前植物列表长度:{}'.format(len(MainGame.plants_list)))map.can_grow = FalseMainGame.money -= 50elif e.button == 3:if map.can_grow and MainGame.money >= 50:peashooter = PeaShooter(map.position[0], map.position[1])MainGame.plants_list.append(peashooter)print('当前植物列表长度:{}'.format(len(MainGame.plants_list)))map.can_grow = FalseMainGame.money -= 50#9 新增初始化僵尸的方法
def init_zombies(self):for i in range(1, 7):dis = random.randint(1, 5) * 200zombie = Zombie(800 + dis, i * 80)MainGame.zombie_list.append(zombie)#9将所有僵尸加载到地图中
def load_zombies(self):for zombie in MainGame.zombie_list:if zombie.live:zombie.display_zombie()zombie.move_zombie()# v2.0 调用是否碰撞到植物的方法zombie.hit_plant()else:MainGame.zombie_list.remove(zombie)
#1 开始游戏
def start_game(self):#1 初始化窗口self.init_window()#3 初始化坐标和地图self.init_plant_points()self.init_map()#9 调用初始化僵尸的方法self.init_zombies()#1 只要游戏没结束,就一直循环while not GAMEOVER:#1 渲染白色背景MainGame.window.fill((255, 255, 255))#2 渲染的文字和坐标位置MainGame.window.blit(self.draw_text('当前钱数$: {}'.format(MainGame.money), 26, (255, 0, 0)), (500, 40))MainGame.window.blit(self.draw_text('当前关数{},得分{},距离下关还差{}分'.format(MainGame.shaoguan, MainGame.score, MainGame.remnant_score), 26,(255, 0, 0)), (5, 40))self.load_help_text()#3 需要反复加载地图self.load_map()#6 调用加载植物的方法self.load_plants()#7  调用加载所有子弹的方法self.load_peabullets()#8 调用事件处理的方法self.deal_events()#9 调用展示僵尸的方法self.load_zombies()#9 计数器增长,每数到100,调用初始化僵尸的方法MainGame.count_zombie += 1if MainGame.count_zombie == MainGame.produce_zombie:self.init_zombies()MainGame.count_zombie = 0#9 pygame自己的休眠pygame.time.wait(10)#1 实时更新pygame.display.update()#10 程序结束方法
def gameOver(self):MainGame.window.blit(self.draw_text('游戏结束', 50, (255, 0, 0)), (300, 200))print('游戏结束')pygame.time.wait(400)global GAMEOVERGAMEOVER = True

#1 启动主程序
if name == ‘main’:
game = MainGame()
game.start_game()

四.实验效果
实验效果如图4-1

图4-1
当游戏结束时如图4-2

图4-2
五.总结与展望
从找出问题,分析问题,到解决问题,训练实践能力的重要组成部分。这是针对我们实际工作能力的考察和具体培训过程。随着当今社会科学技术的飞速发展,计算机在生活中的应用可谓无处不在。因此, 身为一名21世纪新时代的大学生,掌握一门程序开发技术是非常有必要的。 Python 语言作为近年来发展普及速度最快的程序设计语言之一,在 IEEE发布2019年编程语言排行榜 中 Python 高居首位 ,更是被评为“最受程序员欢迎的语言” ,具有非常好的发展前景。因此,学好 Python 语言,认真做好毕设设计是非常有必要的。
回想这次课程设计的过程,我仍然感慨万分。事实上,从刚开始决定做这个题目到完成整个程序,从理论设计到实践完成,在1个月里我学到很多东西,不但巩固了以前学到的知识,而且更是学到了很多以前没有了解过的新知识。我掌握了一门新的程序设计语言,加深了对模块化编程思想的了解,对 Python 函数库的有了比较全面的了解,对于函数调用有了深刻的认识,甚至在敲打代码的速度上都有了极大的进步 …… 这些都是我通过这次课程设计取得的 收获 ,我相信这些知识让我现在乃至将来都会受益匪浅。
植物大战僵尸游戏虽然是一款简单的小游戏,但是对于我这样一个初学者来说,却处处充满了困难。但是,这对我来说,无疑是在原有的困难之上又增加了一个巨大的挑战。好在皇天不负有心人,最终在自己的努力下,还是完成了程序,1个月时间, 400多 行代码,这是我这次毕业设计交出的答卷。

参考文献
[1] 嵩天, 礼欣, 黄天羽. Python 语言程序设计基础 [M] . 北京:高等教育出版社, 2017.
[2] 小甲鱼. 零基础入门学习 Python[M] . 北京:清华大学出版社, 2016.
[3] 新华网. 2017年中国游戏行业发展报告 [R] . 北京:新华网, 2017.
[4] (乌拉圭) Fernando, Doglio 著, 陶俊杰, 陈小莉译. Python 性能分析与优化 [M] . 北京:人民邮电出版社, 2016.
[5] 颜其峰. 游戏设计史 [M] . 长沙:湖南大学出版社, 2016.
[6] MarkLutz 著, 侯荣涛译. Python 袖珍指南 [M] . 北京:中国电力出版社, 2015.
[7] 杨年华. Python 程序设计教程 [M] . 北京:清华大学出版社, 2017.
[8] ( 美 )Al Sweigart 著, 李强译. Python 游戏编程快速上手 [M] . 北京:人民邮电出版社, 2017.
[9] (美) JonathanS . Harbour 著, 李强译. Python 游戏编程入门 [M] . 北京:人民邮电出版社, 2015.

基于python开发植物大战僵尸相关推荐

  1. Python开发植物大战僵尸

    合集:https://space.bilibili.com/234979113/channel/detail?cid=120280 1.绘制场景 https://www.bilibili.com/vi ...

  2. Python实现植物大战僵尸

    <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售.玩家可通过武装多种植物切换不同的功能,快速有效地把僵尸阻挡在入侵的道路上.不同的敌人,不 ...

  3. Python制作植物大战僵尸,赶快来试试吧

    哈喽,大家下午好,我是小圆 想问有谁不知道植物大战僵尸这个游戏啊,我从小就在玩 大学上课的时候,老师在上面讲课,我偷摸着在下面玩游戏,一边打僵尸,一边养植物,还是感觉挺意思的 ok,今天我们来用pyt ...

  4. 居家小游戏,用 python 实现植物大战僵尸

    作者 | 梦执.py 来源 | CSDN博客 游戏截图 动态演示 源码分享 state/tool.py import os import json from abc import abstractme ...

  5. 谈 Scratch 版“植物大战僵尸”

    请先查看  Scratch经典游戏作品:植物大战僵尸  并下载资源. Python 版"植物大战僵尸"下载链接:https://download.csdn.net/download ...

  6. Python开发简单植物大战僵尸

    运行效果 1.引入需要的模块,配置图片路径,设置界面,创建游戏主入口. #1 引入需要的模块 import os import timeimport pygame import random #1 配 ...

  7. java设计建议植物大战僵尸_基于Java的游戏设计之植物大战僵尸

    植物大战僵尸这款游戏相信大家或多或少都玩过,那么大家有没有想过自己尝试着做一下植物大战僵尸的游戏设计呢.本文将基于Java语言为大家展示如何开发出植物大战僵尸游戏的简易版本,主要内容包括规则.对象.功 ...

  8. python入门小项目 | 用Python复刻了植物大战僵尸

    目录 开发工具 讲解部分 一.前言 二.资源准备 三.代码文件 四.整体思路 五.尾声 开发工具 python3.6.4 第三方库:pygame,json 讲解部分 一.前言 之前发过一些比较复杂的游 ...

  9. python小游戏“植物大战僵尸”

    python讨论qq群:996113038 导语: 这几天一直写爬虫,感觉写累了.本来准备写一个画画的程序的,但是想来想去没有想到合适的程序.后来想到好久没有给大家推送过游戏了.上次推送游戏还是两个星 ...

最新文章

  1. 生命的意义是什么?B站一位up主把这个「终极问题」甩给了AI
  2. R语言ggplot2可视化分面图(faceting):自定义分面图可视化、ggplot2可视化分面图并移除分面图之间的边框线条(Remove Panel Border Lines in a facet
  3. springboot 读取bootStrap.properties流程
  4. SoundWireServer使用以及失败问题
  5. 高斯消元(解线性方程组)
  6. Flutter Connection to **** was not upgraded to websocket
  7. docker rabbit Management API returned status code 500 -
  8. python2.7.18绿色安装包制作
  9. Maxima符号计算系统简介
  10. html5如何快速选择工具使用技巧,用PS快速选择工具抠图的方法
  11. iOS开发-进阶:被误解的MVC和被神化的MVVM(作者:唐巧)
  12. camera.swf java,ipcamera-for-android 手机变成IP Camera
  13. Capture CIS 元件库详细分类解析
  14. 真机最小化安装centos7 网卡驱动
  15. 第五届“泰迪杯“技能赛赛题讲解直播来啦
  16. 心电图学习笔记(2)
  17. 光影艺术演绎盛唐文化 西安首个智慧公园-蓝田滋水公园
  18. 5G技术带来无限可能,VR全景视频前景怎么样?
  19. 国服Dota2无法更新故障解决方法一例
  20. 极云普惠云电脑 v1.2.9

热门文章

  1. python蒙特卡洛_Python:从零开始的汉密尔顿蒙特卡洛
  2. indexOf 的使用
  3. 第八章JRT/0197-2020金融数据安全数据安全分级指南解读
  4. 编程、Web前端/后端、游戏开发、嵌入式开发、大数据、人工智能、机器学习需要什么样的笔记本配置?
  5. 救命啊!还是讨厌的中文问题
  6. 飞鱼手机短信语音验证码接收平台API接口例子
  7. 滚动抽奖html怎么做的,抽奖.html
  8. 多功能Python键盘记录工具Radium
  9. 装饰器(Decorator)模式
  10. 聊聊新股市盈率的那些事