先看下面的这个图片,是不是看着都晕呢?制作飞行棋看着特别的麻烦,刚开始都不知道如何下手,通过分析,知道了要一步步来。制作飞行棋有两个难点,一个是画图,另一个是进行逻辑判断,把这两个问题搞明白了,其他的都不是问题。

画地图

那么如何制作表头呢?

先写一个方法

        public static void showU(){Console.WriteLine("********************************************");Console.WriteLine("*                                                    *");Console.WriteLine("*    终极骑士飞行棋 10.18                         *");Console.WriteLine("*                                                    *");Console.WriteLine("*******************************************");
        }
<span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">然后在主函数中调用这个方法</span>
 static void Main(string[] args){//制作表头showU();
            Console.ReadKey();
        }

这样,一个飞行棋的表头就做好了,我们来运行一下,效果是这样的。

我们在画图之前,先进行初始化地图,为画图做充分的准备,写一个方法。

        public static void InitMap(){ //初始化地图//用0表示普通,显示给用户就是□//用1.........幸运轮盘,显示给用户的就是◎//用2 .........地雷,显示给用户的就是☆//......3.........暂停,..........................................▲//......4..........时空隧道,...............................※int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎int[] landMine = { 5, 13, 17, 33, 47, 60, 80, 94 };//地雷☆int[] pause = { 9, 27, 66, 93 };//暂停▲int[] timelunnel = { 20, 25, 45, 72, 89, 92 };//时空隧道※for (int i = 0; i <luckyturn .Length ; i++){Map[ luckyturn[i]] = 1;}for (int i = 0; i < landMine .Length ; i++){Map[ landMine [i]] = 2;}for (int i = 0; i < pause .Length ; i++){Map[pause[i]] = 3;}for (int i = 0; i < timelunnel.Length ; i++){Map[timelunnel [i]] =4;}}

然后在主函数中调用,就一句代码,就不写了。

紧接着就是画第一行了,代码如下:

            if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] ==pos ){Console.Write("<>");}else if (PlayerPos[0] ==pos )//如果玩家A在地图上就画A{Console.Write("A");}else if (PlayerPos[1] ==pos)//如果玩家B在地图上就画B{Console.Write("B");}else{switch (Map[pos ])//如果玩家A和玩家B不在一起也不在这个坐标上哪就画该显示的地图图标{case 0: Console.Write("□"); break;case 1: Console.Write("◎"); break;case 2: Console.Write("☆"); break;case 3: Console.Write("▲"); break;case 4: Console.Write("※"); break;}//end switch}//end else

效果展示

然后画第一列,由于画完第一行之后,其他的行和列都会用到第一行的逻辑,然后我们就可以把第一行的逻辑进行封装,这里就用到了一个逻辑封装方法,代码如下。

 public static void DrawStringMap(int pos)//将第一行的逻辑代码进行封装{这里填写上述实现地图第一行的代码}

下面就是再主函数中调用此方法

           Console.WriteLine();//换行,#region 画第一竖行for (int i = 30; i <=34; i++){for (int j = 0; j <=28; j++){Console.Write("  ");//转换为隐形的字符}DrawStringMap(i);Console.WriteLine();//换行}  #endregion

效果展示

第一行和第一列都画好之后,剩下的其余行和列就好说了,直接调用方法就行。

基本的图形就完成了

为了让图形更家的美观,可以改变颜色,这里的代码就不往上添加了,感兴趣的自己研究研究。

逻辑判断

地图画完了,接下来就是进行逻辑分析了,到底是怎么在图上运行的?

