终于到了所谓的飞行棋阶段了,这个阶段先是自己梳理思路去敲,后面发现的确挺难^_^,后面被卡在了玩家行动、行动判断以及绘制不同地图上面,然后就开始带着问题去看视频。
一、逻辑部分
自己思路与老师思路的差距:
1、可以通过用int数组画飞行棋,通过数字来对应不同的关卡。我的思路用的是字符串数组画的,直接把符号赋值给字符换数组,没有想到可以利用中间的数字来设置不同的符号。区别在于老师利用了一个标识符(数字)来判断要画哪一个。
那么字符串数组与整数数组的使用区别在什么呢?他们的初始值不同,整数数组的初始值是0,而字符串数组的初始值为null,改变时只改一下数字即可。
2、两个玩家用数组来表示,采用switch语句。
3、对于多次用到的参数,在类中进行声明。
4、画竖行时我直接用的多个空格,老师则采用for循环输入空格。
5、颜色的转换。
6、Console.ReadKey()在控制台处是否显示按下的键,通过参数的true,false来判断。
7、如何行动:
第一种情况:AB坐标相同,那么后面的按个退回原点,坐标为0。
第二种情况:不踩任意奖励键,那么继续往前走。
第三种情况:踩到奖励的坐标键,根据奖励的具体内容来改变玩家的坐标位置。
二、导图类(绿色部分为调用方法过程)
三、代码类:
①、主函数及定义声明
public static int[] Map = new int[100]; //在类中声明数组,利用率较高,为提高效率声明到类中
public static int[] PlayerPos = new int[] { 0, 0 }; //声明玩家坐标数组
public static string[] PlayerNames = new string[2]; //声明玩家姓名
public static bool[] flag = new bool[] { false, false }; //声明一个flag标记
static void Main(string[] args)
{
Title(); //调用游戏头方法
InitMap(); //调用初始化地图方法
#region 判断输入姓名是否为空,是否相同
Console.WriteLine("请输入玩家A的姓名"); //在控制台上写入内容
PlayerNames[0] = Console.ReadLine(); //读取控制台内容,并将结果赋值给玩家数组A
while (PlayerNames[0] == "") //判断,如果玩家A的姓名为空,则提示
{
Console.WriteLine("玩家A姓名不能为空,请重新输入"); //提示内容
PlayerNames[0] = Console.ReadLine();
}
Console.WriteLine("请输入玩家B的姓名"); //在控制台上写入内容
PlayerNames[1] = Console.ReadLine(); //读取控制台内容,并将结果赋值给玩家B
while (PlayerNames[1] == "" || PlayerNames[0] == PlayerNames[1]) //判断,玩家AB姓名是否相同,玩家B是否为空
{
if (PlayerNames[0] == PlayerNames[1]) //如果相同则提示对应信息
{
Console.WriteLine("玩家B的姓名不能与玩家A的姓名“{0}”相同", PlayerNames[0]);
}
else
{
Console.WriteLine("玩家B姓名不能为空,请重新输入"); //如果为空则提示为空信息
}
PlayerNames[1] = Console.ReadLine(); //然后再次读取控制台内容
}
#endregion
Console.Clear();
Title(); //调用游戏头方法
Console.WriteLine("对战开始..."); //在控制台上输入内容
Console.WriteLine("{0}的士兵用A表示...", PlayerNames[0]);
Console.WriteLine("{0}的士兵用B表示...", PlayerNames[1]);
DrawMap(); //调用画地图方法
while (PlayerPos[0] <= 99 && PlayerPos[1] <= 99) //创建循环,如果两个玩家的坐标都<=99的话那么进行下面循环,但凡有一个等于99那么退出循环