using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NetFramework_简易飞行棋游戏
{
class Program
{
// -定义地图数组 - 总共100个元素
public static int[] Maps = new int[100];
// -定义玩家数组 - 用来记录玩家坐标,总共2个元素
public static int[] PlayerPos = new int[2];
// -定义玩家姓名数组 - 用来记录玩家姓名,总共2个元素
public static string[] PlayerNames = new string[2];
// -定义玩家状态,
public static bool[] Flags = new bool[2];
static void Main(string[] args)
{
/* 打印游戏头 */
GameShow();
/* 输入玩家姓名 */
InputPlayerNames();
// -请屏
Console.Clear();
GameShow();
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("{0}的士兵是用=> A 表示", PlayerNames[0]);
Console.WriteLine("{0}的士兵是用=> B 表示", PlayerNames[1]);
/* 初始化地图 */
InitailMap();
/* 画地图 */
DrawMap();
/* - 玩游戏的规则:
* - 如果玩家A猜到了玩家B,玩家B退6格。
* - 如果玩家踩到了地雷,退6格
* - 如果玩家踩到了时空隧道,进10格
* - 如果玩家踩到了幸运转盘:选择1交换位置,选择2轰炸对方是对方退6格
* - 如果玩家踩到了暂停:暂停一个回合
* - 如果玩家踩到了方块,什么都不干
*/
while (PlayerPos[0]<99 && PlayerPos[1]<99)
{
if(Flags[0] == false)
{
PlayGame(0);
}
else
{
Flags[0] = false;
}
if(PlayerPos[0]>99)
{
Console.WriteLine("玩家=>{0}无耻的赢了玩家=>{1}",PlayerNames[0],PlayerNames[1]);
break;
}
if(Flags[1] == false)
{
PlayGame(1);
}
else
{
Flags[1] = false;
}
if (PlayerPos[1] > 99)
{
Console.WriteLine("玩家=>{0}无耻的赢了玩家=>{1}", PlayerNames[1], PlayerNames[0]);
break;
}
} // -while - 结束标记
Console.ReadKey();
}
/* 打印游戏头 - 函数:GameShow() */
private static void GameShow()
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("*************************************************");
Console.WriteLine("*************************************************");
Console.WriteLine("*************************************************");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("********* ShaXiang - 简易的飞行棋游戏 *********");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("*************************************************");
Console.WriteLine("*************************************************");
Console.WriteLine("*************************************************");
}
/* 初始化地图 - 函数:GameShow() */
private static void InitailMap()
{
int i = 0;
// -数组初始化
for (i = 0; i < Maps.Length; i++) // -数组数值为0时,棋盘代表 - □
{
Maps[i] = 0;
}
// -设置幸运轮盘
int[] luckyTurn = { 6, 23, 40, 55, 69, 83 }; // -数组数值为1时,幸运轮盘代表 - ♂
for (i = 0; i < luckyTurn.Length; i++)
{
int index = luckyTurn[i];
Maps[index] = 1;
}
// -设置地雷
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 }; // -数组数值为2时,地雷代表 - ★
for (i = 0; i < landMine.Length; i++)
{
int index = landMine[i];
Maps[index] = 2;
}
// -设置暂停
int[] pause = { 9, 29, 60, 93 }; // -数组数值为3时,暂停代表 - ▽
for (i = 0; i < pause.Length; i++)
{
int index = pause[i];
Maps[index] = 3;
}
// -设置时空隧道
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 }; // -数组数值为4时,时空隧道代表 - 卍
for (i = 0; i < timeTunnel.Length; i++)
{
int index = timeTunnel[i];
Maps[index] = 4;
}
}
/* 画地图 - 函数:DrawMap() */
private static void DrawMap()
{
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("图例提示:棋盘代表 - □ 幸运轮盘代表 - ♂ 地雷代表 - ★ 暂停代表 - ▽ 时空隧道代表 - 卍");
Console.WriteLine();
int i = 0;
// -打印第一横行
for(i=0; i<30; i++)
{
DrawMapJudge(i);
}
Console.WriteLine(); // -换行
// -打印第一竖行
for(i=30; i<35; i++)
{
for (int j = 0; j < 30-1; j++)
{
Console.Write(" ");
}
DrawMapJudge(i);
Console.WriteLine(); // -换行
}
// -打印第二横行
for (i = 64; i > 34; i--)
{
DrawMapJudge(i);
}
Console.WriteLine(); // -换行
// -打印第二竖行
for (i = 65; i < 70; i++)
{
DrawMapJudge(i);
Console.WriteLine();
}
// -打印第三横行
for (i = 70; i < 100; i++)
{
DrawMapJudge(i);
}
Console.WriteLine(); // -换行
} // 方法
/* 画地图引用判断 - 函数:DrawMapJudge() */
private static void DrawMapJudge(int i)
{
if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == i)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("<>");
}
else if (PlayerPos[0] == i)
{
Console.Write("A");
}
else if (PlayerPos[1] == i)
{
Console.Write("B");
}
else
{
switch (Maps[i])
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
Console.Write("□");
break;
case 1:
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write("♂");
break;
case 2:
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("★");
break;
case 3:
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.Write("▽");
break;
case 4:
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("卍");
break;
} // switch
} // if else
}
/* 输入玩家姓名 - 函数:InputPlayerNames() */
private static void InputPlayerNames()
{
Console.WriteLine("请输入玩家A的姓名=>");
PlayerNames[0] = Console.ReadLine();
while (PlayerNames[0] == "")
{
Console.WriteLine("提示:玩家A的姓名不能为空,请重新输入=>");
PlayerNames[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名=>");
PlayerNames[1] = Console.ReadLine();
while (PlayerNames[1] == "" || PlayerNames[1] == PlayerNames[0])
{
if (PlayerNames[1] == "")
{
Console.WriteLine("提示:玩家B的姓名不能为空,请重新输入=>");
PlayerNames[1] = Console.ReadLine();
}
else
{
Console.WriteLine("提示:玩家B的姓名不能与玩家A的姓名相同,请重新输入=>");
PlayerNames[1] = Console.ReadLine();
}
}
}
/* 玩游戏 - 函数:PlayGame() */
private static void PlayGame(int playerNumber)
{
Random r = new Random();
int rNumber = r.Next(1, 7);
Console.WriteLine("玩家=>{0}:按下任意键开始掷骰子", PlayerNames[playerNumber]);
Console.ReadKey(true);
Console.WriteLine("玩家=>{0}:掷出了{1}", PlayerNames[playerNumber], rNumber);
Console.ReadKey(true);
PlayerPos[playerNumber] += rNumber;
Console.WriteLine("玩家=>{0}:按任意键开始行动", PlayerNames[playerNumber]);
Console.ReadKey(true);
Console.WriteLine("玩家=>{0}:行动完成", PlayerNames[playerNumber]);
Console.ReadKey(true);
// -玩家有可能踩到另一个玩家,或者:踩到方块、踩到幸运轮盘、踩到地雷、踩到暂停、踩到时空隧道
if (PlayerPos[playerNumber] == PlayerPos[1 - playerNumber])
{
Console.WriteLine("玩家=>{0}踩到了玩家=>{1}:玩家=>{2}后退6格", PlayerNames[playerNumber], PlayerNames[1 - playerNumber], PlayerNames[1 - playerNumber]);
Console.ReadKey(true);
PlayerPos[1 - playerNumber] -= 6;
Console.ReadKey(true);
}
else // -玩家踩到关卡用选择判断语句。
{
switch (Maps[PlayerPos[playerNumber]])
{
case 0: // -玩家踩到方块,没有任何事情发生,游戏继续。
Console.WriteLine("玩家=>{0}踩到了方块,安全游戏继续", PlayerNames[playerNumber]);
Console.ReadKey(true);
break;
case 1:
Console.WriteLine("玩家=>{0}c踩到了幸运轮盘 请选择=> 1->与玩家=>{1}交换位置 2->轰炸玩家=>{2}", PlayerNames[playerNumber], PlayerNames[1 - playerNumber], PlayerNames[1 - playerNumber]);
string input = Console.ReadLine();
while (true)
{
if (input == "1")
{
Console.WriteLine("玩家=>{0}选择与玩家=>{1}交换位置", PlayerNames[playerNumber], PlayerNames[1 - playerNumber]);
Console.ReadKey(true);
int temp = PlayerPos[playerNumber];
PlayerPos[playerNumber] = PlayerPos[1 - playerNumber];
PlayerPos[1 - playerNumber] = temp;
Console.WriteLine("交换完成!按任意键继续!");
Console.ReadKey(true);
break;
}
else if (input == "2")
{
Console.WriteLine("玩家=>{0}选择轰炸玩家=>{1},玩家=>{2}后退6格", PlayerNames[playerNumber], PlayerNames[1 - playerNumber], PlayerNames[1 - playerNumber]);
Console.ReadKey(true);
PlayerPos[1 - playerNumber] -= 6;
Console.WriteLine("玩家=>{0}已经后退6格", PlayerNames[1 - playerNumber]);
Console.ReadKey(true);
break;
}
else
{
Console.WriteLine("只能输入1或者2=> 1->交换位置 2->轰炸对方");
input = Console.ReadLine();
} // -if else - 结束语句
} // -while - 结束语句
break;
case 2:
Console.WriteLine("玩家=>{0}踩到了地雷,后退6格", PlayerNames[playerNumber]);
Console.ReadKey(true);
PlayerPos[playerNumber] -= 6;
break;
case 3:
Console.WriteLine("玩家=>{0}踩到了暂停,暂停一轮游戏", PlayerNames[playerNumber]);
Console.ReadKey(true);
Flags[playerNumber] = true;
break;
case 4:
Console.WriteLine("玩家=>{0}踩到了时空隧道,前进10格", PlayerNames[playerNumber]);
Console.ReadKey(true);
PlayerPos[playerNumber] += 10;
break;
} // -switch - 结束语句
} // -if else - 结束标记
ChangePos();
Console.Clear();
DrawMap();
}
/* 坐标出界限制 - 函数:ChangePos() */
private static void ChangePos()
{
if (PlayerPos[0]<0)
{
PlayerPos[0] = 0;
}
else if (PlayerPos[0]>99)
{
PlayerPos[0] = 99;
}
if (PlayerPos[1] < 0)
{
PlayerPos[1] = 0;
}
else if (PlayerPos[1] > 99)
{
PlayerPos[1] = 99;
}
}
}
}