黑马程序员_骑士飞行棋练习

----------------------Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

通过两天的时间把骑士飞行棋做好了,之前学习了C#面向过程部分,骑士飞行棋就是对它的总结。

         第一,飞行棋玩家。首先玩家姓名不能为空,并且不能重名

    Console.WriteLine("请输入玩家A的姓名?");
            names[0] = Console.ReadLine();
            while (names[0] == "")
            {
                Console.WriteLine("玩家A的姓名不能为空,请重新输入");
                names[0] = Console.ReadLine();
            }


            Console.WriteLine("请输入玩家B的姓名?");
            names[1] = Console.ReadLine();
            while (names[1] == "" || names[1] == names[0])
            {
                if (names[1] == "")
                {
                    Console.WriteLine("玩家B的姓名不能为空,请重新输入!");
                }
                if (names[1] == names[0])
                {
                    Console.WriteLine("该姓名已被玩家A占用!请重新输入!");
                }
                names[1] = Console.ReadLine();
            }
第二,绘制地图
     static void DrawMap()
        {
            Console.WriteLine("图例:幸运轮盘:◎  地雷:★   暂停:▲  时空隧道:卐  ");

            //画第一行
            for (int i = 0; i <= 29; i++)
            {
                Console.Write(GetMapString(i));

            }
            //第一行绘制完
            Console.WriteLine();

            //绘制第一列
            for (int i = 30; i <= 34; i++)
            {
                //绘制29个双空格
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");
                }

                // Console.WriteLine(GetMapString(i));
                string str = GetMapString(i);
                Console.WriteLine(str);
            }

            for (int i = 64; i >= 35; i--)
            {
                Console.Write(GetMapString(i));
            }
            Console.WriteLine();
            for (int i = 65; i <= 69; i++)
            {
                Console.WriteLine(GetMapString(i));
            }
            for (int i = 70; i <= 99; i++)
            {
                Console.Write(GetMapString(i));

            }
            Console.WriteLine();
            Console.ResetColor();            
        }
第三,对地图上的关卡初始化
      static void InitialMap()
        {
           //用于存储在地图中为地雷的下标
            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 pos = luckyTurn[i];
                Map[pos] = 1;
            }

            for (int i = 0; i < landMine.Length; i++)
            {
                Map[landMine[i]] = 2;
            }

            for (int i = 0; i < pause.Length; i++)

            {
                Map[pause[i]] = 3;
            }
            for (int i = 0; i < timeTunnel.Length; i++)
            {
                Map[timeTunnel[i]] = 4;
            }

        }
第四,飞行棋的走法
      static void Action(int playerNumber)
        {
           //当前 0,对方 1;当前为1,对方 0
            //1-playerNumber就是对方的姓名坐标或暂停的下标
            
            Random r = new Random();
            //string msg = "";//用于存储用户踩到某关卡,输出的话
            int step=0;

            Console.WriteLine("{0}按任意键开始掷骰子......", names[playerNumber]);
            ConsoleKeyInfo rec = Console.ReadKey(true);

            step = r.Next(1, 7);
            if (rec.Key == ConsoleKey.Tab)
            {
                ConsoleKeyInfo cc = Console.ReadKey();
                if (cc.Key == ConsoleKey.F1)
                {
                    step = ReadInt(1, 100);
                }
            }

            Console.WriteLine("{0}掷出了:{1}", names[playerNumber], step);
            Console.WriteLine("按任意键开始行动......");
            Console.ReadKey(true);
            playerPos[playerNumber] = playerPos[playerNumber] + step;//注意,一旦坐标发生改变,就要判断坐标的值是否大于99或小于0
            //CheckPos();
            if (playerPos[0] == playerPos[1])//A踩到B
            {
                playerPos[1-playerNumber] = 0;
                msg = string.Format("{0}踩到了{1},{2}退回原点", names[playerNumber], names[1-playerNumber],names[1-playerNumber]);
            }
            else
            {
                //没踩到,要判断A现在所在的位置是否有其他关卡
                switch (Map[playerPos[playerNumber]])
                {
                    case 0:
                        //普通,没有效果
                        msg = "";
                        break;
                    case 1:
                        //走到了幸运轮盘

                        Console.Clear();
                        DrawMap();
                        Console.WriteLine("你走到了幸运轮盘,请选择运气?");
                        Console.WriteLine("1---交换位置  2---轰炸对方");
                        int userSelect = ReadInt(1, 2);
                        if (userSelect == 1)
                        {
                            int temp = playerPos[0];
                            playerPos[0] = playerPos[1];
                            playerPos[1] = temp;
                            msg = string.Format("{0}选择了与对方交换位置!", names[playerNumber]);
                        }
                        else
                        {
                            playerPos[1-playerNumber] = playerPos[1-playerNumber] - 6;
                            CheckPos();
                            msg = string.Format("{0}轰炸了{1},{1}退后6格!", names[playerNumber], names[1-playerNumber]);
                        }
                        break;
                    case 2:
                        //踩到了地雷
                        playerPos[playerNumber] = playerPos[playerNumber] - 6;
                        CheckPos();
                        msg = string.Format("{0}踩到了地雷,退后6格!", names[playerNumber]);
                        break;
                    case 3:
                        //暂停一次
                        isStop[playerNumber] = true;
                        msg = string.Format("{0}走到红灯,下次暂停一次!", names[playerNumber]);
                        break;
                    case 4:
                        //时光隧道
                        playerPos[playerNumber] = playerPos[playerNumber] + 10;
                        CheckPos();
                        msg = string.Format("{0}进入时光隧道,happy", names[playerNumber]);
                        break;

                }
            }

            Console.Clear();
            DrawMap();
            if (msg != "")
            {
                Console.WriteLine(msg);
            }
            Console.WriteLine("{0}掷出了{1},行动完成!", names[playerNumber], step);
            Console.WriteLine("************************玩家A和玩家B的位置如下********************************");
            Console.WriteLine("{0}的位置为:{1}", names[0], playerPos[0] + 1);
            Console.WriteLine("{0}的位置为:{1}", names[1], playerPos[1] + 1);

        }
最后将一些重复代码,封装在一个方法里。 补充:组合键Tab+F1
     step = r.Next(1, 7);
            if (rec.Key == ConsoleKey.Tab)
            {
                ConsoleKeyInfo cc = Console.ReadKey();
                if (cc.Key == ConsoleKey.F1)
                {
                    step = ReadInt(1, 100);
                }
            }

最后运行结果:

----------------------Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

详细请查看:http://net.itheima.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值