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()方法:

玩家胜利走到终点调用这个方法。代码一过来就乱了,索性截图
在这里插入图片描述
调用这些方法以后减少了很多的冗余代码

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值