----------------------Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
通过两天的时间把骑士飞行棋做好了,之前学习了C#面向过程部分,骑士飞行棋就是对它的总结。
第一,飞行棋玩家。首先玩家姓名不能为空,并且不能重名
Console.WriteLine("请输入玩家A的姓名?");
names[0] = Console.ReadLine();
while (names[0] == "")
{
Console.WriteLine("玩家A的姓名不能为空,请重新输入");
names[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名?");
names[1] = Console.ReadLine();
while (names[1] == "" || names[1] == names[0])
{
if (names[1] == "")
{
Console.WriteLine("玩家B的姓名不能为空,请重新输入!");
}
if (names[1] == names[0])
{
Console.WriteLine("该姓名已被玩家A占用!请重新输入!");
}
names[1] = Console.ReadLine();
}
第二,绘制地图
static void DrawMap()
{
Console.WriteLine("图例:幸运轮盘:◎ 地雷:★ 暂停:▲ 时空隧道:卐 ");
//画第一行
for (int i = 0; i <= 29; i++)
{
Console.Write(GetMapString(i));
}
//第一行绘制完
Console.WriteLine();
//绘制第一列
for (int i = 30; i <= 34; i++)
{
//绘制29个双空格
for (int j = 0; j < 29; j++)
{
Console.Write(" ");
}
// Console.WriteLine(GetMapString(i));
string str = GetMapString(i);
Console.WriteLine(str);
}
for (int i = 64; i >= 35; i--)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
for (int i = 65; i <= 69; i++)
{
Console.WriteLine(GetMapString(i));
}
for (int i = 70; i <= 99; i++)
{
Console.Write(GetMapString(i));
}
Console.WriteLine();
Console.ResetColor();
}
第三,对地图上的关卡初始化
static void InitialMap()
{
//用于存储在地图中为地雷的下标
int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘
int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷
int[] pause = { 9, 27, 60, 93 };//暂停
int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道
for (int i = 0; i < luckyTurn.Length; i++)
{
int pos = luckyTurn[i];
Map[pos] = 1;
}
for (int i = 0; i < landMine.Length; i++)
{
Map[landMine[i]] = 2;
}
for (int i = 0; i < pause.Length; i++)
{
Map[pause[i]] = 3;
}
for (int i = 0; i < timeTunnel.Length; i++)
{
Map[timeTunnel[i]] = 4;
}
}
第四,飞行棋的走法
static void Action(int playerNumber)
{
//当前 0,对方 1;当前为1,对方 0
//1-playerNumber就是对方的姓名坐标或暂停的下标
Random r = new Random();
//string msg = "";//用于存储用户踩到某关卡,输出的话
int step=0;
Console.WriteLine("{0}按任意键开始掷骰子......", names[playerNumber]);
ConsoleKeyInfo rec = Console.ReadKey(true);
step = r.Next(1, 7);
if (rec.Key == ConsoleKey.Tab)
{
ConsoleKeyInfo cc = Console.ReadKey();
if (cc.Key == ConsoleKey.F1)
{
step = ReadInt(1, 100);
}
}
Console.WriteLine("{0}掷出了:{1}", names[playerNumber], step);
Console.WriteLine("按任意键开始行动......");
Console.ReadKey(true);
playerPos[playerNumber] = playerPos[playerNumber] + step;//注意,一旦坐标发生改变,就要判断坐标的值是否大于99或小于0
//CheckPos();
if (playerPos[0] == playerPos[1])//A踩到B
{
playerPos[1-playerNumber] = 0;
msg = string.Format("{0}踩到了{1},{2}退回原点", names[playerNumber], names[1-playerNumber],names[1-playerNumber]);
}
else
{
//没踩到,要判断A现在所在的位置是否有其他关卡
switch (Map[playerPos[playerNumber]])
{
case 0:
//普通,没有效果
msg = "";
break;
case 1:
//走到了幸运轮盘
Console.Clear();
DrawMap();
Console.WriteLine("你走到了幸运轮盘,请选择运气?");
Console.WriteLine("1---交换位置 2---轰炸对方");
int userSelect = ReadInt(1, 2);
if (userSelect == 1)
{
int temp = playerPos[0];
playerPos[0] = playerPos[1];
playerPos[1] = temp;
msg = string.Format("{0}选择了与对方交换位置!", names[playerNumber]);
}
else
{
playerPos[1-playerNumber] = playerPos[1-playerNumber] - 6;
CheckPos();
msg = string.Format("{0}轰炸了{1},{1}退后6格!", names[playerNumber], names[1-playerNumber]);
}
break;
case 2:
//踩到了地雷
playerPos[playerNumber] = playerPos[playerNumber] - 6;
CheckPos();
msg = string.Format("{0}踩到了地雷,退后6格!", names[playerNumber]);
break;
case 3:
//暂停一次
isStop[playerNumber] = true;
msg = string.Format("{0}走到红灯,下次暂停一次!", names[playerNumber]);
break;
case 4:
//时光隧道
playerPos[playerNumber] = playerPos[playerNumber] + 10;
CheckPos();
msg = string.Format("{0}进入时光隧道,happy", names[playerNumber]);
break;
}
}
Console.Clear();
DrawMap();
if (msg != "")
{
Console.WriteLine(msg);
}
Console.WriteLine("{0}掷出了{1},行动完成!", names[playerNumber], step);
Console.WriteLine("************************玩家A和玩家B的位置如下********************************");
Console.WriteLine("{0}的位置为:{1}", names[0], playerPos[0] + 1);
Console.WriteLine("{0}的位置为:{1}", names[1], playerPos[1] + 1);
}
最后将一些重复代码,封装在一个方法里。 补充:组合键Tab+F1
step = r.Next(1, 7);
if (rec.Key == ConsoleKey.Tab)
{
ConsoleKeyInfo cc = Console.ReadKey();
if (cc.Key == ConsoleKey.F1)
{
step = ReadInt(1, 100);
}
}
最后运行结果:
----------------------Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://net.itheima.com/