飞行棋游戏的设计与实现
巡山小妖精
605次浏览
2021年01月24日 07:06
最佳经验
本文由作者推荐
雨中的树观后感-初中生活
哈尔滨师范大学
学
年
论
文
题
目
飞行棋游戏设计与实现
学
生
俞学君
指导教师
邢恺
讲师
年
级
2008
级
专
业
计算机工程与应用
系
别
计算机科学与技术
学
院
计算机科学与信息工程学院
哈尔滨师范大学
2011
年
6
月
论
文
提
要
关于飞行棋发明的年代和 发明人,
在网络上似乎还没有相关的线索。
比较一致的意见是
他至少发明于大约二战以 后,因为它是关于飞行的(
FLIGHT GAME
)。但也有人认为这一
点没有说服 力,
因为它有可能是先有了规则再被冠上了飞行棋的名字,
在飞机发明前就出现
这一游 戏是完全可能的。再说,它可以跟飞机(
PLANE
)没有直接关系,因为它的名字只
是提到飞行(
FLIGHT
)。
飞行棋
< br>这个应该是国人的原创,
是中国
玩具公司生产的,
据说是为了纪念二战时飞虎队 的卓越
功勋,是
pachisi
游戏的变种。
飞行棋这种转圈式的 路程设计来自于空战中的
“
拉弗伯雷圆圈
”
。
法国人拉弗伯雷对德国
的
大圆圈编队
战术作了改进,使参加编队的飞机不但保持在一个水平 面上飞行,而且可绕
圆圈盘旋爬高。
这样就可以利用防御队形进行盘旋以取得高度优势,
伺机进行攻击。
这就是
著名的
拉弗伯雷大圆圈
。当时人们 发明这种棋,是用一种先进的空战战术。
1
飞行棋游戏设计与实现
俞学君
摘
要
:
本文所实现的是一个简单的飞行棋游戏,
该飞行棋以
Visual
Basi
作为开发
语言,采用
Visual Basic
自带的
Image
控件显示游戏所需的各种图片,采用最基本的
飞行棋游戏规则,游戏中四个玩家均由人来操作!
关键词
:
飞行棋
设计
visual basic
一
、规则及目标
飞行棋游戏的主要道具由:棋盘一张,红、黄、青及绿色的棋子各四颗,
骰子一
个组成。
本文中所要实现的游戏程序主要包含:
游戏的交互界面、
用户交互规则判定过程和
相关的服务模块。其中飞行棋的规则介绍如下:
起飞
只有在掷得
6
点后,方可将一枚棋子由
“
基地
”
起 飞至起飞点,并可以再掷骰子一次,确
定棋子的前进步数。
连投奖励
在游戏进行过程中,
掷得
6
点的游戏 者可以连续连掷骰子,
直至显示点数不是
6
点或游
戏结束。
迭子
己方的棋子走至 同一格内,可迭在一起,这类情况称为
“
迭子
”
,并可以叠著行进。
敌
方的棋子不能在迭子上面飞过;
当敌方的棋子正好停留在
“迭子
”
上方时,
则允许敌方停于迭
子上面。
若其它游戏者所掷点数大于他的棋子与迭子的相差步数,
则敌方棋子逐回停机坪。
撞子
棋子在行进过程中飞过的一格中,若已有敌方棋子停留,可将敌方的棋子逐回基地。
跳子
棋子在地图行走时,
如果停留在和自己颜色相同格子,可以向前一个相同颜色格子作跳
跃。
飞棋
棋子若行进到颜色相同而有虚线连接的一格,
可照虚线箭头指示的路线,
通过虚线到前
方颜色相同的的一格后,
再跳至下一个与棋子颜色相同的格内;
若棋子是由上一 个颜色相同
的格子跳至颜色相同而有虚线连接的一格内,
则棋子照虚线箭头指示的路 线,
通过虚线到前
方颜色相同的的一格后,
棋子就不再移动。
如果 棋子在准备通过虚线时有其他棋子停留在虚
线起始处到通往终点线路的巡航
圈上:
A
、如果对方是一个棋子,则将该棋子逐回基地,本方棋子继续行进到对岸;
B
、
2
如果对方是两个棋子重叠则该棋子不能穿越虚线、继续绕行。
终点
“
终点
”
就是游戏棋子的目的地。
当玩家有棋 子到达本格时候,
表示到达终点,
不能再控
制该棋子。
传统飞行棋 规则里,
玩家要刚好走到终点处才能算
“
到达
”
,
如果玩家 扔出的骰子
点数无法刚好走到终点出,多出来的点数,棋子将往回走。
二、
游戏的实现
整个游戏界面在一个
Form
窗口中实现。控制部分由
事件响应组模块组、游戏规则
判断和计算模块组、坐标计算与转换模块组三部分构成。
(一)
、棋盘和界面的设计与说明
游戏界面主要由一个基本的游戏控制
菜单和
18
个
Image
对象组成。
飞行棋棋
盘用作图软件绘制
,
存为
Jpg
格式后加载到
对象中。
该棋盘由
机场、
战场、
返航线、
飞行线组成,其中机场分布在棋盘的四个
角落。
战场围绕棋盘一圈,
允许每一个玩
家的棋子在条件满足时进入,并在其中战
斗直到被击落或者退出战场进入返航线为
止。
返航线是玩家棋子安全退出战场获得
胜利的唯一渠道,只有抵达返航线的终点
才能判定玩家棋子任务结束。
游戏控制菜单,包括开始游戏和退出游戏两个选项。
用
16
个
Image2
对象组成的
1
维
数组,作为红、黄、青及绿色的棋子,每种颜色四颗。
Image3
对象
作为骰子用来模拟
掷骰子时的动作。其他几个
label
对象用来显示游戏中玩家的状态信息。
Text2
对象用来显
示游戏的操作记录。
(二)
、
游戏数据的定义与初始化
在游戏正式开始以前必须要清理掉没用的和错误的数据,为后面的正常运行准备一
个
“
干净
”
的环境,这样程序的正确运行也为调试带来方便。
1
全局变量
GmData
首先我们要设置一个实现该游戏必需的一些通讯数据
Private GmData As Mtp_Game_Common, MovieStat As Movie_stat
其中
GmData
存储着游戏的主要状态信息,存储着包括棋盘坐标和棋子信息在内的各种关键数据,
3
整个程序就是为了正确的操作这个数据集而作。
当游戏开始时,用一个专门的子程序
Int_GameData()
对它进行初始化,
MovieStat
用来存储实现一些简单动画所需的临时信息
。
2
Int_GameData
()专用的初始化程序
本模块用来对
GmData
进行初始化操作。
Private Sub Int_GameData()
'
游戏数据初始化
Dim Player As Long, Plan As Long
Randomize Timer()
'
初始化随机数生成器
w = 0
'
当前玩家为
0
号
(
红色
)
_Round = 52
'
属于战场的总格数
_Landing = 49 '
连接战场和返航线的拐点索引号
For Player = 0 To 3
'*
初始化玩家数据
(Player).Start = Player * 13
'
起始坐标
(Player).CntRound = 0
'
连掷次数统计
(Player).CntKilled = 0
'
杀敌次数统计
(Player).CntDown = 0
'
被杀次数统计
For Plan = 0 To 3
'
初始化棋子
(Player, Plan).Stat = Complete
'
完成任务
(Player, Plan).Idx_Abs = -1
'
棋子绝对坐标
-1
SetRlat_Idx Player, Plan
'
棋子相对坐标
Next
Next
(Player).CntPoint = 0
'
骰子点数统计
GetMapXYFromFile
'
从文件中读取属于战场的棋盘坐标
End Sub
3
GetMapXYFromFile()
从文件中读取属于战场的棋盘坐标
基本思路:
利用
Fos
对象打开文件并读取文件的内容,
将它存入到全局变量
GmData
下。
Private Sub GetMapXYFromFile()
'
从文件中读取属于战场的棋盘坐标数据
Const ForReading = 1, ForWriting = 2
'
定义读和写操作的常量
Dim fso, MyFile
'
利用
FSO
对象进行文件读去操作
Dim Idx As Integer
'
一个临时变量,用来遍历战场的棋盘索引。
Set fso = CreateObject(
Set MyFile = xtFile(
.t
xt
'
打开文件
For Idx = 0 To 51
'
遍历属于战场的索引,并读取所需的棋盘坐标。
_Pos(Idx).Y = ne
Next
_Pos(Idx).X = ne
'
关闭刚打开的文件
Set MyFile = Nothing
'
将对象注销
Set fso = Nothing
End Sub
4
4
intImage()
棋子与骰子的初始化
Private Sub intImage()
'
图片框初始化
For Player = 0 To 3
For Plan = 1 To 3
Image2(Player * 4 + Plan).Picture = Image2(Player * 4).Picture
'
载入相关
的棋子图片
Next
Next
= + ( - ) / 2
'
将骰子放到棋盘的
中间
= + ( - ) / 2
End Sub
Dim Player As Long, Plan As Long
'
玩家和棋子临时计数器
5
Form_Load()
窗体的加载过程
每一个
windows
程序基本上都是从窗体开始加载的。在这个模块中,可对游戏进行必
要的初始化操作。使游戏处于复位状态,为稍后的游戏作准备。
6
Start_Click()
和
Exit_Click()
菜单动作
本文中的菜单很简单,只有开始和退出两个选择,对应的模块为:
Start_Cl ick()
和
Exit_Click()
。
(三)
、骰子的模拟与控制
对于骰子的模拟与控制
主要是实现以下四点
1
、骰子随机性的模拟,可以用
Vb
中的随机函数来模拟。
2
、骰子使用状态的控制,可以通过设置
Imagede
Enable
属性达到目的。
3
、
骰子在棋盘上的坐标计算与定位。
4
、骰子翻转动画的过程模拟,可以通过不断加载不同的骰子图片来实现。
1 Dice()
生成骰子的随机点数
机函数构成的表达式
Rnd
*
6
会产生 一个
0~5
之间的随机数,
用
Fix()
取整后加
1
就产
生了
1~6
之间的随机整数,其中随机种子已经由
Randomize
在
Int_GameData()
中设定了。
2 Dice_Show()
加载骰子图像
根据数字显示对应的骰子图像可以用
LoadPicture
实现。
Sub Dice_Show(ByV
al num As Long)
'
加载骰子图片
num = (num) Mod 6
'
使
Num
在
0~5
之间循环变化
e = LoadPicture(
'
加载骰子图片
End Sub
3 Dice_Run_Timer()
实现抛掷骰子的动画效果
要实现骰子的连掷动 画则需要
Timer
控件的帮助了,
通过
timer
控件循环加载骰 子图像,
并作适当延迟,就产生了骰子连掷效果。经过试验,骰子延迟
50
毫秒,滚动一
6~12
次效果
最佳。
4 PutDice2Map()
控制骰子的移动
5