C#基础——(飞行棋上)

目录

 

1、什么是飞行棋呢?

2、整体步骤

3、 游戏头显示

4、玩家信息录入

5、地图显示


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("");
}

其他的请见下一篇博客

猜你喜欢

转载自blog.csdn.net/make_1998/article/details/88781662