using System;
using System.Collections.Generic;
using System.Text;
namespace 飞行棋
{
class Program
{
static string[] username = new string[2]; //存储玩家姓名
static int[] map = new int[100]; //存储地图
static int[] playerpos ={ 0, 0 };
static bool[] isRight ={ true, true };
static Random r = new Random();
static int step = 0;
static string msg = "";
static void Main(string[] args)
{
ShowUI(); //方法:显示游戏LOGO
UserName();
Console.Clear(); //清屏
GameState();
SetBar(); //设置地雷、暂停....在地图中的坐标
DrawMap();
Console.WriteLine("按任意键开始游戏........");
Console.ReadKey(true); //不将用户的按键显示在屏幕上
Throw();
}
#region 方法
/// <summary>
/// 显示游戏LOGO
/// </summary>
public static void ShowUI()
{
Console.WriteLine("********************************************************************");
Console.WriteLine("* *");
Console.WriteLine("* 飞 行 棋 *");
Console.WriteLine("* *");
Console.WriteLine("********************************************************************");
}
/// <summary>
/// 玩家姓名
/// </summary>
public static void UserName()
{
for (int i = 0; i < username.Length; i++)
{
while (true)
{
Console.WriteLine("请输入第{0}个玩家的姓名?", i + 1);
username[i] = Console.ReadLine();
if (i == 0)
{
if (username[i] == "")
{
Console.WriteLine("玩家姓名不能为空,请重新输入!");
continue; //当姓名为空时,执行当前while循环
}
break; //当姓名不为空时,跳出当前while循环执行for循环
}
else
{
if (username[i] == "" || username[i] == username[0])
{
Console.WriteLine("玩家姓名不能为空或重复,请重新输入!");
continue;
}
break;
}
}
}
}
/// <summary>
/// 游戏说明
/// </summary>
public static void GameState()
{
Console.WriteLine("游戏说明:");
Console.WriteLine("\t1、{0}:A表示 {1}:B表示", username[0], username[1]);
Console.WriteLine("\t2、当A和B同时在同一位置时用<>表示");
}
/// <summary>
/// 设置地雷、暂停....在地图中的坐标
/// </summary>
public static void SetBar()
{
int[] mine ={ 5, 12, 19, 25, 34, 48, 56, 63, 69, 74, 80, 94 }; //地雷
int[] stop ={ 9, 13, 24, 36, 40, 55, 68, 93 }; //暂停
int[] luck ={ 10, 29, 33, 46, 58, 70 }; //幸运轮盘
int[] time ={ 44, 65, 89, 50, 77 }; //幸运轮盘
//设置地雷在地图中的坐标
for (int i = 0; i < mine.Length; i++)
{
map[mine[i]] = 1;
}
for (int i = 0; i < stop.Length; i++)
{
map[stop[i]] = 2;
}
for (int i = 0; i < luck.Length; i++)
{
map[luck[i]] = 3;
}
for (int i = 0; i < time.Length; i++)
{
map[time[i]] = 4;
}
}
/// <summary>
/// 初始化地图
/// </summary>
public static void DrawMap()
{
Console.WriteLine("图例:〓 地雷 ◆ 暂停 ⊙ 幸运轮盘 ※ 时空隧道");
for (int i = 0; i <= 29; i++)
{
Console.Write(ReturnIco(i));
}
Console.WriteLine();
for (int i = 30; i <= 34; i++)
{
Console.WriteLine(" " + ReturnIco(i));
}
for (int i = 64; i >= 35; i--)
{
Console.Write(ReturnIco(i));
}
Console.WriteLine();
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(ReturnIco(i));
}
for (int i = 70; i <= 99; i++)
{
Console.Write(ReturnIco(i));
}
Console.WriteLine();
}
/// <summary>
/// 判断地图当前坐标的图形
/// </summary>
/// <param name="i"></param>
/// <returns>带颜色的图形</returns>
public static string ReturnIco(int i)
{
Console.ForegroundColor = ConsoleColor.Gray; //初始化为默认颜色
string result = "";
if (i == playerpos[0] && i == playerpos[1])
{
result = "<>";
}
else if (i == playerpos[0])
{
result = "A";
}
else if (i == playerpos[1])
{
result = "B";
}
else
{
switch (map[i])
{
case 0:
result = "□";
break;
case 1:
Console.ForegroundColor = ConsoleColor.Cyan; //图标颜色
result = "〓";
break;
case 2:
Console.ForegroundColor = ConsoleColor.Red;
result = "◆";
break;
case 3:
Console.ForegroundColor = ConsoleColor.DarkYellow;
result = "⊙";
break;
case 4:
Console.ForegroundColor = ConsoleColor.White;
result = "※";
break;
}
}
return result;
}
/// <summary>
/// 掷骰子
/// </summary>
public static void Throw()
{
while (playerpos[0] < 99 && playerpos[1] < 99)
{
//根据标志位判断是否暂停
if (isRight[0] == true)
{
Action(0);
}
else
{
isRight[0] = true;
}
//当玩家A坐标大于等于99时,跳出循环!游戏结束
if (playerpos[0] >= 99)
{
break;
}
if (isRight[1] == true)
{
Action(1);
}
else
{
isRight[1] = true;
}
}
Console.Clear();
if (playerpos[0] >= 99)
{
GameOver(0);
}
else
{
GameOver(1);
}
Console.ReadKey();
}
/// <summary>
/// 坐标越界判断
/// </summary>
public static void CrossBorder()
{
for (int i = 0; i < playerpos.Length; i++)
{
if (playerpos[i] >= 99)
{
playerpos[i] = 99;
}
else if (playerpos[i] <= 0)
{
playerpos[i] = 0;
}
}
}
/// <summary>
/// 当用户走到幸运轮盘时选择运气
/// </summary>
/// <param name="min">最小值</param>
/// <param name="max">最大值</param>
/// <returns>输入的值</returns>
public static int ReadInt(int min, int max)
{
int numselect;
while (true)
{
try
{
numselect = Convert.ToInt16(Console.ReadLine());
if (numselect == 1 || numselect == 2)
{
break;
}
else
{
Console.WriteLine("只能输入1或,请重新输入!");
continue;
}
}
catch
{
Console.WriteLine("只能输入数字1或2,请重新输入");
continue;
}
}
return numselect;
}
/// <summary>
/// 游戏结束
/// </summary>
/// <param name="x">玩家姓名</param>
public static void GameOver(int x)
{
Console.WriteLine("********************************************************************");
Console.WriteLine("* {0} 赢 得 胜 利 *",username[x]);
Console.WriteLine("* *");
Console.WriteLine("* *");
Console.WriteLine("* Game Over *");
Console.WriteLine("********************************************************************");
}
/// <summary>
/// 掷骰子过程
/// </summary>
public static void Action(int playnumber)
{
#region
Console.WriteLine("\"{0}\"按任意键掷骰子.......", username[playnumber]);
//Console.ReadKey(true);
//当用户按TAB键时,开启后门
ConsoleKeyInfo key = Console.ReadKey(true);
if (key.Key == ConsoleKey.Tab)
{
step = 50;
}
else
{
step = r.Next(1, 7);
}
Console.WriteLine("\"{0}\"掷出{1}", username[playnumber], step);
Console.WriteLine("******************按任意键开始行动******************");
Console.ReadKey(true);
playerpos[playnumber] = playerpos[playnumber] + step;
CrossBorder();
if (playerpos[playnumber] == playerpos[1 - playnumber])
{
playerpos[1 - playnumber] = 0;
msg = string.Format("{0}踩到了{1},{1}回到起点!", username[playnumber], username[1-playnumber]);
}
else
{
switch (map[playerpos[playnumber]])
{
case 0:
msg = "";
break;
case 1:
playerpos[playnumber] = playerpos[playnumber] - 6;
CrossBorder();
msg = string.Format("\"{0}\"踩到\"地雷\"退六格", username[playnumber]);
break;
case 2:
Console.WriteLine("\"{0}\"踩到\"暂停\",暂停一次", username[playnumber]);
isRight[playnumber] = false;
msg = string.Format("\"{0}\"踩到\"暂停\",暂停一次", username[playnumber]);
break;
case 3:
Console.WriteLine("\"{0}\"踩到幸运轮盘,请选择运气", username[playnumber]);
Console.WriteLine("1、 轰炸对方 2、 交换位置");
if (ReadInt(1, 2) == 1)
{
playerpos[1-playnumber] = playerpos[1-playnumber] - 6;
CrossBorder();
msg = string.Format("\"{0}\"选择轰炸对方,{1}退六格", username[playnumber], username[1 - playnumber]);
}
else
{
int temp = playerpos[playnumber];
playerpos[playnumber] = playerpos[1 - playnumber];
playerpos[1 - playnumber] = temp;
CrossBorder();
msg = string.Format("\"{0}\"选择了交换位置,\"乾坤大挪移\".......打完收功!", username[playnumber]);
}
break;
case 4:
playerpos[playnumber] = playerpos[playnumber] + 10;
CrossBorder();
msg = string.Format("\"{0}\"掉入\"时空隧道\"飞跃十格", username[playnumber]);
break;
}
}
Console.Clear();
DrawMap();
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("******************行 动 完 成******************");
Console.WriteLine("{0}目前在地图{1}方位", username[0], playerpos[0]);
Console.WriteLine("{0}目前在地图{1}方位", username[1], playerpos[1]);
#endregion
}
#endregion
}
}