- 飞行器代码如下:
namespace棋士飞行棋
{
internalclassProgram
{
//在下面的数组存储我们游戏地图的各个关卡
//数组下表为0的元素对应地图上的第一格,下标为1的元素代表地图上的第2格.....下标为n的元素对应地图上的第n+1格!
//在数组中用 1:表示幸运轮盘◎
// 2:地雷☆
// 3:暂停▲
// 4:时空隧道¤
// 0:表示普通□
privatestaticint[] Map=newint[100];
privatestaticint[] playerPos= { 0, 0 }; //playerPos[0]存玩家A的下标!playerPos[1]存玩家B的下标!
privatestaticstring[] name=newstring[2]; //name[0]存玩家a的姓名,name[1]存玩家b的姓名!
privatestaticbool[] isStop= { false, false };//isStop[0]表示A是否走到了暂停,isStop[1]表示B是否走到了暂停。false表示允许通过!反之不通过!
privatestaticvoidMain(string[] args)
{
//string input = "";//用于存储用户的输入!
ShowUI(); //显示游戏名称!
Console.WriteLine("请输入玩家A的姓名?");
name[0] =Console.ReadLine();
//用户输入的名称是否为空,如果为空,提示用户重新输入!
while (name[0] =="")
{
Console.WriteLine("玩家A的姓名不能为空,请重新输入!");
name[0] =Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名?");
name[1] =Console.ReadLine();
while (name[1] ==""||name[1] ==name[0])
{
if (name[1] =="")
{
Console.WriteLine("玩家B的姓名不能为空,请重新输入!");
}
if (name[1] ==name[0]) //如果A与B重名!
{
Console.WriteLine("你输入的姓名与玩家A【{0}】的姓名重名!请重新输入!", name[0]);
}
name[1] =Console.ReadLine();
}
Console.Clear();
ShowUI();
Console.WriteLine("对战开始.....");
Console.WriteLine("{0}用A来表示", name[0]);
Console.WriteLine("{0}用B来表示", name[1]);
Console.WriteLine("如果AB在同一位置,用<>来表示");
InitialMap();//初始化地图
DrawMap();//绘制度图
Console.WriteLine("开始游戏......");
//这个循环中让玩家A和玩家B轮流掷骰子当玩家A或玩家B>=99时,则结束循环!
while (playerPos[0] <99&&playerPos[1] <99)
{
if (isStop[0] ==false)
{
//玩家A掷筛子
Action(0);
}
else
{
//说明isStop[0]=true
isStop[0] =false;
}
if (playerPos[0] >=99)
{
break;
}
if (isStop[1] ==false)
{
Action(1);
}
else
{
isStop[1] =false;
}
}
//判断谁胜利谁失败!
Console.Clear();
ShowUI();
if (playerPos[0] ==99)
{
Console.WriteLine("玩家{0}胜利了!!!!!!",name[0]);
}
if (playerPos[1] ==99)
{
Console.WriteLine("玩家{0}胜利了!!!!!!",name[1]);
}
Console.WriteLine("游戏结束!");
Console.ReadKey();
}
/// <summary>
///玩家掷骰子的方法!
/// </summary>
/// <param name="playerNumber"></param>
privatestaticvoidAction(intplayerNumber)
{
//playerNumber当中存的就是当前玩家的姓名、坐标、是否暂停这三个数组的下标
//1-playerNumber就是对方的姓名、坐标、是否暂停这三个数组的下标
// 当前为0 对方为1
// 当前为1 对方为0
//定义一个能够产生随机数的随机变量
Randomr=newRandom();//产生随机数
stringmsg="";//用于用户踩到某个关卡,所输出的话!
intstemp= 0;//用于存放产生的随机数!
Console.WriteLine("玩家{0}按任意键开始掷筛子.....", name[playerNumber]);
//当给Console.ReadKey()传值为True时,表明用户按任意键时,屏幕不会显示按键字符。
ConsoleKeyInforec=Console.ReadKey(true);
//按Control+Shift+F1走捷径!这里注意:组合剑只能是在Control、Shift、Alt这三个里面选择1||2||3个,再外加一个负键就可以!不能加多个负键!
if (rec.Key==ConsoleKey.F1&&rec.Modifiers== (ConsoleModifiers.Control|ConsoleModifiers.Alt))
{
stemp=20;
}
else
{
stemp=r.Next(1, 7);//产生随机整数!
}
Console.WriteLine("玩家{0}掷了:{1}", name[playerNumber], stemp);
Console.WriteLine("请按任意键开始行动.......");
Console.ReadKey(true);
playerPos[playerNumber] =playerPos[playerNumber] +stemp;//注意,一旦坐标放生改变就要判断坐标是否>99或者<0
CheckPos();
if (playerPos[0] ==playerPos[1])//玩家A踩到玩家B
{
playerPos[1-playerNumber] =0;
msg=string.Format("{0}踩到{1},{1}退回原点!", name[playerNumber], name[1-playerNumber]);
}
else
{
//判断玩家A现在的位置是否在其他关卡!
switch (Map[playerPos[playerNumber]])
{
case0:
//普通没有效果!
msg="";
break;
case1:
//走到了幸运轮盘
Console.Clear();
DrawMap();
Console.WriteLine("{0}走到了幸运轮盘,请选择运气!", name[playerNumber]);
Console.WriteLine("1--交换位置 2--轰炸对方");
intuserSelect=ReadInt(1, 2);
if (userSelect==1)
{
//要与对方交换位置
inttem=playerPos[0];
playerPos[0] =playerPos[1];
playerPos[1] =tem;
msg=string.Format("{0}选择了与对方交换位置!", name[playerNumber]);
}
else
{
//轰炸对方
playerPos[1-playerNumber] =playerPos[1-playerNumber] -6;
CheckPos();
msg=string.Format("{0}选择了轰炸对方,{1}退6格!", name[playerNumber], name[1-playerNumber]);
}
break;
case2:
//踩到了地雷
playerPos[playerNumber] =playerPos[playerNumber] -6;
CheckPos();
msg=string.Format("{0}踩到了地雷退6格!", name[playerNumber]);
break;
case3:
//暂停一次
isStop[0] =true;
msg=string.Format("{0}走到红灯,下次暂停一次!", name[playerNumber]);
break;
case4:
//时空隧道
playerPos[playerNumber] =playerPos[playerNumber] +10;
CheckPos();
msg=string.Format("{0}进入时空隧道,爽死了!", name[playerNumber]);
break;
}
}
Console.Clear();
DrawMap();
if (msg!="")
{
Console.WriteLine(msg);
}
Console.WriteLine("{0}掷出了{1},行动完成!", name[playerNumber], stemp);
Console.WriteLine("**********玩家A和玩家B的位置***********");
Console.WriteLine("玩家{0}的位置在{1}", name[0], playerPos[0] +1);
Console.WriteLine("玩家{0}的位置在{1}", name[1], playerPos[1] +1);
}
/// <summary>
///用于绘制飞行棋的名称!
/// </summary>
privatestaticvoidShowUI()
{
Console.WriteLine("*****************************");
Console.WriteLine("* *");
Console.WriteLine("* 骑士飞行棋 *");
Console.WriteLine("* *");
Console.WriteLine("*****************************");
}
privatestaticvoidCheckPos()
{
for (inti=0; i<2; i++)
{
if (playerPos[i] >99)
{
playerPos[i] =99;
Console.WriteLine("");
}
if (playerPos[i] <0)
{
playerPos[i] =0;
}
}
}
/// <summary>
///对地图中的关卡进行初始化!
/// </summary>
privatestaticvoidInitialMap()
{
//用于存储在地图中为地雷的下标
int[] luckyTurn= { 6, 23, 40, 55, 59, 83 }; //幸运轮盘 1
int[] landMine= { 5, 13, 17, 33, 38, 50, 64, 80, 94 }; //地雷 2
int[] pause= { 9, 27, 60, 93 }; //暂停的坐标 3
int[] timeTunnel= { 20, 25, 45, 63, 72, 88, 90 }; //时空隧道 4
for (inti=0; i<luckyTurn.Length; i++)
{
intpos=luckyTurn[i];
Map[pos] =1;
}
for (inti=0; i<landMine.Length; i++)
{
Map[landMine[i]] =2;
}
for (inti=0; i<pause.Length; i++)
{
Map[pause[i]] =3;
}
for (inti=0; i<timeTunnel.Length; i++)
{
Map[timeTunnel[i]] =4;
}
}
/// <summary>
///获得pos坐标上应该绘制的图案!
/// </summary>
/// <param name="pos">要绘制的坐标</param>
/// <returns></returns>
privatestaticstringGetMapString(intpos)
{
stringresult="";
//判断A和B是否在当前要画的第i格上
if (playerPos[0] ==pos&&playerPos[1] ==pos)
{
//改变字符颜色!
Console.ForegroundColor=ConsoleColor.Yellow;
result="<>";
}
elseif (playerPos[0] ==pos)
{
Console.ForegroundColor=ConsoleColor.Yellow;
result="A";
}
elseif (playerPos[1] ==pos)
{
Console.ForegroundColor=ConsoleColor.Yellow;
result="B";
}
else
{
switch (Map[pos])
{
case0:
Console.ForegroundColor=ConsoleColor.White;
result="□";
break;
case1:
Console.ForegroundColor=ConsoleColor.Red;
result="◎";
break;
case2:
Console.ForegroundColor=ConsoleColor.Green;
result="☆";
break;
case3:
Console.ForegroundColor=ConsoleColor.Blue;
result="▲";
break;
case4:
Console.ForegroundColor=ConsoleColor.DarkBlue;
result="¤";
break;
}
}
returnresult;
}
privatestaticvoidDrawMap()
{
//绘制图例:
Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:¤");
//画第一行
for (inti=0; i<=29; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
//绘制第一列
for (inti=30; i<=34; i++)
{
//绘制29个空格!
for (intj=0; j<29; j++)
{
Console.Write(" ");
}
Console.WriteLine(GetMapString(i));
}
//绘制第二行
for (inti=64; i>=35; i--)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
//绘制第二列
for (inti=65; i<=69; i++)
{
Console.WriteLine(GetMapString(i));
}
//绘制第三行
for (inti=70; i<=99; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
//恢复字体颜色!如果最后为非白色,那么如果去掉下面这句话,后面的语句就会和最后面的字符颜色相同!
Console.ResetColor();
}
//只允许使用两数之间的数字!
privatestaticintReadInt()
{
inti=ReadInt(int.MinValue, int.MaxValue);
returni;
}
privatestaticintReadInt(intmin,intmax)
{
while (true)
{
try
{
intnumber=Convert.ToInt32(Console.ReadLine());
if (number<min||number>max)
{
Console.WriteLine("只能输入{0}到{1}之间的数,请重新输入!",min,max);
continue;
}
returnnumber;
}
catch ()
{
Console.WriteLine("只能输入数字,请重新输入!");
}
}
}
}