直接贴代码
class Program
{
static int[] Maps = new int[100];
static int[] PlayerPos = new int[2];//玩家A,B的坐标
static string[] PlayNames = new string[2];//玩家A,B的姓名
static bool[] Flag = new bool[2];//两个玩家的标记
static void Main(string[] args)
{
GameShow();
#region 输入玩家姓名
Console.WriteLine("请输入玩家A的姓名");
PlayNames[0] = Console.ReadLine();
while (PlayNames[0] == " ")
{
Console.WriteLine("玩家A姓名不能为空,请重新输入");
PlayNames[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名");
PlayNames[1] = Console.ReadLine();
while(PlayNames[1] == " " || PlayNames[1] == PlayNames[0])
{
if (PlayNames[1] == " ")
{
Console.WriteLine("玩家B的姓名不能为空,请重新输入");
}
else
{
Console.WriteLine("玩家B的姓名不能和玩家A的姓名相同,请重新输入");
}
PlayNames[1] = Console.ReadLine();
}
#endregion
//此时不需要显示哪个士兵 需要清屏
Console.Clear();
GameShow();
Console.WriteLine("{0}的士兵用A表示", PlayNames[0]);
Console.WriteLine("{0}的士兵用B表示", PlayNames[1]);
InitailMap();
DrawMap();
//当玩家A和玩家B没有一个人在终点时 ,两个玩家呀不停的玩游戏
while (PlayerPos[0]< 99 && PlayerPos[1]<99)
{
if (Flag[0] == false)
{
PlayGame(0);
}
else
{
Flag[0] = false;//如果不写这个 如果第一次暂停 将永远玩不了游戏
}
if (PlayerPos[0]>=99)
{
Console.WriteLine("玩家{0}赢了玩家{1}",PlayNames[0],PlayNames[1]);
}
if (Flag[1] == false)
{
PlayGame(1);
}
else
{
Flag[1] = false;
}
if (PlayerPos[1] >= 99)
{
Console.WriteLine("玩家{0}赢了玩家{1}", PlayNames[1], PlayNames[0]);
}
}
Console.ReadKey();
}
/// <summary>
/// 画游戏头
/// </summary>
public static void GameShow()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("******************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("******************************");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("*********dotnet飞行棋*********");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("******************************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("******************************");
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("******************************");
}
public static void InitailMap()
{
//0代表方块 1代表幸运轮盘 2代表地雷 3代表暂停 4代表时空隧道 根据这个来画图
int[] luckyturn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
for (int i = 0; i < luckyturn.Length; i++)
{
//var index = luckyturn[i];
Maps[luckyturn[i]] = 1;
}
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
for (int i = 0; i < landMine.Length; i++)
{
Maps[landMine[i]] = 2;
}
int[] pause = { 9, 27, 60, 93 };//暂停
for (int i = 0; i < pause.Length; i++)
{
Maps[pause[i]] = 3;
}
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道
for (int i = 0; i < timeTunnel.Length; i++)
{
Maps[timeTunnel[i]] = 3;
}
}
public static void DrawMap()
{
Console.WriteLine("图例:幸运轮盘◎ 地雷☆ 暂停△ 时光隧道卍");
#region 第一横行
for (int i = 0; i < 30; i++)
{
Console.Write(DrawStringMap(i));
}
Console.WriteLine();
#endregion
#region 第二竖行
for (int i = 30; i < 36; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
Console.Write(DrawStringMap(i));
Console.WriteLine();
}
#endregion
#region 第三横行
for (int i = 64; i >=35; i--)
{
Console.Write(DrawStringMap(i));
}
Console.WriteLine();
#endregion
#region 第四竖行
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(DrawStringMap(i));
}
#endregion
#region 第五横行
for (int i = 70; i <=99; i++)
{
Console.Write(DrawStringMap(i));
}
#endregion
Console.WriteLine();//画完地图需要换行 使其光标在下一行
}
public static string DrawStringMap(int i)
{
string str = "";
//先画A B人(用数组存) 位置相同且在地图上
//PlayerPos[0]代表A,PlayerPos[1]代表B
if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == i)
{
str= "<>";
}
else if (PlayerPos[0] == i)
{
str = "A";
}
else if (PlayerPos[1] == i)
{
str = "B";
}
else
{
switch (Maps[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.Red;
str = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Yellow;
str = "◎";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Green;
str = "☆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.Blue;
str = "△";
break;
case 4:
Console.ForegroundColor = ConsoleColor.Cyan;
str = "卍";
break;
default:
break;
}
}
return str;
}
public static void PlayGame(int playNumber)
{
Random random = new Random();
int r = random.Next(1,7);
Console.WriteLine("玩家{0}按任意键开始掷骰子", PlayNames[playNumber]);
Console.ReadKey(true);
Console.WriteLine("玩家{0}掷出了{1}", PlayNames[playNumber],r);
PlayerPos[playNumber] += r;
Console.WriteLine("玩家{0}按任意键开始行动", PlayNames[playNumber]);
Console.ReadKey(true);
Console.WriteLine("玩家{0}行动完了", PlayNames[playNumber]);
Console.ReadKey(true);
//游戏规则 玩家A可能踩到玩家B 玩家B退6格 也可能踩到方块 幸运轮盘 地雷 暂停 时空隧道
if (PlayerPos[playNumber] == PlayerPos[1- playNumber])
{
Console.WriteLine("玩家{0}踩到了玩家{1},玩家{1}退6格", PlayNames[playNumber], PlayNames[1- playNumber], PlayNames[1- playNumber]);
PlayerPos[1- playNumber] -= 6;
Console.ReadKey(true);
}
else
{
switch (Maps[PlayerPos[playNumber]])
{
case 0://方块
Console.WriteLine("玩家{0}踩到了方块,安全", PlayNames[playNumber]);
break;
case 1://幸运轮盘
Console.WriteLine("玩家{0}踩到了幸运轮盘 按1交换位置 按2轰炸对象 使对方退6格", PlayNames[playNumber]);
string input = Console.ReadLine();
while (true)
{
if (input == "1")
{
Console.WriteLine("玩家{0}选择与玩家{1}交换位置", PlayNames[playNumber], PlayNames[1- playNumber]);
var temp = PlayerPos[playNumber];
PlayerPos[playNumber] = PlayerPos[1- playNumber];
PlayerPos[1- playNumber] = temp;
Console.WriteLine("交换完成,请按任意键继续游戏");
Console.ReadKey(true);
break;
}
else if (input == "2")
{
Console.WriteLine("玩家{0}选择轰炸玩家{1},使玩家{2}退6格", PlayNames[playNumber], PlayNames[1- playNumber], PlayNames[1- playNumber]);
PlayerPos[1- playNumber] -= 6;
Console.WriteLine("玩家{0}退了6格", PlayNames[1- playNumber]);
Console.ReadKey(true);
break;
}
else
{
Console.WriteLine("玩家{0}重新输入1或2 ,按1交换位置 按2轰炸对象 使对方退6格", PlayNames[playNumber]);
input = Console.ReadLine();
}
}
break;
case 2:
Console.WriteLine("玩家{0}踩到了地雷,退6格", PlayNames[playNumber]);
PlayerPos[playNumber] -= 6;
Console.ReadKey(true);
break;
case 3:
Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", PlayNames[playNumber]);
Flag[playNumber] = true;
Console.ReadKey(true);
break;
case 4:
Console.WriteLine("玩家{0}踩到了时空隧道,前进10格", PlayNames[playNumber]);
PlayerPos[playNumber] += 10;
Console.ReadKey(true);
break;
}
}
ChangePos();//判断玩家坐标时
Console.Clear();
DrawMap();
}
/// <summary>
/// 当玩家坐标改变的时候调用
/// </summary>
/// <param name="playNumber"></param>
public static void ChangePos()
{
if (PlayerPos[0] <0)
{
PlayerPos[0] = 0;
}
if (PlayerPos[0] >99)
{
PlayerPos[0] = 99;
}
if (PlayerPos[1] < 0)
{
PlayerPos[1] = 0;
}
if (PlayerPos[1] > 99)
{
PlayerPos[1] = 99;
}
}
}