C#学习笔记 08.01

C#学习笔记 08.01

(学习视频来自bilibili的传智播客赵老师基础教学视频)

飞行棋游戏

这就是个比较大的东西了。。。。
大概就是,有个标题,给玩家起名。
有个地图,掷骰子,走路玩。。。

详细规则
踩到对方 可以让对方退6个格子(踩中对方的话可以躲避当前格子的判定)
普通格子。。。就是普通格子
幸运圆盘,与对方交换位置,或者将对方轰退6个格子
地雷。。退6步
时空隧道。。进10步
暂停。。定身一局
大概这样。。。。

在这里插入图片描述
在这里插入图片描述

源代码太长了,本想传资源上去,结果发现不会整,就很尴尬,附在后面了。。。

实现方法肯定不止这一种,大家有好的想法欢迎批评指教

using System;

namespace _12_FeiXingQi
{
    class Program
    {
        public static int[] _Maps = new int[100];//新建数组,确定地图大小
        public static int[] _WeiZhi = new int[2];//存储A,B两个玩家的坐标
        public static Random ra = new Random();
        public static bool _JiaoHuan = false;
        public static bool _HongZha = false;
        public static bool[] _ZanTing = new bool[2];
        static void Main(string[] args)
        {
            int n = 0;//回合数
            int dianShu;//骰子的点数
            YouXiTou();
            #region 输入玩家姓名
            string name_A, name_B;
            Console.WriteLine("请输入玩家A姓名");
            while (true)
            {
                name_A = Console.ReadLine();
                if (name_A != null)
                {
                    break;
                }
                Console.WriteLine("玩家A姓名不能为空!");
            }
            Console.WriteLine("请输入玩家B姓名");
            while (true)
            {
                name_B = Console.ReadLine();
                if (name_B != null)
                {
                    break;
                }
                Console.WriteLine("玩家B姓名不能为空!");
            }
            #endregion
            HuiZhiTuLi(name_A, name_B);
            ChuShiHua();
            if (_WeiZhi[0] == _WeiZhi[1])
            {
                _Maps[_WeiZhi[0]] = 7;
            }
            else
            {
                _Maps[_WeiZhi[0]] = 5;
                _Maps[_WeiZhi[1]] = 6;
            }
            HuiZhiChangJing();

            while (_WeiZhi[0] < 99 && _WeiZhi[1] < 99)
            {
                n++;

                Console.WriteLine("第{0}回合,由{1}(A)掷骰子(按下键盘任意键)……", n, name_A);
                Console.ReadKey(false);
                ChuShiHua();
                dianShu = ZhiTouZi();
                _Maps[_WeiZhi[1]] = 6;
                _WeiZhi[0] = QianJin(ref _WeiZhi[0], dianShu, ref _ZanTing[0]);
                if (_JiaoHuan)
                {
                    _JiaoHuan = false;
                    int temp = _WeiZhi[0];
                    _WeiZhi[0] = _WeiZhi[1];
                    _WeiZhi[1] = temp;
                }
                if (_HongZha)
                {
                    _HongZha = false;
                    _WeiZhi[1] -= 6;
                    ChuShiHua();
                    FanWeiXianDing(ref _WeiZhi[1]);
                }
                if (_WeiZhi[0] == _WeiZhi[1])
                {
                    _Maps[_WeiZhi[0]] = 7;
                }
                else
                {
                    _Maps[_WeiZhi[0]] = 5;
                    _Maps[_WeiZhi[1]] = 6;
                }
                Console.WriteLine("{0}(A)的行动结束(按任意键继续)", name_A);
                Console.ReadKey(false);
                HuiZhiTuLi(name_A, name_B);
                HuiZhiChangJing();


                Console.WriteLine("第{0}回合,由{1}(B)掷骰子(按下键盘任意键)……", n, name_B);
                Console.ReadKey(false);
                ChuShiHua();
                _Maps[_WeiZhi[0]] = 5;
                dianShu = ZhiTouZi();
                _WeiZhi[1] = QianJin(ref _WeiZhi[1], dianShu, ref _ZanTing[1]);
                if (_JiaoHuan)
                {
                    _JiaoHuan = false;
                    int temp = _WeiZhi[0];
                    _WeiZhi[0] = _WeiZhi[1];
                    _WeiZhi[1] = temp;
                }
                if (_HongZha)
                {
                    _HongZha = false;
                    _WeiZhi[0] -= 6;
                    FanWeiXianDing(ref _WeiZhi[0]);
                    ChuShiHua();
                }
                if (_WeiZhi[0] == _WeiZhi[1])
                {
                    _Maps[_WeiZhi[0]] = 7;
                }
                else
                {
                    _Maps[_WeiZhi[0]] = 5;
                    _Maps[_WeiZhi[1]] = 6;
                }
                Console.WriteLine("{0}(B)的行动结束(按任意键继续)", name_B);
                Console.ReadKey(false);
                HuiZhiTuLi(name_A, name_B);
                HuiZhiChangJing();
            }

            if (_WeiZhi[0]==99)
            {
                Console.WriteLine("{0}(A)获胜!",name_A);
            }
            else
            {
                Console.WriteLine("{0}(B)获胜!",name_B);
            }
            Console.ReadKey();

        }
        /// <summary>
        /// 游戏头
        /// </summary>
        public static void YouXiTou()
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("*************************************");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("*************************************");
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("*************************************");
            Console.ForegroundColor = ConsoleColor.DarkRed;
            Console.WriteLine("**************飞行棋游戏*************");
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("*************************************");
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("*************************************");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("*************************************");
            Console.ResetColor();
        }

