2.绘制图形时,我们是一行一行的绘制图形,找到每行的开始编号和结束编号,通过遍历map数组进行绘制,绘制的主要逻辑代码如下:
在绘制过程中,我们应先考虑玩家A或B的位置,然后根据关卡进行输出结果:
/// <summary> /// 设置每个位置的图形 /// </summary> /// <param name="i"></param> /// <returns></returns> static string GetMapString(int i) { string result = ""; if (playerPos[0] == i && playerPos[1] == i) { Console.ForegroundColor = ConsoleColor.DarkCyan; result = "<>"; } else if (playerPos[0] == i) { Console.ForegroundColor = ConsoleColor.DarkCyan; result = "A"; } else if (playerPos[1] == i) { Console.ForegroundColor = ConsoleColor.DarkCyan; result = "B"; } else { switch (map[i]) { case 0: Console.ForegroundColor = ConsoleColor.White; result = "□"; break; case 1: Console.ForegroundColor = ConsoleColor.Green; result = "◎"; break; case 2: Console.ForegroundColor = ConsoleColor.Red; result = "★"; break; case 3: Console.ForegroundColor = ConsoleColor.Yellow; result = "▲"; break; case 4: Console.ForegroundColor = ConsoleColor.Magenta; result = "卐"; break; } } return result; } |
3.最后要考虑的是玩家A和B的行动如何进行代码的实现,
具体的代码实现如下:
/// <summary> /// 执行AB动作 /// </summary> /// <param name="playernumber"></param> static void Action(int playernumber) { #region 玩家掷骰子 Random rand = new Random(); //产生随机数 int step = 0; //存储临时产生的随机数 string msg = ""; //关卡提示消息 Console.WriteLine("{0}按任意键开始掷骰子", players[playernumber]); ConsoleKeyInfo rec = Console.ReadKey(true); step = rand.Next(1, 7); msg = ""; if (rec.Key == ConsoleKey.Backspace && (rec.Modifiers == ConsoleModifiers.Shift|rec.Modifiers == ConsoleModifiers.Control)) { ConsoleKeyInfo rec2 = Console.ReadKey(true); if (rec2.Key == ConsoleKey.Tab) { step = 30; } } Console.WriteLine("{0}掷出了{1}", players[playernumber], step); Console.WriteLine("按任意键进行行动........"); Console.ReadKey(true); playerPos[playernumber] = playerPos[playernumber] + step; CheckPos(); //玩家A踩到了玩家B,B返回原点 if (playerPos[playernumber] == playerPos[1 - playernumber]) { playerPos[1 - playernumber] = 0; msg = string.Format("{0}踩到了{1},{1}退回原点", players[playernumber], players[1 - playernumber]); } else //没踩到的时候判断是否有其他的关卡 { switch (map[playerPos[playernumber]]) { case 0: //普通 break; case 1: //幸运轮盘 Console.Clear(); DrawMap(); Console.WriteLine("你走到了幸运轮盘,请选择运气:"); Console.WriteLine("1---交换位置 2---轰炸对方"); int userSelect = ReadInt(1, 2); if (userSelect == 1) { playerPos[playernumber] = playerPos[playernumber] - playerPos[1 - playernumber]; playerPos[1 - playernumber] = playerPos[1 - playernumber] + playerPos[playernumber]; playerPos[playernumber] = playerPos[1 - playernumber] - playerPos[playernumber]; msg = string.Format("{0}选择了交换位置", players[playernumber]); } else { //轰炸 playerPos[1] -= 6; msg = string.Format("{0}轰炸了{1},{1}退6格", players[playernumber], players[1 - playernumber]); } break; case 2: //地雷 playerPos[0] -= 6; msg = string.Format("{0}踩到了地雷,{0}退6格", players[playernumber]); break; case 3: //暂停 isStop[0] = true; msg = string.Format("{0}走到了暂停", players[playernumber]); break; case 4: //时空隧道 playerPos[0] += 10; msg = string.Format("{0}进入时空隧道,爽死了,{0}前进10格", players[playernumber]); break; } } CheckPos(); Console.Clear(); DrawMap(); Console.WriteLine(); if (msg != "") { Console.WriteLine(msg); } Console.WriteLine("\n{0}掷出了{1},行动完成", players[playernumber], step); Console.WriteLine("{0}的位置为{1}", players[playernumber], playerPos[playernumber] + 1); Console.WriteLine("{0}的位置为{1}", players[1 - playernumber], playerPos[1 - playernumber] + 1); #endregion } |