pygame小游戏——消灭病毒保卫城市
游戏简介
近期新冠肺炎疫情肆虐,考虑病毒传播的机理,用pygame开发消灭病毒保卫城市小游戏。本游戏属于策略游戏,通过设定城市人数(决定收入),可购买道具,包括医护人员(决定收留病人的数量,一个医护人员可医治5人)、研发药物(可提升治愈率,降低致死率)、限制出行(可降低人员移动的幅度,同时减少资金的产生)、全民防护(可阻止病毒传染)。每一天可利用收入进行道具的购买,并开始防护,等所有的感染人员均已治愈或者死亡,游戏胜利。
游戏界面
1.打开游戏
在主页面可点击加号或减号设定城市人口,最少100人,最多1000人,增量100.
2.点击开始游戏
进入游戏页面,左上角显示信息,包括保卫的天数,总人数、健康人数(开始为总人数-1人)、轻症患者(开始为1人)、重症患者、治愈人数、病亡人数等,还显示收入。每一天可进行道具购买,点击购买,收入扣除相应的价格,左下角可增加数量。左下角的医院分为治疗区、治愈区和病亡区,右侧为城市,显示健康人和感染的人,按照正态分布进行移动,健康人与感染的人接触后则传染。
3.点击主页后可记录进度
可点击继续游戏。
点击重新开始,则重新选择城市人口,不记录数据。
点击结束游戏,则会记录当前数据,下次打开游戏时,可按照本次进度继续进行游戏。
重点代码
1.建立精灵组
goodmans = pygame.sprite.Group() # 健康人
infectmans = pygame.sprite.Group() # 感染人
……
# 建立类,生成类的实例,可添加到组中,或从组中删除
gm = people.City(myimage) # 生成实例
goodmans.add(gm) # 组添加对象
……
for each in goodmans: # 遍历组
goodmans.remove(each) # 组内移除对象
- 精灵接触或碰撞
for fm in infectmans: # 显示感染人
isinfect = pygame.sprite.spritecollide(fm, goodmans, False, pygame.sprite.collide_mask) # 是否接触
……
# 成员实例需标记mask
self.mask = pygame.mask.from_surface(self.image) # 标记图片非透明部分
……
# 得到的接触ininfect对象,可进行判断,也包含接触的对象
if isinfect: # 用户判断是否接触
……
for each in isinfect: # 用于遍历接触的对象
- 按概率选择,用随机数
from random import *
illtohos = [1, 5] # 重症住院概率,1/5
if randint(0, illtohos[1]) < illtohos[0]: # 从0-5随机产生一个数,抽取第一个数0的条件
- 正态分布
import numpy as np
from random import *
le = np.random.normal(a, b, n) # 随机按照正态分布抽取数,a为均值,b为标准差,n为产生数据的数量
- 多个py程序文件打包成exe执行文件
pyinstaller -F -w -i favicon.ico -p people.py viralcollapse.py
# -F 产生一个文件
# -w 不显示后台
# -i favicon.ico 程序图标
# -p people.py 自定义或第三方程序
# viralcollapse.py 主程序文件
小游戏下载地址
小游戏下载地址为:
https://download.csdn.net/download/weixin_39151703/12210846
代码下载地址为:
https://download.csdn.net/download/weixin_39151703/12522110