C#基础-飞行棋项目练习

代码实现:

namespace Flying_Chess
{
    internal class Program
    {
        public static int[] Map = new int[100]; //创建游戏地图大小
        public static int[] PlayerNumber = new int[2]; //记录玩家索引坐标
        public static string[] Player = new string[2]; //存放玩家姓名
        static void Main(string[] args)
        {
            GameHead();
            IsSame();
            Console.Clear(); //按回车键盘,清除界面所有元素
            InitMap();
            CreateMap();
            Console.ReadKey(true); //暂停,按任意键继续
            while (true)
            {
                Console.WriteLine($"玩家{Player[0]}开始投骰子。");
                Console.ReadKey(true);
                Random random = new Random();
                int sum = random.Next(1, 7);
                Console.WriteLine($"玩家{Player[0]}投了{sum}点,玩家{Player[0]}前进{sum}格");
                PlayerNumber[0] += sum;
                if (PlayerNumber[0] >= 99)
                {
                    PlayerNumber[0] = 99;                    
                    Console.Clear();
                    CreateMap();
                    Console.WriteLine($"玩家{Player[0]}赢得比赛");
                    Console.ReadKey(true);
                    break;
                }
                GameRules(0);
                Console.WriteLine($"玩家{Player[1]}开始投骰子。");
                Console.ReadKey(true);
                random = new Random();
                sum = random.Next(1, 7);
                Console.WriteLine($"玩家{Player[1]}投了{sum}点,玩家{Player[1]}前进{sum}格");
                PlayerNumber[1] += sum;
                if (PlayerNumber[1] >= 99)
                {
                    PlayerNumber[1] = 99;
                    Console.Clear();
                    CreateMap();
                    Console.WriteLine($"玩家{Player[1]}赢得比赛");
                    Console.ReadKey(true);
                    break;
                }
                GameRules(1);               
            }
        }
        /// <summary>
        /// 游戏头
        /// </summary>
        public static void GameHead()
        {
            //更改输出结果的背景色
            //Console.BackgroundColor= ConsoleColor.White;
            //更改输出结果的前景色
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("*********************");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("*********************");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("*********************");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(" *** FlyingChess ***");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("*********************");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("*********************");
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("*********************");
            Console.ForegroundColor = ConsoleColor.White;

        }

        /// <summary>
        /// 加载游戏地图道具位置
        /// </summary>
        public static void InitMap()
        {
            //通过数字来标记地图上的情况
            //1,表示前进5格
            //2,表示后退5格
            //3,表示暂停一回合
            //0,表示正常地方
            #region 前进
            int[] Forward = new int[] { 2, 5, 10, 23, 54, 78, 98 };
            for (int i = 0; i < Forward.Length; i++)
            {
                int index = Forward[i];
                Map[index] = 1;
            }
            #endregion

            #region 后退
            int[] Backwark = new int[] { 4, 6, 45, 68, 99 };
            for (int i = 0; i < Backwark.Length; i++)
            {
                int index = Backwark[i];
                Map[index] = 2;
            }
            #endregion

            #region 暂停
            int[] Stop = new int[] { 1, 3, 66, 77, 88 };
            for (int i = 0; i < Stop.Length; i++)
            {
                int index = Stop[i];
                Map[index] = 3;
            }
            #endregion

        }

        /// <summary>
        /// 初始化整张地图
        /// </summary>
        public static void CreateMap()
        {
            //地图生成规则
            //1.玩家1与玩家2在同一格时,用%展示
            //2.玩家1在地图上用1表示,玩家2在地图上用2表示
            //3.前进用F表示,后退用B表示,暂停用S表示,正常位置用·表示,终点用G表示

            Console.WriteLine($"玩家A:{Player[0]} 玩家B:{Player[1]}");
            Console.WriteLine("前进:F,后退:B,暂停:S,正常:·,终点:G");
            //第一横行
            for (int i = 0; i < 30; i++)
            {
                string p = InitPic(i);
                Console.Write(p);
            }
            Console.WriteLine();

            //第一竖列
            for (int i = 30; i < 35; i++)
            {
                for (int j = 0; j < 29; j++)
                {
                    Console.Write(" ");
                }
                string p = InitPic(i);
                Console.WriteLine(p);
            }

            //第二横行
            for (int i = 64; i >= 35; i--)
            {
                string p = InitPic(i);
                Console.Write(p);
            }
            Console.WriteLine();

            //第二竖列
            for (int i = 65; i < 70; i++)
            {
                string p = InitPic(i);
                Console.WriteLine(p);
            }

            //第三横行
            for (int i = 70; i < 100; i++)
            {
                string p = InitPic(i);
                Console.Write(p);
                if (i == 99)
                {
                    Console.WriteLine("G");
                }
            }
        }

