用pygame写军旗游戏课题研究报告
研究背景
简介
我叫胡宗尧,这是我和我的弟弟合作的一个项目:用 pygame
^2编写军旗游戏。
我对 python
有浅显的了解,并且用 pygame
做过一些小游戏。
我的弟弟叫胡宗禹,他从 C
语言入门,对图形界面不是特别了解,但接触过 OpenGL
。
源码下载地址,提取码:n3g3
字体下载地址: 提取码:4atl
没有安装python
| pygame
也想玩?
EXE下载地址,提取码:qano
背景
作为一个军旗爱好者,我经常在家和弟弟下军旗,翻翻棋[^1]作为一种冷门的下法,在很多军旗的App中都没有得到实现,所以在这个课题中,我们就用 pygame
实现这个游戏。
研究目的
为了让更多人了解翻翻棋。能玩上军棋,爱上玩军棋。
问题探究
需要的工具
我们在这个项目中使用的工具如下:
Sublime Test 3
Windows 7
python 3.5.1
pygame 1.9.4
项目结构
1 | # -*- coding: utf-8 -*- |
1 | #所有的变量定义 |
1 | #函数列表: |
1 | #初始化dictionary |
研究中的问题
1.安装pygame时屡次出错
解决方案:在网上查阅很多资料得知要用1.9.4
版本的pygame
,问题解决
2.工兵移动的问题
众所周知,工兵的移动非同寻常棋子——它在轨道上可以拐弯,这就增加了很多难度。
解决方案:我使用了递归语句判断是否达到拐点,问题解决。代码如下:
1 | def fastGoWhere(pos,x,y,color,is_gb): |
3.递归可能造成的堆栈错误
如果工兵走的路线正好是一个圈时,递归就会永无止境——直至报错。
解决方案:多加了一个times变量用来计数,每次传递到下一个函数时就加一,大于40时就退出递归。
代码很简单:
1 | def fastGoWhere(pos,x,y,color,is_gb,times): |
4.打包成EXE中出现的问题
报错:应用程序异常退出
解决方法:
查阅了资料得知,是字体没有找到的原因。
只要把我的字体模块HanYiYanKaiW-2.ttf
放到源码所在的目录下即可
总结
这个军棋游戏还是费了我很多心思的。但是做出来后感到很开心。
成果展示
电脑端
这是用pyinstaller
打包后的游戏界面有个大大的【军棋】框:
点了【军棋】后会出现军棋界面:
然后就可以愉快的玩耍啦!!!!!!!!!!!
手机端
在手机端玩翻翻棋的方法:
- 下载
pydroid
- 在
pydroid
上安装pygame
模块 - 导入
junqi.py
文件 - 运行
有待解决的问题
- 被吃掉的军棋无法查看的问题—————-我会马上解决的!
- 最好能弄一个人机对战的军棋游戏—————这就有点难度了,我最近正好在研究深度学习。相信不久就能训练出来能够进行人机对战的
- EXE文件只能在win7上运行—————暂时没有时间,但我也想到了一个办法。运行一个win10虚拟机,打包成适合win10的EXE文件。然后在MacBook Pro上也打包一遍,就有了一个Unix可执行文件了。
参考
[^1]:规则说明:2人参与游戏,玩家坐下后,会根据玩家角色性别随机选定军棋翻翻棋的角色秀。若当桌的两个玩家为同性,则角色分别为不同的2个形象。开始游戏后,2人轮流将棋盘上反面放置的军棋翻起以确定控制方,直到某一玩家先翻到与前一张翻到棋子颜色相同,则该棋子的颜色就属于该玩家;开棋方由系统随机选取。棋子分为两色,一共50颗棋子,每方各有25个棋子,分别是:3个工兵,3个排长,3个连长,2个营长,2个团长,2个旅长,2个师长,1个军长,1个司令,2个炸弹,3个地雷,1个军旗 大小:司令 > 军长 > 师长 > 旅长 > 团长 > 营长 > 连长 > 排长 > 工兵地雷:地雷不能移动。工兵能挖或者炸弹能炸,其他棋子都不能主动触碰地雷。军旗:不能移动。当对方3个地雷全被挖后,可以用本方任何棋子去扛军旗,挖掉军旗则获胜。炸弹:可以移动。能炸掉对方任何棋子(同归于尽),若对方地雷未被挖光,则无法碰撞对方军旗。其他可以移动棋子可以主动碰触炸弹以同时消失。———————–来自百度百科