黑马程序员骑士飞行棋的所悟所得,及全部代码公布

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

通过这一个小项目让我认识到写注释的重要性,特别是类对象的摘要的书写,他不仅利于我们查看代码,还可以使我们使用时更清晰明了;说道这里我们简单的说一下常用的注释方法:

   行注释:    //

   块注释:    /*…*/

   文档(类)注释:/// 

养成重复代码写方法的习惯,这样我们减少我们使用代码时的重复,使我们的代码界面更加清晰,

下面是我写的骑士飞行棋的代码:

里面也许会有一些下的Bag,如有发现请留言告诉我谢谢!

//在下面数组中储存我们的各种关卡:

        //数组中下表为0的元素对应我们关卡地图的第一格以此类推下表为n-1的元素对应我们的第n格

        //在数组中 1表示幸运轮盘

        //         2表示地雷

        //         3表示暂停

        //         4表示时空隧道卍

        //         0表示普通

        static int[] Map = new int[100];

        static int[] Playerpose = { 0,0 }; //playerpose[0]代表A玩家的位置,playerpose[1]表示B玩家的位置

 

        static void ChackPos()

        {

            for (int i = 0; i < 2; i++)

            {

                if (Playerpose[i] > 99)

                {

                    Playerpose[i] = 99;

                }

                if (Playerpose[i] <0)

                {

                    Playerpose[i] = 0;

                }

            }

        }

        ///<summary>

        ///获得pos坐标应该绘制的图案

        ///</summary>

        ///<param name="pos">要绘制的图标</param>

        ///<returns></returns>

        static string GetMapString(int pos)

        {

            string result = "";

            if (Playerpose[0] == pos && Playerpose[1] == pos)

            {

                Console.ForegroundColor =ConsoleColor.Yellow;

                result="<>";

            }

            else if (Playerpose[0] == pos)

            {

                Console.ForegroundColor =ConsoleColor.Yellow;

                result="A";

            }

            else if (Playerpose[1] == pos)

            {

                Console.ForegroundColor =ConsoleColor.Yellow;

                result="B";

            }

            else

            {

                switch (Map[pos])

                {

                    case 0:

                        Console.ForegroundColor =ConsoleColor.White ;

                        result="";

                        ; break;

                    case 1:

                        Console.ForegroundColor =ConsoleColor.DarkRed;

                        result = "";

                        break;

                    case 2:

                        Console.ForegroundColor =ConsoleColor.DarkYellow;

                        result = "";

                        break;

                    case 3:

                        Console.ForegroundColor =ConsoleColor.Green;

                        result = "";

                        break;

                    case 4: Console.ForegroundColor = ConsoleColor.DarkMagenta;

                        result = "卍";

                        break;

                }

            }

            return result;

        }

        static void Main(string[] args)

        {

            bool[] isstop = {false,false};

            string msg="";

             Random r = new Random();//产生随时数用的

             int temp = 0;

            string[] name = new string[2];//name[0]用来储存玩家A的姓名,name[1]用来储存玩家B的姓名。

            showUI();//显示游戏名称

            Console.WriteLine("请输入玩家A的姓名:");

            name[0] = Console.ReadLine();

            while (name[0] == "")//判断用户输入的名称是否为空。若为空则让用户重新输入。

            {

                Console.WriteLine("玩家A的名称不能为空,请重新输入:");

                name[0] = Console.ReadLine();

            }

            Console.WriteLine("请输入玩家B的姓名:");

            name[1] = Console.ReadLine();

            while (name[1] == "" || name[1] == name[0])

            {

                if (name[1] == "")

                {

                    Console.WriteLine("玩家B的姓名不能为空,请重新输入:");

                }

                else

                {

                    Console.WriteLine("玩家B不能与玩家A重名,请重新输入:");

                }

                name[1] = Console.ReadLine();

            }

            Console.Clear();

            showUI();

            Console.WriteLine("\n对战开始……");

            Console.WriteLine("\n玩家{0}的姓名用A来表示", name[0]);

            Console.WriteLine("\n玩家{0}的姓名用B来表示", name[1]);

            Console.WriteLine("\n两个人重叠时用<>表示");

            InitialMap();

            DrawMap();

            Console.WriteLine("开始游戏了……");

            Console.ReadKey(true);

             while (Playerpose[0] <=99 && Playerpose[1] <= 99)

             {

                 if (isstop[0] ==false)

                 {

                     #region  A掷骰子

                     Console.WriteLine("请{0}开始掷骰子", name[0]);

                     ConsoleKeyInfo re =Console.ReadKey(true);

                     temp = r.Next(1, 7);

                     if (re.Key ==ConsoleKey.Tab)

                     {

                         temp = ReadInt(1,100);

                     }

                     Console.WriteLine("{0}掷出的数是{1}", name[0], temp);

                     Console.WriteLine("请按任意键继续……");

                   

                     Playerpose[0] += temp;

 

                     if (Playerpose[0] == Playerpose[1])

                     {

                         Playerpose[1] = 0;

                     }

                     else

                     {

                         switch (Map[Playerpose[0]])

                         {

                             case 0://没有效果

                                 msg = "";

                                 break;

                             case 1://幸运轮盘

                                 Console.Clear();

                                 Console.WriteLine("你走到了幸运轮盘请选择操作:");

                                 Console.WriteLine("1,交换位置;2,轰炸对方");

                                 int userSelect = ReadInt(1, 2);

                                 if (userSelect == 1)

                                 {

                                     Playerpose[0] = Playerpose[0] + Playerpose[1];

                                     Playerpose[1] = Playerpose[0] - Playerpose[1];

                                     Playerpose[0] = Playerpose[0] - Playerpose[0];

                                     msg = string.Format("{0}踩到了对方,{1}被踩到原点", name[0], name[1]);

 

                                 }

                                 else

                                 {

                                     //轰炸对方

                                     Playerpose[1] = Playerpose[1] - 6;

                                     msg = string.Format("{0}轰炸了对方,{1}退6格", name[0], name[1]);

                                     ChackPos();

                                 }

                                 break;

 

                             case 2://踩到地雷

                                 Playerpose[0] = Playerpose[0] - 6;

                                 msg = string.Format("{0}踩到了地雷,退6格", name[0]);

                                 ChackPos();

                                 break;

                             case 3://暂停一次

                                 isstop[0]= true;

                                 msg = string.Format("{0}暂停一次", name[0]);

                                 ChackPos();

                                 break;

                                

                             case 4://时空隧道

                                 Playerpose[0] = Playerpose[0] + 10;

                                 msg = string.Format("{0}进入了时空隧道,前进10格", name[0]);

                                 ChackPos();

                                 break;

                         }

                     }

                     Console.Clear();

                     DrawMap();

                     if (msg != "")

                     {

                         Console.WriteLine(msg);

                     }

                     Console.WriteLine("{0}掷出了{1},行动完成", name[0], temp);

                     Console.WriteLine("*********************{0},{1}位置如下:************************", name[0], name[1]);

                     Console.WriteLine("{0}的位置:{1}", name[0], Playerpose[0] + 1);

                     Console.WriteLine("{0}的位置:{1}", name[1], Playerpose[1] + 1);

                     if (Playerpose[0] >= 99)

                     {

                         break;

                     }

 

 

                     #endregion

 

                 }

                 else

                 {

                     isstop[0] = false;

                 }

 

                 if (isstop[1] ==false)

                 {

                     #region  B掷骰子

                     Console.WriteLine("请{0}开始掷骰子", name[1]);

 

                     temp = r.Next(1, 7);

                     Console.WriteLine("{0}掷出的数是{1}",name[1], temp);

                     Console.WriteLine("请按任意键继续……");

                     Console.ReadKey(true);

                     Playerpose[1] += temp;

 

                     if (Playerpose[1] == Playerpose[0])

                     {

                         Playerpose[0] = 0;

                     }

                     else

                     {

                         switch (Map[Playerpose[1]])

                         {

                             case 0://没有效果

                                 msg = "";

                                 break;

                             case 1://幸运轮盘

                                 Console.Clear();

                                 Console.WriteLine("你走到了幸运轮盘请选择操作:");

                                 Console.WriteLine("1,交换位置;2,轰炸对方");

                                 int userSelect = ReadInt(1, 2);

                                 if (userSelect == 1)

                                 {

                                     Playerpose[0] = Playerpose[0] + Playerpose[1];

                                     Playerpose[1] = Playerpose[0] - Playerpose[1];

                                     Playerpose[0] = Playerpose[0] - Playerpose[0];

                                     msg = string.Format("{0}踩到了对方,{1}被踩到原点", name[1], name[0]);

 

                                 }

                                 else

                                 {

                                     //轰炸对方

                                     Playerpose[0] = Playerpose[0] - 6;

                                     msg = string.Format("{0}轰炸了对方,{1}退6格", name[1], name[0]);

                                     ChackPos();

                                 }

                                 break;

 

                             case 2://踩到地雷

                                 Playerpose[1] = Playerpose[1] - 6;

                                 msg = string.Format("{0}踩到了地雷,退6格", name[1]);

                                 ChackPos();

                                 break;

                             case 3://暂停一次

                                 isstop[1] = true;

                                 msg = string.Format("{0}暂停一次", name[1]);

                                 ChackPos();

                                 break;

                                

                             case 4://时空隧道

                                 Playerpose[1] = Playerpose[1] + 10;

                                 msg = string.Format("{0}进入了时空隧道,前进10格", name[1]);

                                 ChackPos();

                                 break;

                         }

                     }

                     Console.Clear();

                     DrawMap();

                     if (msg != "")

                     {

                         Console.WriteLine(msg);

                     }

                     Console.WriteLine("{0}掷出了{1},行动完成", name[1], temp);

                     Console.WriteLine("*********************{0},{1}位置如下:************************", name[0], name[1]);

                     Console.WriteLine("{0}的位置:{1}", name[0], Playerpose[0] + 1);

                     Console.WriteLine("{0}的位置:{1}", name[1], Playerpose[1] + 1);

 

 

 

                     #endregion

                 }

                 else

                 {

                     isstop[1] =false;

                 }

               

 

 

 

             }

             if (Playerpose[0] >= 99)

             {

                 Console.WriteLine("{0}赢了!!!!", name[0]);

             }

             else

             {

                 Console.WriteLine("{0}赢了!!!!", name[1]);

             }

 

 

            Console.ReadKey();

        }

        ///<summary>

        ///用于绘制游戏的表头

        ///</summary>

        static void showUI()

        {

            Console.ForegroundColor =ConsoleColor.Blue;

            Console.WriteLine("*******************************************");

            Console.WriteLine("*                                        *");

            Console.WriteLine("*      骑   士    飞    行    棋         *");

            Console.WriteLine("*                                        *");

            Console.WriteLine("*******************************************");

            //Console.ForegroundColor = ConsoleColor.White;

            Console.ResetColor();

        }

        ///<summary>

        ///对坐标关卡进行初始化

        ///</summary>

        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[] timeTunel = { 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++)

            {

                int pos = landMine[i];

                Map[pos] = 2;

            }

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

            {

                int pos = pause[i];

                Map[pos] = 3;

            }

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

            {

                int pos = timeTunel[i];

                Map[pos] = 4;

 

                //可以写成Map[timeTunel[i]]

            }

 

        }

        ///<summary>

        ///绘制界面

        ///</summary>

        static void DrawMap()

        {

            Console.WriteLine("\n图例:幸运轮盘: 地雷: 暂停: 时空隧道:卍\n");

            //开始画第一行

            for (int i = 0; i < 30; i++)

            {

                Console.Write(GetMapString(i));

            }

            Console.WriteLine();

            //开始输出第二行

            for (int i = 30; i < 35; i++)

            {

                for (int j = 0;  j< 29; j++)

                {

                    Console.Write(");

                }

 

                Console.WriteLine(GetMapString(i));

            }

            //绘制第三行

            for (int i = 64; i >= 35; i--)

            {

                Console.Write(GetMapString(i));

               

            }

            Console.WriteLine();

            //绘制第四行

            for (int i = 65; i < 70; i++)

            {

                Console.WriteLine(GetMapString(i));

            }

            //绘制第五行

            for (int i = 70; i < 100; i++)

            {

                Console.Write(GetMapString(i));

            }

            Console.WriteLine();

            Console.ResetColor();

         

 

        }

        static int ReadInt()

        {

            int i = ReadInt(int.MinValue,int.MaxValue);

            return i;

        }

        static int ReadInt(int min,int max)

        {

          while(true)

          {

            try

            {

                int number = Convert.ToInt32(Console.ReadLine());

                if (number < min || number > max)

                {

                    Console.WriteLine("只能输入{0}-{1}之间的数,请重新输入", min, max);

                    continue;

                }

                return number;

            }

            catch

            {

                Console.WriteLine("只能输入数字,请重新输入!");

            }

          }

        }

 

------- Windows Phone 7手机开发.Net培训、期待与您交流! ------  详细请查看:http://net.itheima.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值