pygame小游戏——消灭病毒保卫城市

4 篇文章 1 订阅
1 篇文章 0 订阅

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)  # 组内移除对象
  1. 精灵接触或碰撞
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:  # 用于遍历接触的对象
  1. 按概率选择,用随机数
from random import *
illtohos = [1, 5]  # 重症住院概率,1/5
if randint(0, illtohos[1]) < illtohos[0]# 从0-5随机产生一个数,抽取第一个数0的条件
  1. 正态分布
import numpy as np 
from random import * 
le = np.random.normal(a, b, n)  # 随机按照正态分布抽取数,a为均值,b为标准差,n为产生数据的数量
  1. 多个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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值