飞行棋的设计与实现摘要:飞行棋是典型的战旗类游戏(slg),其开发主要包括游戏界面的设计、游戏规则的设计;经过分析,笔者使用 sun 公司的java 语言,利用java 语言提供的各种面向对象的开发工具,在短时间内建立游戏原型,然后,对初始原型进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。
关键词:飞行棋;java;游戏地图;游戏the design and implementation of flight chessxie yunyan(harbin normal university,institute of computer science and information engineering, harbin150025,china)abstract: the flight chess is a battle flag games (slg), includes the development of the game interface design, the design of the rules of the game; after analysis, the author uses sun java language provided by the java language object-oriented development tools, in a short time to establish a prototype of the game, then demand iteration of the initial prototype, constantly revised and improved, until the formation of a viable system of customer satisfaction. keywords: flight chess; java; game map; game一、飞行棋历史起源关于飞行棋发明的年代和发明人,在网络上似乎还没有相关的线索。
比较一致的意见是他至少发明于大约二战以后,因为它是关于飞行的(flight game)。
但也有人认为这一点没有说服力,因为它有可能是先有了规则再被冠上了飞行棋的名字,在飞机发明前就出现这一游戏是完全可能的。
再说,它可以跟飞机(plane)没有直接关系,因为它的名字只是提到飞行(flight)。
飞行棋(flight)应该是国人的原创,是中国玩具公司生产的,据说是为了纪念二战时飞虎队的卓越功勋,是pachisi游戏的变种。
飞行棋这种转圈式的路程设计来自于空战中的“拉弗伯雷圆圈”。
法国人拉弗伯雷对德国的“大圆圈编队”战术作了改进,使参加编队的飞机不但保持在一个水平面上飞行,而且可绕圆圈盘旋爬高。
这样就可以利用防御队形进行盘旋以取得高度优势,伺机进行攻击。
这就是著名的“拉弗伯雷大圆圈”。
当时人们发明这种棋,是用一种先进的空战战术。
二、飞行棋游戏规则(一)飞行棋简介。
飞行棋是由四种颜色,一般是红黄蓝绿组成的,上面画有飞机的图形,最多可以四个人各拿一种颜色一起玩。
飞行棋里有一个骰子,骰子是正方体的,有六个面分别是一个点、二个点、三个点、四个点、五个点和六个点。
你只要转动骰子,骰子停下来的时候正面是几,你就走几步。
但是刚开始时只有投到六,你的飞机才能起飞,并且投到六你还有机会再投一次。
说明:到终点时走的步数要正好到达才算胜利,不然要返回来走(二)飞行棋规则。
游戏开始后,玩家轮流行动,每次通过掷骰子获得的点数来决定角色行走格数,角色必须在路道上按照顺时针方向行走,4种颜色的行动格间隔交替,最后终点前6格全部为一色格子,没有特殊作用,但是只有颜色对应的一方的角色行动到这里的时候要从这里进入。
起点在路道旁,在最靠近自己基地的顺时针方向的上一家的基地颜色对应颜色的路道格的边上,起点出发的第一步就走到这一格。
每次掷到6可以出动一个角色,并且可以本回合再次掷骰子行动。
最后,先全部角色到达终点的一方获胜。
游戏地图上设置有关卡:1、普通;2、地雷;3、暂停;4、幸运轮盘。
棋盘上的关卡只在棋子第一次移动遇到时有效。
起飞:只有在掷得6点后,方可将一枚棋子由“基地”起飞至起飞点,并可以再掷骰子一次,确定棋子的前进步数;在改进规则场中,只要掷得5点以上的点数就可以起飞。
连投奖励:在游戏进行过程中,掷得6点的游戏者可以连续投掷骰子,直至显示点数不是6点或游戏结束。
迭子:己方的棋子走至同一格内,可迭在一起,这类情况称为“迭子”。
敌方的棋子不能在迭子上面飞过;当敌方的棋子正好停留在“迭子”上方时,敌方棋子与2架迭子棋子同时返回老家。
若其它游戏者所掷点数大于他的棋子与迭子的相差步数,则多余格数为由迭子处返回的格数;但当其它游戏者所掷点数是6而且大于他得棋子与迭子的相差步数时,那么其它游戏者的棋子可以停于迭子上面,但是当该游戏者依照规则自动再掷点的时候,服务器自动走刚才停于迭子上面的棋子。
如果棋子在准备通过虚线时有其他棋子停留在虚线和通往终点线路的交叉点时:a:如果对方是一个棋子,则将该棋子逐回基地,本方棋子继续行进到对岸;b:如果对方是两个棋子重叠则该棋子不能穿越虚线、必须绕行。
撞子:棋子在行进过程中走至一格时,若已有敌方棋子停留,可将敌方的棋子逐回基地。
跳子:棋子在地图行走时,如果停留在和自己颜色相同格子,可以向前一个相同颜色格子作跳跃。
飞棋:棋子若行进到颜色相同而有弹簧一格,向前方颜色相同的的一格跳;若行进到颜色不相同而有弹簧一格,向后方颜色相同的的一格跳;棋子就不再移动。
终点:“终点”就是游戏棋子的目的地。
当玩家有棋子到达本格时候,表示到达终点,不能再控制该棋子。
传统飞行棋规则里,玩家要刚好走到终点处才能算“到达”,如果玩家扔出的骰子点数无法刚好走到终点出,多出来的点数,棋子将往回走。
在改进规则场中,如骰子点数多过于到终点的格数,也不需要后退,可以直接当胜利返回。
暂停:玩家停止一次投骰子的资格,本轮结束后,才可以再投。
幸运轮盘:当落入带问好箱子的格子,就进入幸运轮盘,里面有几种运气:前进、后退、交换位置、转移、暂停一轮、奖励一次、设置地雷、轰炸(将对方棋兵炸退6步),安眠药等。
三、游戏的界面元素对一个游戏而言,游戏界面是一个相当重要的部分,界面的美观直接影响到玩家对游戏喜爱程度,下面主要介绍界面中的一些主要元素。
游戏界面元素有:地图、骰子、4方棋子(每方4个共16个角色)。
(一)地图基地——对应颜色的大方格就是每方的基地,准备就绪后,4个角色就会出现在基地,在途中被吃敌方吃掉的角色,也会回到基地。
起点——基地边上特殊颜色的三角行格,如果掷骰子获得6,就可以点击一个基地中的棋子,跑到起点,同时消耗本次行动点。
终点——棋盘正中间的位置,任何一个角色到达终点就算走完全程,所有棋子到达终点就算胜利。
跳跃——棋子每次行动的落点如果刚好是本方颜色格子,那么能跳到逆时针方向的下一个本方颜色的格子。
终点通道、直行格出外。
每次行动只能跳跃一次。
直行格——每根箭头的起点位置即是对应颜色方的直行格。
每步行动落到这一点,就能直行到箭头所指的格子。
终点前通道——终点前的六格即是对应颜色方的终点通道,这里不会产生“跳跃”。
(二)骰子。
飞行棋里有一个骰子,骰子是正方体的,有六个面分别是一个点、二个点、三个点、四个点、五个点和六个点。
用来决定玩家走几步,正面是几就走几步,每次掷到6可以出动一个棋子,并且可以再次掷骰子,直至不是六为止。
(三)四方棋子。
有四方棋子组成,分别四种颜色,每一方分别有四个棋子。
四、游戏的框架结构设计及流程(一)游戏的框架结构。
游戏的框架结构主要由玩家,鼠标,对战地图和游戏控制组成。
玩家通过鼠标控制游戏中对战地图的操作对象——骰子和棋子,骰子和棋子遵循游戏规则,游戏规则决定棋子走的方向和步数,最后棋子所发生的变化映射到对战地图上。
(二)创建对战地图。
在创建对战地图时,主要考虑点:幸运轮盘位置、地雷位置、时空隧道位置、暂停位置;关卡在对战地图上的对应的显示图形;玩家棋子骰子在对战地图上的显示图形。
(三)游戏类(game)。
游戏类(game)功能:1.实现游戏初始化设置;2.展示游戏开始界面以及角色设置;3.控制游戏进度、实现游戏规则。
在游戏正式开始以前必须要清理掉没用的和错误的数据,为后面的正常运行准备一个“干净”的环境,这样程序的正确运行也为调试带来方便,所以首先要进行初始化。
设计游戏类的关键:两个玩家轮流掷骰子,如果上轮走到暂停关卡,停掷一次飞行棋游戏类实现流程图如图1所示。
图1 流程图五、游戏的实现启动游戏后,跳出游戏选择界面,有四个角色可供选择,分别是戴高乐、艾森豪威尔、麦克阿萨、巴顿。
分别双方分别选择自己的角色开始对决。
六、总结通过编写这个程序,我体会最为深刻的一点是系统架构和设计模式的重要性。
即使是对于一个并不大的程序,代码的组织都是非常重要的,因为这关系到日后的维护以及扩展。
这个游戏之中,可以直接获得一个完整的飞行棋人机对弈算法的源代码级模块。
但是对于系统的架构,却完全是自己的事情,几千上万行的代码需要通过合适的方法组织起来,从而使编写代码更加有条理,更加符合标准,这才是最重要的。
在刚开始编写这个程序的时候,我幼稚地认为其中最重要的是博弈树算法。
但是头一个月编写程序的时候却发现程序越写越不容易维护,可见是我走错了方向。
后来我向老师讨教,他告诉我:我们的先人早已为我们准备好了各种精良可用的现成算法,我们所要做的就是直接“拿来主义”罢了;但是对于代码的组织(也就是软件的架构)才是真正软件工业的核心部分,因为软件事实上是直接和经济挂钩的,因此我们必须在编写代码之前选择一种最为合适的方法来组织这些代码,否则我们将会失去更多的时间和金钱。
于是,我将以前写的代码全部删除,认真地思考了三天的时间。
我开始发现其实飞行棋的设计并不是纯数学——正相反,数学只占了很小的一部分。
它其实是一种哲学,一种有着数学美感的哲学。
参考文献:[1][美]罗林斯.[美]莫里斯著,付煜等译.游戏架构与设计[m].红旗出版社.2005.[2][美]clayton walnum著王国春,施妍然译.游戏编程 21天自学通[m].清华大学出版社,2001[3]姜波.visual basic ,2005。