飞行棋游戏的设计与实现

巡山小妖精
605次浏览
2021年01月24日 07:06
最佳经验
本文由作者推荐

雨中的树观后感-初中生活

2021年1月24日发(作者:中国合伙)

哈尔滨师范大学





















飞行棋游戏设计与实现










俞学君

指导教师



邢恺



讲师










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

雨中的树观后感-初中生活


雨中的树观后感-初中生活


雨中的树观后感-初中生活


雨中的树观后感-初中生活


雨中的树观后感-初中生活


雨中的树观后感-初中生活


雨中的树观后感-初中生活


雨中的树观后感-初中生活