        /// <summary>
        /// 接下来为数组赋值(初始化地图,为不同位置设定场景)
        /// </summary>
        public static void ChuShiHua()
        {

            // 0 表示普通 □
            // 1 表示幸运轮盘 ◎
            // 2 表示地雷 ☆
            // 3 代表暂停 ▲
            // 4 代表时空隧道 卐
            for (int i = 0; i < _Maps.Length; i++)
            {
                _Maps[i] = 0;
            }
            int[] xingYunLunPan = { 6, 23, 40, 55, 59, 83 };
            foreach (var item in xingYunLunPan)
            {
                _Maps[item] = 1;
            }
            int[] diLei = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
            foreach (var item in diLei)
            {
                _Maps[item] = 2;
            }
            int[] zanTing = { 9, 27, 60, 93 };
            foreach (var item in zanTing)
            {
                _Maps[item] = 3;
            }
            int[] shiKongSuiDao = { 20, 25, 45, 63, 72, 88, 90 };
            foreach (var item in shiKongSuiDao)
            {
                _Maps[item] = 4;
            }
        }

        /// <summary>
        /// 根据点位置的数据,判断某一点该画啥
        /// </summary>
        /// <param name="i"></param>
        public static void HuiZhiDanGe(int i)
        {
            switch (i)
            {
                case 0:
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write("□");
                    Console.ResetColor();
                    break;
                case 1:
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.Write("◎");
                    Console.ResetColor();
                    break;
                case 2:
                    Console.ForegroundColor = ConsoleColor.Blue;
                    Console.Write("☆");
                    Console.ResetColor();
                    break;
                case 3:
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("▲");
                    Console.ResetColor();
                    break;
                case 4:
                    Console.ForegroundColor = ConsoleColor.DarkGray;
                    Console.Write("卐");
                    Console.ResetColor();
                    break;
                case 5:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write("A");
                    Console.ResetColor();
                    break;
                case 6:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write("B");
                    Console.ResetColor();
                    break;
                case 7:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write("<>");
                    Console.ResetColor();
                    break;
                default:
                    break;
            }
        }

