目录
1、什么是飞行棋呢?
2个玩家之间掷筛子然后走路,先到达终点的玩家赢,中间设置了4种特别的点:
① 幸运轮盘——◎:选择交换位置还是让对方玩家回到原点
② 地雷——☆:退6格
③ 暂停——▲:停一次
④ 时空隧道——卐:前进10格
2、整体步骤
3、 游戏头显示
方法1:因为玩家信息录入成功之后,重新显示游戏头,所以将游戏头单独的设置成一个方法
public static void ShowUI()
{
Console.WriteLine("********************************");
Console.WriteLine("* *");
Console.WriteLine("* 终极骑士飞行棋 1.0 *");
Console.WriteLine("* *");
Console.WriteLine("********************************");
}
4、玩家信息录入
用一个含有2个元素的字符串数组来存2个玩家的名字信息(下标为0的是玩家A的姓名,下标为1的是玩家B的姓名)
用一个含有2个元素的int类型数组来存2个玩家的坐标(下标为0的值为玩家A的坐标,下标为1的值为玩家B的坐标,开局2个玩家都在0坐标,所有2个元素初始值设为0)
public static int[] PlayeraPos = new int[2] { 0, 0 };//存储2个玩家坐标的数组
public static string[] PlayerNames = new string[2];//存储2个玩家姓名的数组
第一部分代码:两个玩家姓名录入代码
Console.WriteLine("请输入玩家A的姓名");
PlayerNames[0] = Console.ReadLine();
while (PlayerNames[0] == "") //如果玩家A的姓名为空
{
Console.WriteLine("玩家A的姓名不能为空,请重新输入");
PlayerNames[0] = Console.ReadLine(); //再次录入新的玩家A的姓名
}
Console.WriteLine("请输入玩家B的姓名");
PlayerNames[1] = Console.ReadLine();
while (PlayerNames[1]==PlayerNames[0] || PlayerNames[1]=="")//如果玩家A的姓名等于玩家B的姓名或者玩家A的姓名为空
{
if (PlayerNames[1] == PlayerNames[0])
{
Console.WriteLine("玩家B和玩家A的姓名{0}不能相同,请重新输入玩家B的姓名",PlayerNames[0]);
}
else
{
Console.WriteLine("玩家B的姓名为空,请重新输入");
}
PlayerNames[1] = Console.ReadLine();
}
Console.Clear(); //清空屏幕
ShowUI();//调用游戏头
Console.WriteLine("对战开始......"); //调用游戏头方法,显示游戏头
Console.WriteLine("{0}的士兵用A表示",PlayerNames[0]); //显示玩家A
Console.WriteLine("{0}的士兵用B表示",PlayerNames[1]); //显示玩家B
5、地图显示
(1)先分析地图:
① 有100个点,用含有100个元素的int类型数组来表示这100个点,根据数值来判断图标
② 有8种类型的点
该点的特点 |
该点的图形 |
该点的下标 |
只有玩家A在该点 | A | 未知 |
只有玩家B在该点 | B | 未知 |
玩家A和B都不在该点 | <> | 开始的时候为0 |
没有玩家在该点,该点元素的值为1 |
幸运轮盘——◎ |
开始的时候为6, 23, 40, 55, 69, 83 |
没有玩家在该点,该点元素的值为2 | 地雷——☆ |
开始的时候为5, 13, 17, 33, 38, 50, 64, 80, 94 |
没有玩家在该点,该点元素的值为3 | 暂停——▲ |
开始的时候为 9, 27, 60, 93 |
没有玩家在该点,该点元素的值为4 | 时空隧道——卐 |
开始的时候为20, 25, 45, 63, 72, 88, 90 |
其他 |
正常——□ |
开始的时候为除了上面的都是 |
② 两个正方向的横行的画法一样
(2)方法2:游戏初始化:用一个含有100个元素的int类型的数组来存地图各个点,而各个点的图标的通过这个数组的值来判断
public static int[] Map = new int[100];//声明一个长度100的数组来画地图
public static void InitMap()//将地图初始化写成一个方法
{
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++)//map数组中下标为luckyturn元素值的元素的值设置为1
{
Map[luckyturn[i]] = 1;
}
for (int i = 0; i < landMine.Length; i++)//map数组中下标为landMine元素值的元素的值设置为2
{
Map[landMine[i]] = 2;
}
for (int i = 0; i < pause.Length; i++)//map数组中下标为pause元素值的元素的值设置为3
{
Map[pause[i]] = 3;
}
for (int i = 0; i < timeTunnel.Length;i++)//map数组中下标为timeTunnel元素值的元素的值设置为4
{
Map[timeTunnel[i]] = 4;
}
}
(3)方法3:游戏整体图标判断的逻辑:上面的所说的8种点的类型判断
ublic static string DrawStringMap(int pos)//显示图标的逻辑
{
string temp = "";
//如果A和B在同一个位置并且都在做坐标上画<>
if (PlayeraPos[0] == PlayeraPos[1] && PlayeraPos[0] == pos)
{
Console.ForegroundColor = ConsoleColor.Yellow;
temp="<>";
}
else if (PlayeraPos[0] == pos)//如果A在坐标上画A
{
Console.ForegroundColor = ConsoleColor.Yellow;
temp="A";
}
else if (PlayeraPos[1] == pos)//如果B在坐标上画B
{
Console.ForegroundColor = ConsoleColor.Yellow;
temp = "B";
}
else
{
switch (Map[pos])//如果玩家A和B不在一起也不再这个坐标上就显示地图坐标
{
case 0:
Console.ForegroundColor = ConsoleColor.White;
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.Magenta;
temp = "卐"; break;
}
}
return temp;
}
(3)方法4:正方向横行画法的代码:
public static void DrawMapleftToRight(int left,int right)//正方向画横行的最左边和最右边的坐标
{
for (int i = left; i <= right; i++)//从左边的坐标开始循环,循环到最右边
{
Console.Write(DrawStringMap(i));//调用整体画图画法
}
}
(4)方法5:刚进入游戏的地图画法:
public static void DrawMap()
{
Console.WriteLine("图例:幸运轮盘◎ 地雷:☆ 暂停:▲ 时空隧道:卐");
//画第一横行
DrawMapleftToRight(0, 29);//调用画2个正方向横行的方法
//第一横行和第一竖行的换行
Console.WriteLine();
//画第一竖行
for (int i = 30; i <= 34; i++)
{
for (int j = 0; j <= 28; j++)//画前面的空格
{
Console.Write(" ");
}
Console.Write(DrawStringMap(i));//调用图标判断方法
Console.WriteLine();//画完一行,然后换行
}
//画第二横行
for (int i = 64; i >=35; i--)
{
Console.Write(DrawStringMap(i));//调用图标判断方法
}
//第二横行和第二竖行的换行
Console.WriteLine();
//画第二竖行
for (int i = 65; i <=69; i++)
{
Console.Write(DrawStringMap(i));//调用图标判断方法
Console.WriteLine();//换行
}
//画第三横行
DrawMapleftToRight(70, 99);//调用画2个正方向横行的方法
//换行
Console.WriteLine("");
}