c#【飞行棋详解】
飞行棋流程图
游戏头ShowUI()
public static void ShowUI()
{
Console.WriteLine("************************************");
Console.WriteLine("* *");
Console.WriteLine("* 终极骑士飞行棋 06.16 *");
Console.WriteLine("* *");
Console.WriteLine("************************************");
}
初始化地图InitMap()方法
加载显示游戏头后,输入玩家名之前进行初始化地图
public static void InitMap()
{
/// //初始化地图
//我用0表示普通,显示给用户就是 □
//....1...幸运轮盘,显示组用户就 ◎
//....2...地雷,显示给用户就是 ☆
//....3...暂停,显示给用户就是 ▲
//....4...时空隧道,显示组用户就 卐
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 temp = luckyturn[i];
Map[luckyturn[i]] =1;
}
for (int i = 0; i < landMine.Length; i++)
{
//int temp = luckyturn[i];
Map[landMine[i]] = 2;
}
for (int i = 0; i < pause.Length; i++)
{
// int temp = luckyturn[i];
Map[pause[i]]= 3;
}
for (int i = 0; i < timeTunnel.Length; i++)
{
// int temp = luckyturn[i];
Map [timeTunnel[i]] =4;
}
//初始化地图已经完成
}//end public
ReadInt()方法
用来读取用户在位于幸运轮盘关卡时选择的值
public static int ReadInt(string msg, int min, int max)
{
while (true)
{
try
{
Console.WriteLine(msg );
int number = Convert.ToInt32(Console.ReadLine());
if (number >=min && number <=max )
{
return number;
}
else
{
Console.WriteLine("你的输入不合法!只能输入{0}到{1}之间的数字!",min ,max );
continue;
}
}
catch
{
Console.WriteLine("输入有误,请重新输入!");
}
} //end while
} //end public
DrawMap()方法方法
public static void DrawMap()
{
//图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:卐
Console.WriteLine("图例:幸运轮盘:◎ 地雷:☆ 暂停:▲ 时空隧道:卐");
#region 画地图第一行
DrawMapLeftRight(0,29);
#endregion
Console.WriteLine();
#region 画 地图第一竖行
for (int i = 30; i <=34; i++)
{
for (int j = 0; j <= 28; j++)
{
Console.Write(" ");
}
#region 地图画第二行
for (int i = 64; i >=35; i--)
{
Console.Write(DrawStringMap(i));
}
#endregion
Console.WriteLine();
#region 画地图第二竖行
for (int i = 65; i <=69; i++)
{
// DrawStringMap(i);
Console.WriteLine(DrawStringMap(i));
}
#endregion
#region 画地图第三行
//for (int i = 70; i <=99 ; i++)
//{
// Console.Write(DrawStringMap(i));
//}
DrawMapLeftRight(70,99);
#endregion
Console.WriteLine();
}//end public
DrawStringMap()方法
对地图上的图标和玩家进行颜色完善
string temp = "";
#region 画每一行的逻辑
if (PlayerPos[0] == PlayerPos[1] && PlayerPos[0] == pos)//在一起并且在地图上
{
Console.ForegroundColor = ConsoleColor.Yellow;
temp="<>";
}
else if (PlayerPos[0] == pos) //如果玩家A在地图上就画A
{
Console.ForegroundColor = ConsoleColor.Yellow ;
temp= "A";
}
else if (PlayerPos[1] == pos) //如果玩家B在地图上就画B
{
Console.ForegroundColor = ConsoleColor.Yellow;
temp ="B";
}
else
{
switch (Map[pos]) //如果玩家A和B不在一起也不再这个坐标上就画该显示的地图图标
{
case 0: Console.ForegroundColor = ConsoleColor.Gray ; temp= "□"; break;
case 1: Console.ForegroundColor = ConsoleColor.Red ; temp = "◎"; break;
case 2: Console.ForegroundColor = ConsoleColor.Blue ; temp = "☆"; break;
case 3: Console.ForegroundColor = ConsoleColor.Green ; temp = "▲"; break;
case 4: Console.ForegroundColor = ConsoleColor.Cyan ; temp = "卐"; break;
}//end switch
}//end else
return temp;
DarwStringLeftToRight()
画地图的行
public static void DrawMapLeftRight(int left,int right) //用 DrawMapLeftRight方法来写地图的第一行第三行
{
for (int i = left ; i <=right ; i++)
{
Console.Write(DrawStringMap(i));
}
}
RowTouzi()方法
生成随机数,根据玩家掷骰子的数来移动
public static void RowTouZi(int playerPos)
{
Random r = new Random();
int num = r.Next(1, 7);
string msg = "";
Console.WriteLine("{0}按任意键开始掷骰子", PlayerNames[playerPos]);
// 神key
ConsoleKeyInfo coninfo = Console.ReadKey(true);
if (coninfo.Key == ConsoleKey.Q)
{
coninfo = Console.ReadKey(true);
if (coninfo.Key == ConsoleKey.A)
{
coninfo = Console.ReadKey(true);
if (coninfo.Key == ConsoleKey.Z)
{
num= 50;
}
}
}
Console.ReadKey(true);
Console.WriteLine("{0}投掷出了{1}", PlayerNames[playerPos], num );
Console.WriteLine("{0}按任意键开始行动...", PlayerNames[playerPos]);
Console.ReadKey(true );
PlayerPos[playerPos] += num ;
CheckPos();
if (PlayerPos[playerPos] == PlayerPos[1- playerPos])
{
msg=string.Format ("玩家{0}踩到了玩家{1},玩家{2}退6格", PlayerNames[playerPos], PlayerNames[1- playerPos], PlayerNames[1 - playerPos]);
PlayerPos[1 - playerPos] -= 6;
CheckPos();
}
else
{
switch (Map[PlayerPos[playerPos]])
{
case 0:
msg="行动完成了"; break;
case 1:
msg = string.Format("{0}走到了幸运轮盘,请选择1----交换位置,2----轰炸对方", PlayerNames[playerPos]);
int number = ReadInt(msg, 1, 2);
if (number == 1)
{
int temp = 0;
temp = PlayerPos[playerPos];
PlayerPos[playerPos] = PlayerPos[1- playerPos];
PlayerPos[1- playerPos] = temp;
msg = string.Format("玩家{0}选择了与玩家{1}交换位置", PlayerNames[playerPos], PlayerNames[1 - playerPos]);
}
else
{
PlayerPos[1 - playerPos] = 0;
msg = string.Format("玩家{0}选择轰炸玩家{1}", PlayerNames[playerPos], PlayerNames[1 - playerPos]);
}
break;
case 2:
//踩到地雷了
msg="恭喜你,能踩到地雷,退6格";
PlayerPos[playerPos] -= 6;
CheckPos();
break;
case 3:
msg="才到暂停了";
flag[playerPos] = true;
break;
case 4:
msg ="恭喜你,大琪让我告诉你前进10格";
PlayerPos[playerPos] += 10;
CheckPos();
break;
}
}
Console.Clear();
DrawMap();
Console.WriteLine(msg );
} //end public
Win()方法:
玩家胜利走到终点调用这个方法。代码一过来就乱了,索性截图
调用这些方法以后减少了很多的冗余代码