玩家A和玩家B在地图上行走的思路基本上差不多,我们把它封装成一个方法,减少代码的冗余

       <pre name="code" class="csharp">        public static void RowTouZI(int  playerpos  ){ #region 掷骰子的代码,冗余的Random r = new Random();int num=r.Next (1,7);string msg = "";Console.WriteLine("{0}按任意键开始掷骰子",playerNames [playerpos]);Console.ReadKey(true );Console.WriteLine("{0}掷出了{1}",playerNames [playerpos],num);Console.WriteLine("{0}按任意键开始行动......",playerNames [playerpos]);Console.ReadKey(true );    PlayerPos[playerpos] += num;//玩家A进4格CheckPos();if (PlayerPos[playerpos ]==PlayerPos[1-playerpos ]){msg =string.Format ("玩家{0}踩到了玩家{1},玩家{2}退6格",playerNames [playerpos],playerNames [1-playerpos ],playerNames [1-playerpos ]);PlayerPos[1-playerpos ] -= 6;//玩家B退6格CheckPos();}else{switch (Map [PlayerPos[playerpos]]){case 0: msg = "行动完了"; break;case 1:msg=string.Format ("{0}走到了幸运轮盘的身边,请选择1---交换位置,2---轰炸对方",playerNames [0]);int number=ReadInt(msg,1,2);if (number==1){int temp = 0;temp = PlayerPos[playerpos];PlayerPos[playerpos] = PlayerPos[1-playerpos];PlayerPos[1-playerpos] = temp;msg=string.Format ("玩家{0}选择了与玩家{1}交换位置",playerNames [playerpos],playerNames [1-playerpos ]);}else{PlayerPos[1-playerpos] = 0;msg=string.Format ("玩家{0}选择了轰炸玩家{1}",playerNames [playerpos],playerNames [1-playerpos]);}break;case 2://踩到了地雷msg="能踩到地雷,百年不遇,退6格";PlayerPos[playerpos] -= 6;CheckPos();break;case 3: msg="踩到暂停了";flag[playerpos] = true;break;case 4:msg="恭喜,获得穿越10步的机会";PlayerPos[playerpos] += 10;CheckPos();break;}}Console.Clear();//刷新DrawMap();//画地图Console.WriteLine(msg);#endregion     }
</pre><span style="font-size:18px"> 封装完了,要在主函数中进行调用,使这个方法得以实现</span><p></p><pre>
<span style="font-size:18px;">
</span>
<pre name="code" class="csharp">     #region 玩家A掷骰子
                if (flag [0]==false ){RowTouZI (0);}else{flag[0] = false;}#endregionif (PlayerPos [0]==99){Console.WriteLine("恭喜玩家A胜利了");break;}#region 玩家B掷骰子if (flag [1]==false ){RowTouZI (1);}else{flag[1] = false;}#endregionif (PlayerPos [1]==99){Console.WriteLine("恭喜玩家B胜利了 ");break;}Console.WriteLine("行动完毕......");}Console.ReadKey();

代码进行优化,防止出现bug,也是封装成方法,进行调用。

<pre name="code" class="csharp">public static void CheckPos()//判断坐标{//如果超出范围,放在最后一个位置上if (PlayerPos [0]> 99){PlayerPos[0] = 99;}if (PlayerPos [1]> 99){PlayerPos[1] = 99;}//如果小于最小的位置,放在开始的位置上if (PlayerPos [0]< 0){PlayerPos[0] = 0;}}
</pre><span style="font-size:18px">到这里基本上就可以玩了,剩下的就是美化了,如果你想要更好看的界面,可以自己进行修改。</span><pre>

感受

刚开始做这个飞行棋,感觉好麻烦,好多代码,好多的循环语句,查错语句,还有好多封装好的方法,看的晕乎乎的,中间也想着看看就行了,就不敲代码了,现在跟着老师的思路,敲完代码,中间有各种的冗余代码等等,都会想尽办法的去避免,让代码变的更加的简洁,完美,直到现在整个飞行棋可以运行,真的非常开心,收获也特别的多,要学习的还有很多很多,加油~~~

终极飞行棋地图实现和逻辑判断相关推荐

  1. pygame战棋游戏制作之战棋地图绘制(一)

    前言 本来有好多篇博文想写的,但是目前在做的是这款战棋游戏的开发,所以其他版块只能先咕咕咕了.或者有关注的小伙伴们可以留言希望下一个更新的版块是啥子?postgresql数据库底层原理?网络编程?计算 ...

  2. Android使用Jenkins打包上传蒲公英

    Android环境变量 系统管理 - > 全局属性-> 配置环境变量 设置环境变量 系统管理 - > 全局工具配置-> 配置JDK.gradle,git等 jdk git gr ...

  3. 半年总结(二)---2015

    鸟欲高飞先振翅,人求上进先读书.---  高中晨读的广播 这一年的后半年我的大学时代进入了一个高峰期---大四,这一年相对来说比较轻松,主要就是忙着毕业的相关事宜,大四这一年会面临两个选择,一个是工作 ...

  4. 酱油带你用cocos2dx3.0完成一款战棋游戏 (曹操传)(一)地图制作篇 1

    这是酱油第一次写博客,所以如果有什么写的不好,大家多多海涵啊.那么废话就不多说了,直接进入正题吧. 制作一款战棋游戏,在酱油看来最大的难度便是 ai的设计以及 实现剧本对游戏整体的控制,当然啦,这都是 ...

  5. pygame战棋游戏制作之战棋回合切换(五)

    简介 前面我们已经完成了战棋地图的绘制,棋子的设置,光标的设置,接下来我们将要开始实现rpg游戏的灵魂--回合切换. 正文 回合切换主要是通过棋子列表判断,当列表为空时,触发回合切换的函数.因此我们创 ...

  6. 三国志11的一点分析

    三国志11的一点分析 张嘉华 newzjh@126.com QQ:188318005 由于很多朋友问到我三国志11的渲染问题,今天只好自己用GA加Fraps,还有RPGViewer分析了一下,并把分析 ...

  7. 兵棋系列2----兵棋游戏中地图滑动和委托消息

    前几天写了一个六边形阵列的算法,今天周末比较闲,下午没事就做了做兵棋的地图操作,一点一点的做吧,总会做好,毕竟我也经常玩各种棋,对做一个这类型的小游戏非常感兴趣. 首先来解释下,下面要出现代码的操作. ...

  8. python 战棋游戏代码实现(2):六边形地图寻路和显示

    python 战棋游戏代码实现(2):六边形地图寻路和显示 六边形地图介绍 代码介绍 地图六边形显示 A*算法的六边形寻路修改 判断某个点在哪个六边形中 完整代码 编译运行 六边形地图介绍 之前的文章 ...

  9. 三问腾讯地图:棋差一招?另辟蹊径?后发制人?

    文丨智能相对论 作者丨陈选滨 今天,在各大应用商店里,依旧搜不到"滴滴出行"App的身影.距离滴滴出行因信息安全问题被下架已有近4个月的时间,相关调查结果仍未公布. 与此同时,出行 ...

最新文章

  1. java中文件选择对话框
  2. 02.德国博士练习_01_cluster_install
  3. 老笔记整理四:字符串的完美度
  4. aws 静态网站_如何使用AWS托管静态网站-入门指南
  5. 离线或在线加载pytorch、mmdetection预训练模型vgg、resnet、alexnet等
  6. Macaca上手体验
  7. Python 将输出内容保存在text文件中
  8. HDU 5979 2016ICPC大连 I: Convex
  9. js中substr,substring,indexOf,lastIndexOf,split 的用法
  10. 厌倦 VMware,试试更轻量级的虚拟机!
  11. Linux入门之常用命令(10)软连接 硬链接
  12. mybatis plus+spring boot 多租户动态数据源实现方案
  13. 1128: mxh道歉记
  14. u盘efi分区删除方法
  15. 计算机存储成本,仓储成本
  16. python instagram 爬虫
  17. Unity引擎源代码开源地址
  18. 通过JS代码实现Ping功能
  19. [读论文]CVPR2019: Occupancy Networks: Learning 3D Reconstruction in Function Space
  20. 陕西的饮食历史和特点

热门文章

  1. springboot集成mongoDB高级聚合查询,关联查询,lookup.let多条件关联查询。
  2. 有啥躺赚的副业?有什么副业是躺赚的?简单好赚的副业
  3. PIC单片机在线串行编程(ICSP)的实现
  4. 你会使用五笔打字吗?
  5. 门店客流量如何统计?门店客流分析的重要性|图普科技智慧零售
  6. App Store审核指南-中文版
  7. 信号与系统中的机器学习相关的算法的进展和理解(期末作业)
  8. 保定学院计算机二级证书领取时间,专接本各科目考试发、收试卷及答题纸(卡)时间...
  9. 【校园招聘】被南瑞集团坑了,这么大的公司竟然不讲信用!大家不要再上当受骗了!
  10. 从0到1,阿里云高级专家口中的DevOps