每次乘坐公交车的时候,手机信号都很差。为了打发时间,下载了一个小游戏合集,里面就包含有飞行棋。
闲来无聊就打算自己制作一个飞行棋游戏。
在制作飞行棋的时候,我在百度搜索了关于【C#飞行棋】,得到的结果全是用控制台编写的,代码也差不过。不过在后面找到了一篇关于Android的飞行棋博客。
Android博客链接:https://blog.csdn.net/Shenpibaipao/article/details/70194542
他写了三篇飞行棋设计博客,结合他的文章内容和我在手机上的游戏规则,编写了一款辣眼睛的飞行棋游戏。
本来打算写成可局域网对战,奈何自己技术有限,就把这个想法抛弃了。相关链接:https://www.cnblogs.com/wgp13x/p/3800030.html
目前已完成单人游戏的基本功能,就只有抛骰子和迭机动画未写。
游戏规则:
1.每次抛掷出6点,都可以在掷一次骰子。
2.若停在与棋子同色的色块上,可飞跃至下一个同色色块;若停在快速通道【程序中称为传送门】的同色色块上,分两种情况:
⑴若停在传送门起点,棋子先飞跃至传送门终点,在飞跃至下一个同色色块。
⑵若飞跃至传送门起点,则只能够飞跃至传送门终点。
3.击杀:棋子停至某格,若已停有其他颜色的棋子,则可以将其撞会飞机场。
4.迭机:同色棋子停在同一格称之为迭机。某色棋子迭机时,其他棋子无法通过该格,但是会先移动至该格,然后再【后】退,后退过程中还遇到,同理;当某色棋子停在迭机方格,则将迭机棋子全部击杀。
5.四颗棋子率先抵达终点者获胜,若点数多余,则棋子往回走。当游戏胜利后,五秒钟后会重置本轮游戏,玩家数据设为最初的【默认值】。
程序框架:
本来也打算用什么牛B哄哄的框架来写,后面仔细想想有点浪费时间【时间不多】,就一切从简。
就如图上所述一样,
Converters里面存放的都是一些转化,本来是用于DataGrid,将一些数据进行转换,后面被抛弃了局域网,所以这里面的文件也没有用了。
Data里面保存的就两个txt文件,一个是存放地图信息,除了第一次加载地图的时候,其他都是读取map.txt里面的数据;另一个就是保存用户设置。
Entity存放飞行棋最基本的类,Box是地图的方格;Chess是玩家的棋子,继承Button;Player飞行棋玩家;Map就是所有方格的集合。
Game保存游戏里的公共内容。
Helpers游戏的一些帮助类。
Images整个游戏的资源文件存放此处。
theme控件样式。
Windows游戏界面。
地图介绍:
图片来至于https://blog.csdn.net/Shenpibaipao/article/details/70194542,我的图片素材是从他那下载过来的,然后再用ps稍微修改了一部分。
这是一张1080*1080的图片,将其分割成36*36,地图上的每个点都能对应一个坐标,后面为了方便给方格排序,我稍微微调一下坐标点。
将方格分类为:基础方格、飞机场方格、起飞点方格、起点方格、传送门起点方格、传送门终点方格、转折点方格、冲刺方格和终点方格
基础方格:棋子正常跑的赛道,但不包含冲刺赛段【最后一段直线】。
转折点方格:某色棋子基础方格的最后一个
冲刺方格:最后一段直线。
/// <summary>
/// 飞行棋地图中的方格
/// </summary>
[Serializable]
public class Box
{
/// <summary>
/// 方格编号
/// </summary>
public int BoxID { get; set; }
/// <summary>
/// X轴坐标
/// </summary>
public int PointX { get; set; }
/// <summary>
/// Y轴坐标
/// </summary>
public int PointY { get; set; }
/// <summary>
/// 所属颜色
/// </summary>
public ColorEnum Color { get; set; }
/// <summary>
/// 是否是基础方格
/// </summary>
public bool IsBasic { get; set; }
/// <summary>
/// 是否是飞机场
/// </summary>
public bool IsAirport { get; set; }
/// <summary>
/// 是否是棋子的起飞点
/// </summary>
public bool IsTakeOff { get; set; }
/// <summary>
/// 是否是传送门起点
/// </summary>
public bool IsPortalStart { get; set; }
/// <summary>
/// 是否是传送门终点
/// </summary>
public bool IsPortalEnd { get; set; }
/// <summary>
/// 是否是棋子的转折点
/// </summary>
public bool IsCrisis { get; set; }
/// <summary>
/// 是否是赛道的冲刺阶段(最后一段直线)
/// </summary>
public bool IsHomeStraight { get; set; }
/// <summary>
/// 是否是棋子的终点
/// </summary>
public bool IsDestination { get; set; }
}
因为需要将方格集合需要保存到txt文档中去,需要标记【Serializable】
电脑玩家:
其他的内容我也就不多说了,程序中每个方法都有注释,我相信应该能够理解。
电脑玩家的代码我就没随便写了,如果你们有兴趣可以自己完善。我就简单的做了一些if判断。
运行效果图:
如果你要换成Winform的项目,那你就需要更改移动动画和界面,整个程序没有加try..cath..,所以嘛。。。。
下载链接:https://download.csdn.net/download/dear200892/11710302
百度云盘:https://pan.baidu.com/s/1j6lEdLoAmrk2eWecoTRmTA 提取码:4qu3