黑马程序员-飞行棋

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

  看基础课程后,到了飞行棋这个项目.开始的时候要看看能不能自己做出来,做的时候才发现没什么思路,做到画地图的时候就卡住了,我想着一次性就把地图给画全了,结果发现很难,看了一视频才知道,要一步一步来.最后看一段视频做了一段的情况下,终于完成了飞行棋.

代码如下:

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace 飞行棋
{
    class Program
    {
        static int[] map = new int[100];//地图上每一格所代表的变量
        static int[] playpos = { 0, 0 };
        static string[] name=new string[2];
        static bool[] stop = { false, false };//用于判断谁暂停掷骰子
        static void Main(string[] args)
        {


               
           
            ShowUI();//显示界面
            
            Console.WriteLine("请输入玩家A的姓名:");
            name[0] = Name();//玩家A的姓名
            Console.WriteLine("请输入玩家B的姓名:");
            name[1] = Name();//玩家B的姓名
            while (name[0] == name[1])//判断A,B姓名是否重名
            {
                Console.WriteLine("输入的姓名不能和玩家{0}同名,请再输入玩家B的姓名:", name[0]);
                name[1] = Name();
            }
            Console.Clear();//清屏
            ShowUI();//显示界面
            Console.WriteLine("对站开始.....");            
            Console.WriteLine("如果AB在同一位置用<>表示");


            Initialmap();//初始化地图
            Drawmap();//画出地图
            Console.WriteLine("对战开始...");
            //这个循环让玩家A和玩家B轮流掷骰子,当玩家A或者玩家B其中一位的坐标大于等99时,结束.            
            while (playpos[0] < 99 && playpos[1] < 99)
            {
                if (stop[0] == false)
                {
                    action(0);
                }
                else
                {
                    stop[0] = false;
                }
                    
                   if (playpos[0] >= 99)
                    {
                        break;
                    }
                   if (stop[1] == false)
                   {
                       action(1);
                   }
                   else
                   {
                       stop[1] = false;
                   }
            }
            Console.Clear();
            ShowUI();


            if (playpos[0] >= 99)
            {
                Console.WriteLine("{0}恭喜你胜利了!!!", name[0]);
            }
            else
            {
                Console.WriteLine("{0}恭喜你胜利了!!!", name[1]);
            }
            Console.ReadKey();
        }
        /// <summary>
        /// 用于绘制飞行旗名称
        /// </summary>
        static void ShowUI()
        {
            Console.WriteLine("                    ***************************************");
            Console.WriteLine("                    *                                     *");
            Console.WriteLine("                    *         伟  哥  飞  行  棋          *");
            Console.WriteLine("                    *                                     *");
            Console.WriteLine("                    ***************************************");
        }
        /// <summary>
        /// 返回一个用户输入的姓名,并且判断姓名不能为空
        /// </summary>
        /// <returns></returns>
        static string Name()
        {
            do
            {
                string name = Console.ReadLine();
                if (name == "")
                {
                    Console.WriteLine("不能输入空的名字,请重新输入!");
                }
                else
                {
                    return name;
                }
            }
            while (true);
        }
        /// <summary>
        /// 初始化地图的各项属性值
        /// </summary>
        static void Initialmap()
        {
            int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };//幸福轮盘 1表示
            int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷 2表示
            int[] pause = { 9, 27, 60, 93 };//暂停的坐标 3表示
            int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空剖隧道 4表示
            for (int i = 0; i < luckyTurn.Length; i++)
            {
                map[luckyTurn[i]] = 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;
            }


        }
        /// <summary>
        /// 画出地图
        /// </summary>
        static void Drawmap()
        {
            Console.WriteLine("           {0}为A玩家,{1}为B玩家", name[0], name[1]);
            Console.WriteLine("图例:  幸运轮盘:◎  地雷:★    暂停:▲    时空隧道:※");            
            for (int i = 0; i <= 29; i++)//画第一行
            {
                Console.Write(Outputmap(i));//调用判断该画的图标
            }
            Console.WriteLine();//换行,从下一行开始画
            for (int i = 30; i <= 34; i++)//画第一坚
            {
                for (int j = 0; j < 29; j++)//前面的空格
                {
                    Console.Write("  ");
                }
                Console.WriteLine(Outputmap(i));
            }
            for (int i = 64; i >= 35; i--)//第二行
            {
                Console.Write(Outputmap(i));


            }
            Console.WriteLine();
            for (int i = 65; i <= 69; i++)//画第二坚
            {
                Console.WriteLine(Outputmap(i));
            }
            for (int i = 70; i <= 99; i++)//画第三行
            {
                Console.Write(Outputmap(i));
            }
            Console.WriteLine();
            Console.ResetColor();
        }
        /// <summary>
        /// 判断需要输出的形状
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        static string Outputmap(int i)
        {
            string result = "";
            if (i == playpos[0] && i == playpos[1])
            {
                Console.ForegroundColor = ConsoleColor.DarkGray;
                result = "<>";
            }
            else if (playpos[0] == i)
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                result = "A";
            }
            else if (playpos[1] == i)
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                result = "B";
            }


            else
            {
                switch (map[i])
                {
                    case 0:
                        Console.ForegroundColor = ConsoleColor.White;
                        result = "□";
                        break;
                    case 1:
                        Console.ForegroundColor = ConsoleColor.Red;
                        result = "◎";
                        break;
                    case 2:
                        Console.ForegroundColor = ConsoleColor.Green;
                        result = "★";
                        break;
                    case 3:
                        Console.ForegroundColor = ConsoleColor.Blue;
                        result = "▲";
                        break;
                    case 4:
                        Console.ForegroundColor = ConsoleColor.Magenta;
                        result = "※";
                        break;
                }


            }
            return result;
        }
    
        /// <summary>
        /// 判断是否越界
        /// </summary>
        static void checkmap()
        {
            for (int i = 0; i <= 1; i++)
            {
                if (playpos[i] > 99)
                {
                    playpos[i] = 99;                 


                }
                if (playpos[i] < 0)
                {
                    playpos[i] = 0;
                }
            }
        }
        static int Reint(int min,int max)
    {
        int temp = 0;
            do
            {
                try
                {


                     temp = Convert.ToInt32(Console.ReadLine());
                    if (temp < min || temp > max)
                    {
                        Console.WriteLine("你输入的数不是{0}到{1}之间的数请重新输入",min,max);
                    }
                }
                catch
                {
                    Console.WriteLine("你输入的不是数字,请重新输入");
                }




            } while (temp < min || temp > max);
            return temp;
    }
        /// <summary>
        /// 掷骰子  并且判断是否踩到特殊格子  画出地图   显示结果
        /// </summary>
        /// <param name="playname"></param>
        static void action(int playname)
    {
        string msg = "";
        Random r = new Random();//产生随机数
        int setp;//存随机数       
        Console.WriteLine("{0}按任意键开始掷骰子...", name[playname]);
        ConsoleKeyInfo rec = Console.ReadKey(true);//返回一个用户输入的按键
        if (rec.Key == ConsoleKey.F10&&rec.Modifiers==(ConsoleModifiers.Alt|ConsoleModifiers.Control))//作弊器,判断是否输入的是F10
        {


            setp = Reint(1,100);//是否掷骰子25
        }
        else
        {
            setp = r.Next(1, 7);//产生一个1-6的随机数
        }


        Console.WriteLine("{0}掷出了:{1}", name[playname], setp);


        Console.WriteLine("{0}按任意键开始行动...",name[playname]);
        Console.ReadKey(true);//按任意键,加true则不会显示按的键的值
        playpos[playname] = playpos[playname] + setp;//玩家name1的新位置                ;
        checkmap();//查检是否会跳出地图
        if (playpos[0] == playpos[1])//判断玩家A是否踩到玩家B
        {
            playpos[1-playname] = 0;//是则让其回到起点
            msg = string.Format("{0}踩到了{1},{1}回到原点!", name[playname], name[1-playname], name[1-playname]);
        }
        else
        {
            switch (map[playpos[playname]])//判断是否踩到特殊格子
            {
                case 0:
                    msg = "";
                    break;
                case 1://幸福轮盘.
                    int xuanzhe;
                    Console.Clear();
                    Drawmap();
                    Console.WriteLine("恭喜{0}踩到幸运轮盘啦!", name[playname]);
                    Console.WriteLine("1,与{0}交换位置      2,轰炸对方", name[1-playname]);
                    xuanzhe = Reint(1, 2);//返加一个1到2之内的整数
                    if (xuanzhe == 1) //1则交换位置
                    {
                        int temp = playpos[playname];
                        playpos[playname] = playpos[1-playname];
                        playpos[1-playname] = temp;
                        msg = string.Format("{0}选择与{1}了交换位置", name[playname], name[1-playname]);


                    }


                    else if (xuanzhe == 2)//否则轰炸对方
                    {
                        playpos[1-playname] = playpos[1-playname] - 6;
                        checkmap();
                        msg = string.Format("{0}轰炸了{1},{1}退6格", name[playname], name[1-playname]);
                    }
                    break;
                case 2://地雷
                    playpos[playname] = playpos[playname] - 6;
                    msg = string.Format("{0}踩到地雷啦,后退6步", name[playname]);
                    checkmap();
                    break;
                case 3://暂停
                    stop[playname] = true;
                    msg = string.Format("{0}踩到暂停,需要休息一次", name[playname]);
                    break;
                case 4://时空隧道
                    playpos[playname] = playpos[playname] + 10;
                    checkmap();
                    msg = string.Format("{0}进入了时空隧道,进10步,爽暴了!", name[playname]);
                    break;
            }
        }
        Console.Clear();
        Drawmap();
        if (msg != "")
        {
            Console.WriteLine(msg);
        }
        Console.WriteLine("{0}掷出了{1},行动完成!", name[playname], setp);
        Console.WriteLine("{0}的位置为{1},{2}的位置为{3}", name[playname], playpos[0] + 1, name[1-playname], playpos[1] + 1);
    }
    
    }


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




    



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值