飞行棋小项目
- 飞行器代码如下:
namespace棋士飞行棋 { internalclassProgram { //在下面的数组存储我们游戏地图的各个关卡 //数组下表为0的元素对应地图上的第一格,下标为1的元素代表地图上的第2格.....下标为n的元素对应地图上的第n+1格! //在数组中用 1:表示幸运轮盘◎ // 2:地雷☆ // 3:暂停▲ // 4:时空隧道¤ // 0:表示普通□ privatestaticint[] Map=newint[100]; privatestaticint[] playerPos= { 0, 0 }; //playerPos[0]存玩家A的下标!playerPos[1]存玩家B的下标! privatestaticstring[] name=newstring[2]; //name[0]存玩家a的姓名,name[1]存玩家b的姓名! privatestaticbool[] isStop= { false, false };//isStop[0]表示A是否走到了暂停,isStop[1]表示B是否走到了暂停。false表示允许通过!反之不通过! privatestaticvoidMain(string[] args) { //string input = "";//用于存储用户的输入! ShowUI(); //显示游戏名称! Console.WriteLine("请输入玩家A的姓名?"); name[0] =Console.ReadLine(); //用户输入的名称是否为空,如果为空,提示用户重新输入! while (name[0] =="") { Console.WriteLine("玩家A的姓名不能为空,请重新输入!"); name[0] =Console.ReadLine(); } Console.WriteLine("请输入玩家B的姓名?"); name[1] =Console.ReadLine(); while (name[1] ==""||name[1] ==name[0]) { if (name[1] =="") { Console.WriteLine("玩家B的姓名不能为空,请重新输入!"); } if (name[1] ==name[0]) //如果A与B重名! { Console.WriteLine("你输入的姓名与玩家A【{0}】的姓名重名!请重新输入!", name[0]); } name[1] =Console.ReadLine(); } Console.Clear(); ShowUI(); Console.WriteLine("对战开始....."); Console.WriteLine("{0}用A来表示", name[0]); Console.WriteLine("{0}用B来表示", name[1]); Console.WriteLine("如果AB在同一位置,用<>来表示"); InitialMap();//初始化地图 DrawMap();//绘制度图 Console.WriteLine("开始游戏......"); //这个循环中让玩家A和玩家B轮流掷骰子当玩家A或玩家B>=99时,则结束循环! while (playerPos[0] <99&&playerPos[1] <99) { if (isStop[0] ==false) { //玩家A掷筛子 Action(0); } else { //说明isStop[0]=true isStop[0] =false; } if (playerPos[0] >=99) { break; } if (isStop[1] ==false) { Action(1); } else { isStop[1] =false; } } //判断谁胜利谁失败! Console.Clear(); ShowUI(); if (playerPos[0] ==99) { Console.WriteLine("玩家{0}胜利了!!!!!!",name[0]); } if (playerPos[1] ==99) { Console.WriteLine("玩家{0}胜利了!!!!!!",name[1]); } Console.WriteLine("游戏结束!"); Console.ReadKey(); } /// <summary> ///玩家掷骰子的方法! /// </summary> /// <param name="playerNumber"></param> privatestaticvoidAction(intplayerNumber) { //playerNumber当中存的就是当前玩家的姓名、坐标、是否暂停这三个数组的下标 //1-playerNumber就是对方的姓名、坐标、是否暂停这三个数组的下标 // 当前为0 对方为1 // 当前为1 对方为0 //定义一个能够产生随机数的随机变量 Randomr=newRandom();//产生随机数 stringmsg="";//用于用户踩到某个关卡,所输出的话! intstemp= 0;//用于存放产生的随机数! Console.WriteLine("玩家{0}按任意键开始掷筛子.....", name[playerNumber]); //当给Console.ReadKey()传值为True时,表明用户按任意键时,屏幕不会显示按键字符。 ConsoleKeyInforec=Console.ReadKey(true); //按Control+Shift+F1走捷径!这里注意:组合剑只能是在Control、Shift、Alt这三个里面选择1||2||3个,再外加一个负键就可以!不能加多个负键! if (rec.Key==ConsoleKey.F1&&rec.Modifiers== (ConsoleModifiers.Control|ConsoleModifiers.Alt)) { stemp=20; } else { stemp=r.Next(1, 7);//产生随机整数! } Console.WriteLine("玩家{0}掷了:{1}", name[playerNumber], stemp); Console.WriteLine("请按任意键开始行动......."); Console.ReadKey(true); playerPos[playerNumber] =playerPos[playerNumber] +stemp;//注意,一旦坐标放生改变就要判断坐标是否>99或者<0 CheckPos(); if (playerPos[0] ==playerPos[1])//玩家A踩到玩家B { playerPos[1-playerNumber] =0; msg=string.Format("{0}踩到{1},{1}退回原点!", name[playerNumber], name[1-playerNumber]); } else { //判断玩家A现在的位置是否在其他关卡! switch (Map[playerPos[playerNumber]]) { case0: //普通没有效果! msg=""; break; case1: //走到了幸运轮盘 Console.Clear(); DrawMap(); Console.WriteLine("{0}走到了幸运轮盘,请选择运气!", name[playerNumber]); Console.WriteLine("1--交换位置 2--轰炸对方"); intuserSelect=ReadInt(1, 2); if (userSelect==1) { //要与对方交换位置 inttem=playerPos[0]; playerPos[0] =playerPos[1]; playerPos[1] =tem; msg=string.Format("{0}选择了与对方交换位置!", name[playerNumber]); } else { //轰炸对方 playerPos[1-playerNumber] =playerPos[1-playerNumber] -6; CheckPos(); msg=string.Format("{0}选择了轰炸对方,{1}退6格!", name[playerNumber], name[1-playerNumber]); } break; case2: //踩到了地雷 playerPos[playerNumber] =playerPos[playerNumber] -6; CheckPos(); msg=string.Format("{0}踩到了地雷退6格!", name[playerNumber]); break; case3: //暂停一次 isStop[0] =true; msg=string.Format("{0}走到红灯,下次暂停一次!", name[playerNumber]); break; case4: //时空隧道 playerPos[playerNumber] =playerPos[playerNumber] +10; CheckPos(); msg=string.Format("{0}进入时空隧道,爽死了!", name[playerNumber]); break; } } Console.Clear(); DrawMap(); if (msg!="") { Console.WriteLine(msg); } Console.WriteLine("{0}掷出了{1},行动完成!", name[playerNumber], stemp); Console.WriteLine("**********玩家A和玩家B的位置***********"); Console.WriteLine("玩家{0}的位置在{1}", name[0], playerPos[0] +1); Console.WriteLine("玩家{0}的位置在{1}", name[1], playerPos[1] +1); } /// <summary> ///用于绘制飞行棋的名称! /// </summary> privatestaticvoidShowUI() { Console.WriteLine("*****************************"); Console.WriteLine("* *"); Console.WriteLine("* 骑士飞行棋 *"); Console.WriteLine("* *"); Console.WriteLine("*****************************"); } privatestaticvoidCheckPos() { for (inti=0; i<2; i++) { if (playerPos[i] >99) { playerPos[i] =99; Console.WriteLine(""); } if (playerPos[i] <0) { playerPos[i] =0; } } } /// <summary> ///对地图中的关卡进行初始化! /// </summary> privatestaticvoidInitialMap() { //用于存储在地图中为地雷的下标 int[] luckyTurn= { 6, 23, 40, 55, 59, 83 }; //幸运轮盘 1 int[] landMine= { 5, 13, 17, 33, 38, 50, 64, 80, 94 }; //地雷 2 int[] pause= { 9, 27, 60, 93 }; //暂停的坐标 3 int[] timeTunnel= { 20, 25, 45, 63, 72, 88, 90 }; //时空隧道 4 for (inti=0; i<luckyTurn.Length; i++) { intpos=luckyTurn[i]; Map[pos] =1; } for (inti=0; i<landMine.Length; i++) { Map[landMine[i]] =2; } for (inti=0; i<pause.Length; i++) { Map[pause[i]] =3; } for (inti=0; i<timeTunnel.Length; i++) { Map[timeTunnel[i]] =4; } } /// <summary> ///获得pos坐标上应该绘制的图案! /// </summary> /// <param name="pos">要绘制的坐标</param> /// <returns></returns> privatestaticstringGetMapString(intpos) { stringresult=""; //判断A和B是否在当前要画的第i格上 if (playerPos[0] ==pos&&playerPos[1] ==pos) { //改变字符颜色! Console.ForegroundColor=ConsoleColor.Yellow; result="<>"; } elseif (playerPos[0] ==pos) { Console.ForegroundColor=ConsoleColor.Yellow; result="A"; } elseif (playerPos[1] ==pos) { Console.ForegroundColor=ConsoleColor.Yellow; result="B"; } else { switch (Map[pos]) { case0: Console.ForegroundColor=ConsoleColor.White; result="□"; break; case1: Console.ForegroundColor=ConsoleColor.Red; result="◎"; break; case2: Console.ForegroundColor=ConsoleColor.Green; result="☆"; break; case3: Console.ForegroundColor=ConsoleColor.Blue; result="▲"; break; case4: Console.ForegroundColor=ConsoleColor.DarkBlue; result="¤"; break; } } returnresult; } privatestaticvoidDrawMap() { //绘制图例: Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:¤"); //画第一行 for (inti=0; i<=29; i++) { Console.Write(GetMapString(i)); } Console.WriteLine(); //绘制第一列 for (inti=30; i<=34; i++) { //绘制29个空格! for (intj=0; j<29; j++) { Console.Write(" "); } Console.WriteLine(GetMapString(i)); } //绘制第二行 for (inti=64; i>=35; i--) { Console.Write(GetMapString(i)); } Console.WriteLine(); //绘制第二列 for (inti=65; i<=69; i++) { Console.WriteLine(GetMapString(i)); } //绘制第三行 for (inti=70; i<=99; i++) { Console.Write(GetMapString(i)); } Console.WriteLine(); //恢复字体颜色!如果最后为非白色,那么如果去掉下面这句话,后面的语句就会和最后面的字符颜色相同! Console.ResetColor(); } //只允许使用两数之间的数字! privatestaticintReadInt() { inti=ReadInt(int.MinValue, int.MaxValue); returni; } privatestaticintReadInt(intmin,intmax) { while (true) { try { intnumber=Convert.ToInt32(Console.ReadLine()); if (number<min||number>max) { Console.WriteLine("只能输入{0}到{1}之间的数,请重新输入!",min,max); continue; } returnnumber; } catch () { Console.WriteLine("只能输入数字,请重新输入!"); } } } }