飞行棋小项目

  1. 飞行器代码如下:

  

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("只能输入数字,请重新输入!");

}

}

 

}

}

  

posted @ 2015-07-24 13:45  Bronc_Li  阅读(442)  评论(0编辑  收藏  举报