        /// <summary>
        /// 加载图标
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        public static string InitPic(int i)
        {
            string p = "";
            if (PlayerNumber[0] == PlayerNumber[1] && PlayerNumber[0] == i)
            {
                p = "%";
            }
            else if (PlayerNumber[0] == i)
            {
                p = "1";
            }
            else if (PlayerNumber[1] == i)
            {
                p = "2";
            }
            else
            {
                switch (Map[i])
                {
                    case 0:
                        Console.ForegroundColor = ConsoleColor.Green;
                        p = "·";
                        break;
                    case 1:
                        Console.ForegroundColor = ConsoleColor.Red;
                        p = "F";
                        break;
                    case 2:
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        p = "B";
                        break;
                    case 3:
                        Console.ForegroundColor = ConsoleColor.White;
                        p = "S";
                        break;
                }
            }
            return p;
        }

        /// <summary>
        /// 判断玩家A与玩家B姓名是否相同
        /// </summary>
        public static void IsSame()
        {
            while (true)
            {
                Console.Write("请输入玩家1的姓名:");
                Player[0] = Console.ReadLine();
                //玩家1姓名不能为空
                while (Player[0] == "")
                {
                    Console.WriteLine("玩家1的姓名不能为空,请重新输入。");
                    Console.Write("请输入玩家1的姓名:");
                    Player[0] = Console.ReadLine();
                }
                Console.Write("请输入玩家2的姓名:");
                Player[1] = Console.ReadLine();
                //玩家2姓名不能为空
                while (Player[1] == "")
                {
                    Console.WriteLine("玩家2的姓名不能为空,请重新输入。");
                    Console.Write("请输入玩家2的姓名:");
                    Player[1] = Console.ReadLine();
                }
                if (Player[0] == Player[1])
                {
                    Console.WriteLine("玩家1与玩家2姓名相同,请重新输入。");
                    continue;
                }
                else
                {
                    break;
                }
            }

        }
        /// <summary>
        /// 游戏规则
        /// </summary>
        public static void GameRules(int position)
        {
            
            //1.当一名玩家踩到另一名玩家时,被踩到的玩家退两格
            if (PlayerNumber[position] == PlayerNumber[1 - position])
            {
                Console.WriteLine($"玩家{Player[position]}踩到了玩家{Player[1 - position]},玩家{Player[1 - position]}后退两格");
                Console.ReadKey(true);
                PlayerNumber[1 - position] -= 2;
                if (PlayerNumber[1 - position]<0)
                {
                    PlayerNumber[1 - position] = 0;
                }
                Console.WriteLine($"玩家{Player[position]}该回合结束。");
                Console.ReadKey(true);

            }
            else
            {
                //2.玩家踩到道具时,根据道具效果做出动作,需注意奖励或惩罚时再次触发道具,将免疫本次效果。
                switch (Map[PlayerNumber[position]])
                {
                    case 0:
                        Console.WriteLine($"玩家{Player[position]}该回合结束。");
                        Console.ReadKey(true);
                        break;
                    case 1:
                        Console.WriteLine($"玩家{Player[position]}踩到加速,前进5格");
                        PlayerNumber[position] += 5;
                        if (PlayerNumber[position]>=99)
                        {
                            PlayerNumber[position] = 99;
                            Console.Clear();
                            CreateMap();
                            Console.WriteLine($"玩家{Player[position]}赢得比赛");
                        }
                        Console.ReadKey(true);
                        break;
                    case 2:
                        Console.WriteLine($"玩家{Player[position]}踩到陷阱,后退5格");
                        PlayerNumber[position] -= 5;
                        if (PlayerNumber[position] < 0)
                        {
                            PlayerNumber[position] = 0;
                        }
                        Console.ReadKey(true);
                        break;
                    case 3:
                        Console.WriteLine($"玩家{Player[position]}跳进牢笼,暂停一回合。");
                        Console.ReadKey(true);
                        Console.WriteLine($"玩家{Player[1 - position]}进入奖励回合,请投骰子。");
                        Console.ReadKey(true);
                        Random random = new Random();
                        int sum = random.Next(1, 7);
                        Console.WriteLine($"玩家{Player[1 - position]}投了{sum}点,玩家{Player[1 - position]}前进{sum}格");
                        PlayerNumber[1 - position] += sum;
                        if (PlayerNumber[1 - position]>=99)
                        {
                            PlayerNumber[1 - position] = 99;
                            Console.Clear();
                            CreateMap();
                            Console.WriteLine($"玩家{Player[1 - position]}赢得比赛");
                            break;
                        }
                        Console.WriteLine($"玩家{Player[1 - position]}奖励回合结束");
                        Console.ReadKey(true);
                        break;
                }
                Console.Clear();
                CreateMap();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值