        /// <summary>
        /// 根据数组绘制局面
        /// </summary>
        public static void HuiZhiChangJing()
        {

            //第一横
            for (int i = 0; i <= 29; i++)
            {
                HuiZhiDanGe(_Maps[i]);
            }
            //第一竖
            for (int i = 30; i <= 34; i++)
            {
                Console.WriteLine();
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");
                }
                HuiZhiDanGe(_Maps[i]);
            }
            //第二横
            Console.WriteLine();
            for (int i = 64; i >= 35; i--)
            {
                HuiZhiDanGe(_Maps[i]);
            }
            //第二竖
            for (int i = 65; i <= 69; i++)
            {
                Console.WriteLine();
                HuiZhiDanGe(_Maps[i]);
            }
            //第三横
            Console.WriteLine();
            for (int i = 70; i <= 99; i++)
            {
                HuiZhiDanGe(_Maps[i]);
            }
            Console.WriteLine();
        }

        /// <summary>
        /// 掷骰子,返回一个1~6的随机数
        /// </summary>
        /// <returns></returns>
        public static int ZhiTouZi()
        {
            int s;
            s = ra.Next(1, 7);
            Console.WriteLine("掷出了 " + s);
            return s;
        }

        /// <summary>
        /// 游戏过程
        /// </summary>
        /// <param name="weiZhi"></param>
        /// <param name="buShu"></param>
        /// <param name="zanTing"></param>
        /// <returns></returns>
        public static int QianJin(ref int weiZhi, int buShu, ref bool zanTing)
        {
            if (zanTing)
            {
                Console.WriteLine("但是被定身了!");
                zanTing = false;
                return weiZhi;
            }
            weiZhi = weiZhi + buShu;
        Label_PanDing:
            FanWeiXianDing(ref weiZhi);
            switch (_Maps[weiZhi])
            {
                case 0:
                    return weiZhi;
                case 1:
                    Console.WriteLine("踩中幸运轮盘,请按任意键开始!");
                    Console.ReadKey(false);
                    if (ra.Next(1, 3) == 1)
                    {
                        Console.WriteLine("交换位置!");
                        _JiaoHuan = true;
                        break;
                    }
                    else
                    {
                        Console.WriteLine("轰炸对方!");
                        _HongZha = true;
                        break;
                    }
                case 2:
                    Console.WriteLine("你踩雷了!");
                    weiZhi -= 6;
                    goto Label_PanDing;
                case 3:
                    Console.WriteLine("定身一局!");
                    zanTing = true;
                    break;
                case 4:
                    Console.WriteLine("时空隧道,前进10步!");
                    weiZhi += 10;
                    goto Label_PanDing;
                case 5:
                    Console.WriteLine("哈哈,踩你!(将对方踩退6步)");
                    _WeiZhi[0] -= 6;
                    FanWeiXianDing(ref _WeiZhi[0]);
                    break;
                case 6:
                    Console.WriteLine("哈哈,踩你!(将对方踩退6步)");
                    _WeiZhi[1] -= 6;
                    FanWeiXianDing(ref _WeiZhi[1]);
                    break;
                default:
                    Console.WriteLine("恭喜你触发了游戏 bug!");
                    break;
            }
            FanWeiXianDing(ref weiZhi);
            return weiZhi;
        }

        /// <summary>
        /// 打印地图提示信息
        /// </summary>
        /// <param name="name_A"></param>
        /// <param name="name_B"></param>
        public static void HuiZhiTuLi(string name_A, string name_B)
        {
            Console.Clear();
            YouXiTou();
            Console.WriteLine("!!!对战开始!!!");
            Console.WriteLine("{0} 的士兵用 A 表示", name_A);
            Console.WriteLine("{0} 的士兵用 B 表示", name_B);
            Console.WriteLine("图例:两人在同一位置<> 幸运轮盘 ◎ 地雷 ☆ 暂停 ▲ 时空隧道 卐");
        }
        /// <summary>
        /// 将位置限定在棋盘内
        /// </summary>
        /// <param name="weiZhi"></param>
        public static void FanWeiXianDing(ref int weiZhi)
        {
            weiZhi = weiZhi < 0 ? 0 : weiZhi;
            weiZhi = weiZhi > 99 ? 99 : weiZhi;
        }
    }
}

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页