代码实现:
namespace Flying_Chess
{
internal class Program
{
public static int[] Map = new int[100]; //创建游戏地图大小
public static int[] PlayerNumber = new int[2]; //记录玩家索引坐标
public static string[] Player = new string[2]; //存放玩家姓名
static void Main(string[] args)
{
GameHead();
IsSame();
Console.Clear(); //按回车键盘,清除界面所有元素
InitMap();
CreateMap();
Console.ReadKey(true); //暂停,按任意键继续
while (true)
{
Console.WriteLine($"玩家{Player[0]}开始投骰子。");
Console.ReadKey(true);
Random random = new Random();
int sum = random.Next(1, 7);
Console.WriteLine($"玩家{Player[0]}投了{sum}点,玩家{Player[0]}前进{sum}格");
PlayerNumber[0] += sum;
if (PlayerNumber[0] >= 99)
{
PlayerNumber[0] = 99;
Console.Clear();
CreateMap();
Console.WriteLine($"玩家{Player[0]}赢得比赛");
Console.ReadKey(true);
break;
}
GameRules(0);
Console.WriteLine($"玩家{Player[1]}开始投骰子。");
Console.ReadKey(true);
random = new Random();
sum = random.Next(1, 7);
Console.WriteLine($"玩家{Player[1]}投了{sum}点,玩家{Player[1]}前进{sum}格");
PlayerNumber[1] += sum;
if (PlayerNumber[1] >= 99)
{
PlayerNumber[1] = 99;
Console.Clear();
CreateMap();
Console.WriteLine($"玩家{Player[1]}赢得比赛");
Console.ReadKey(true);
break;
}
GameRules(1);
}
}
/// <summary>
/// 游戏头
/// </summary>
public static void GameHead()
{
//更改输出结果的背景色
//Console.BackgroundColor= ConsoleColor.White;
//更改输出结果的前景色
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("*********************");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("*********************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*********************");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(" *** FlyingChess ***");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*********************");
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("*********************");
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("*********************");
Console.ForegroundColor = ConsoleColor.White;
}
/// <summary>
/// 加载游戏地图道具位置
/// </summary>
public static void InitMap()
{
//通过数字来标记地图上的情况
//1,表示前进5格
//2,表示后退5格
//3,表示暂停一回合
//0,表示正常地方
#region 前进
int[] Forward = new int[] { 2, 5, 10, 23, 54, 78, 98 };
for (int i = 0; i < Forward.Length; i++)
{
int index = Forward[i];
Map[index] = 1;
}
#endregion
#region 后退
int[] Backwark = new int[] { 4, 6, 45, 68, 99 };
for (int i = 0; i < Backwark.Length; i++)
{
int index = Backwark[i];
Map[index] = 2;
}
#endregion
#region 暂停
int[] Stop = new int[] { 1, 3, 66, 77, 88 };
for (int i = 0; i < Stop.Length; i++)
{
int index = Stop[i];
Map[index] = 3;
}
#endregion
}
/// <summary>
/// 初始化整张地图
/// </summary>
public static void CreateMap()
{
//地图生成规则
//1.玩家1与玩家2在同一格时,用%展示
//2.玩家1在地图上用1表示,玩家2在地图上用2表示
//3.前进用F表示,后退用B表示,暂停用S表示,正常位置用·表示,终点用G表示
Console.WriteLine($"玩家A:{Player[0]} 玩家B:{Player[1]}");
Console.WriteLine("前进:F,后退:B,暂停:S,正常:·,终点:G");
//第一横行
for (int i = 0; i < 30; i++)
{
string p = InitPic(i);
Console.Write(p);
}
Console.WriteLine();
//第一竖列
for (int i = 30; i < 35; i++)
{
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
string p = InitPic(i);
Console.WriteLine(p);
}
//第二横行
for (int i = 64; i >= 35; i--)
{
string p = InitPic(i);
Console.Write(p);
}
Console.WriteLine();
//第二竖列
for (int i = 65; i < 70; i++)
{
string p = InitPic(i);
Console.WriteLine(p);
}
//第三横行
for (int i = 70; i < 100; i++)
{
string p = InitPic(i);
Console.Write(p);
if (i == 99)
{
Console.WriteLine("G");
}
}
}
/// <summary>
/// 加载图标
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public static string InitPic(int i)
{
string p = "";
if (PlayerNumber[0] == PlayerNumber[1] && PlayerNumber[0] == i)
{
p = "%";
}
else if (PlayerNumber[0] == i)
{
p = "1";
}
else if (PlayerNumber[1] == i)
{
p = "2";
}
else
{
switch (Map[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.Green;
p = "·";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Red;
p = "F";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Yellow;
p = "B";
break;
case 3:
Console.ForegroundColor = ConsoleColor.White;
p = "S";
break;
}
}
return p;
}
/// <summary>
/// 判断玩家A与玩家B姓名是否相同
/// </summary>
public static void IsSame()
{
while (true)
{
Console.Write("请输入玩家1的姓名:");
Player[0] = Console.ReadLine();
//玩家1姓名不能为空
while (Player[0] == "")
{
Console.WriteLine("玩家1的姓名不能为空,请重新输入。");
Console.Write("请输入玩家1的姓名:");
Player[0] = Console.ReadLine();
}
Console.Write("请输入玩家2的姓名:");
Player[1] = Console.ReadLine();
//玩家2姓名不能为空
while (Player[1] == "")
{
Console.WriteLine("玩家2的姓名不能为空,请重新输入。");
Console.Write("请输入玩家2的姓名:");
Player[1] = Console.ReadLine();
}
if (Player[0] == Player[1])
{
Console.WriteLine("玩家1与玩家2姓名相同,请重新输入。");
continue;
}
else
{
break;
}
}
}
/// <summary>
/// 游戏规则
/// </summary>
public static void GameRules(int position)
{
//1.当一名玩家踩到另一名玩家时,被踩到的玩家退两格
if (PlayerNumber[position] == PlayerNumber[1 - position])
{
Console.WriteLine($"玩家{Player[position]}踩到了玩家{Player[1 - position]},玩家{Player[1 - position]}后退两格");
Console.ReadKey(true);
PlayerNumber[1 - position] -= 2;
if (PlayerNumber[1 - position]<0)
{
PlayerNumber[1 - position] = 0;
}
Console.WriteLine($"玩家{Player[position]}该回合结束。");
Console.ReadKey(true);
}
else
{
//2.玩家踩到道具时,根据道具效果做出动作,需注意奖励或惩罚时再次触发道具,将免疫本次效果。
switch (Map[PlayerNumber[position]])
{
case 0:
Console.WriteLine($"玩家{Player[position]}该回合结束。");
Console.ReadKey(true);
break;
case 1:
Console.WriteLine($"玩家{Player[position]}踩到加速,前进5格");
PlayerNumber[position] += 5;
if (PlayerNumber[position]>=99)
{
PlayerNumber[position] = 99;
Console.Clear();
CreateMap();
Console.WriteLine($"玩家{Player[position]}赢得比赛");
}
Console.ReadKey(true);
break;
case 2:
Console.WriteLine($"玩家{Player[position]}踩到陷阱,后退5格");
PlayerNumber[position] -= 5;
if (PlayerNumber[position] < 0)
{
PlayerNumber[position] = 0;
}
Console.ReadKey(true);
break;
case 3:
Console.WriteLine($"玩家{Player[position]}跳进牢笼,暂停一回合。");
Console.ReadKey(true);
Console.WriteLine($"玩家{Player[1 - position]}进入奖励回合,请投骰子。");
Console.ReadKey(true);
Random random = new Random();
int sum = random.Next(1, 7);
Console.WriteLine($"玩家{Player[1 - position]}投了{sum}点,玩家{Player[1 - position]}前进{sum}格");
PlayerNumber[1 - position] += sum;
if (PlayerNumber[1 - position]>=99)
{
PlayerNumber[1 - position] = 99;
Console.Clear();
CreateMap();
Console.WriteLine($"玩家{Player[1 - position]}赢得比赛");
break;
}
Console.WriteLine($"玩家{Player[1 - position]}奖励回合结束");
Console.ReadKey(true);
break;
}
Console.Clear();
CreateMap();
}
}
}
}