博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#基础篇六飞行棋
阅读量:6955 次
发布时间:2019-06-27

本文共 17997 字,大约阅读时间需要 59 分钟。

飞行棋业务:

我们要能够让2个玩家 在地图上 按照游戏规则 进行游戏

玩家类

变量:玩家位置,玩家名称,玩家标识,玩家是否在陷阱中
方法:投骰子,移动
地图类
变量:地图数据数组
方法:初始化地图数据,绘制地图,显示Logo
游戏规则类
变量:
方法:第一次游戏说明,判断玩家位置是否有障碍物,根据不同障碍物执行不同操作,判断游戏是否结束

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace P03FlyQi{    class Program    {        #region ----------------1.全局变量 mapData/playerMark/palyerNames/playerPosition/playerIsInTrap-------------------        //1.全局变量-----------------------------        //--------1.1 地图数据-----------------        ///         /// 地图数据 数组        ///         static string[] mapData = new string[100];        //--------1.2 玩家数据-----------------        ///         /// 玩家标识 A / B        ///         static string[] playerMark = new string[2];        ///         /// 玩家名字        ///         static string[] playerNames = new string[2];        ///         /// 玩家位置        ///         static int[] playerPosition = new int[2];        ///         /// 玩家是否在陷阱中        ///         static bool[] playerIsInTrap = new bool[2];         #endregion        static void Main(string[] args)        {            StartGame();            Console.ReadLine();        }        #region 0.0 游戏开始 void StartGame()        ///         /// 0.0 游戏开始        ///         static void StartGame()        {            //0.1 初始化数据            InitData();            //0.2 显示 Logo            ShowLogo();            //0.3 游戏进行            Playing();        }         #endregion        #region 1.0 初始化数据方法 void InitData()        ///         /// 1.0 初始化数据方法        ///         static void InitData()        {            //1.初始化 地图数据            InitMapData();            //2.初始化 玩家数据            InitPlayerData();        }         #endregion        #region 1.1 初始化 地图数据 void InitMapData()        ///         /// 1.1 初始化 地图数据        ///         static void InitMapData()        {            //a.为地图里所有单元 都默认 赋值为 "普通"            for (int i = 0; i < mapData.Length; i++)            {                mapData[i] = "普通";            }            //b.设置 障碍物            mapData[5] = "地雷";            mapData[25] = "地雷";            mapData[45] = "地雷";            mapData[85] = "地雷";            mapData[15] = "陷阱";            mapData[33] = "陷阱";            mapData[65] = "陷阱";            mapData[95] = "陷阱";            mapData[12] = "时空隧道";            mapData[28] = "时空隧道";            mapData[54] = "时空隧道";            mapData[79] = "时空隧道";            mapData[7] = "幸运轮盘";            mapData[37] = "幸运轮盘";            mapData[47] = "幸运轮盘";            mapData[69] = "幸运轮盘";        }        #endregion        #region 1.2 初始化 玩家数据 void InitPlayerData()        ///         /// 1.2 初始化 玩家数据        ///         static void InitPlayerData()        {            playerMark[0] = "A";            playerMark[1] = "B";            playerNames[0] = ReadString("请输入玩家A的姓名:");            Console.WriteLine("玩家{0}的名字设置成功啦~~~:)\n", playerMark[0]);            do            {                playerNames[1] = ReadString("请输入玩家B的姓名:");                if (playerNames[1] == playerNames[0])                {                    Console.WriteLine("两个名字不能一样~~~");                }                else                {                    Console.WriteLine("玩家{0}的名字设置成功啦~~~:)\n", playerMark[1]);                    break;                }            } while (true);        }        #endregion        #region 2.0 显示游戏Logo void ShowLogo()        ///         /// 2.0 显示游戏Logo        ///         static void ShowLogo()        {            Console.WriteLine("********************************************");            Console.WriteLine("*                                          *");            Console.WriteLine("*  牛   B   的   骑   士   飞   行   棋    *");            Console.WriteLine("*                                          *");            Console.WriteLine("********************************************");        }         #endregion        #region 3.0 游戏进行中 void Playing()        ///         /// 3.0 游戏进行中        ///         static void Playing()        {            //3.1清屏            Console.Clear();            //3.2显示Logo            ShowLogo();            //3.3显示第一次运行游戏的 说明消息            ShowFirstRoundMsg();            //3.4游戏轮流进行            PlayRounds();        }         #endregion        #region 3.1 显示第一次运行游戏的 说明消息 void ShowFirstRoundMsg()        ///         /// 3.1 显示第一次运行游戏的 说明消息        ///         static void ShowFirstRoundMsg()        {            Console.WriteLine("{0} 和 {1} 两个好基友将在此次游戏中一决雌雄~~!", playerNames[0], playerNames[1]);            Console.WriteLine("玩家【{0}】用【A】表示~~", playerNames[0]);            Console.WriteLine("玩家【{0}】用【B】表示~~", playerNames[1]);            Console.WriteLine("如果两个玩家位置相同,则用 <> 表示~!");            Console.WriteLine("游戏开始~~~");        }         #endregion        ///         /// 游戏结束 标识        ///         static bool isGameOver = false;        #region 3.2 游戏轮流进行 void PlayRound()        ///         /// 3.2 游戏轮流进行        ///         static void PlayRounds()        {            //3.2.1绘制地图            ShowMap();            while (!isGameOver)            {                //3.2.2玩家开始玩~~                PlayAnRound();            }        }         #endregion        #region 3.2.1 绘制地图 void ShowMap()        ///         /// 3.2.1 绘制地图        ///         static void ShowMap()        {            //1.绘制 第一部分:第1个横杠(从左到右)            for (int i = 0; i < 30; i++)            {                string unitIcon = GetMapUnitIconByType(i);                Console.Write(unitIcon);            }            Console.WriteLine();            //2.绘制 第二部分:第1个竖线(右竖线)            for (int i = 30; i < 35; i++)            {                string unitIcon = GetMapUnitIconByType(i);                for (int j = 0; j < 29; j++)                {                    Console.Write("  ");                }                Console.WriteLine(unitIcon);            }            //3.绘制 第三部分:第2个横杠(从右到左)            for (int i = 64; i>=35; i--)            {                string unitIcon = GetMapUnitIconByType(i);                Console.Write(unitIcon);            }            Console.WriteLine();            //4.绘制 第四部分:第2个竖线(左竖线)            for (int i = 65; i < 70; i++)            {                string unitIcon = GetMapUnitIconByType(i);                Console.WriteLine(unitIcon);            }            //5.绘制 第五部分:第3个横杠(从左到右)            for (int i = 70; i < 100; i++)            {                string unitIcon = GetMapUnitIconByType(i);                Console.Write(unitIcon);            }            Console.WriteLine();            //绘制地图后,恢复 原来的 字体颜色            Console.ResetColor();        }        #endregion        #region 3.2.1.1 根据 地图下标,返回 地图图标 或者 玩家标识 string GetMapUnitIconByType(int mapIndex)        ///         /// 3.2.1.1 根据 地图下标,返回 地图图标 或者 玩家标识        /// 获取地图 下标对应的 地图单元类型(普通、地雷、陷阱...),返回对应的符号!        ///         /// 地图单元下标        static string GetMapUnitIconByType(int mapIndex)        {            string strUnitIcon = "";            //1.判断 地图位置 是否有玩家            if (mapIndex == playerPosition[0])//玩家A的位置            {                //如果两个玩家的位置相同,则需要 返回 <>                if (playerPosition[0] == playerPosition[1])                {                    Console.ForegroundColor = ConsoleColor.Gray;                    strUnitIcon = "<>";                }                else                {                    Console.ForegroundColor = ConsoleColor.White;                    strUnitIcon = playerMark[0];                }            }            else if (mapIndex == playerPosition[1])//玩家B的位置            {                Console.ForegroundColor = ConsoleColor.White;                strUnitIcon = playerMark[1];            }            else//地图 符号            {                switch (mapData[mapIndex])                {                    case "普通":                        Console.ForegroundColor = ConsoleColor.White;                        strUnitIcon = "□";                        break;                    case "地雷":                        Console.ForegroundColor = ConsoleColor.Red;                        strUnitIcon = "◎";                        break;                    case "幸运轮盘":                        Console.ForegroundColor = ConsoleColor.Yellow;                        strUnitIcon = "卐";                        break;                    case "时空隧道":                        Console.ForegroundColor = ConsoleColor.Magenta;                        strUnitIcon = "○";                        break;                    case "陷阱":                        Console.ForegroundColor = ConsoleColor.Green;                        strUnitIcon = "井";                        break;                }            }            return strUnitIcon;        }         #endregion        #region 3.2.2 两个玩家各投一次骰子 void PlayAnRound()        ///         /// 3.2.2 两个玩家各投一次骰子        ///         static void PlayAnRound()        {            int playNum = 0;            //1.玩家A投骰子--------------------------            //0.判断玩家A是否在陷阱中            if (playerIsInTrap[0] == true)//如果在陷阱中,则停止一轮            {                Console.WriteLine("玩家【A】正艰难的向陷阱外攀爬~~~~按回车继续");                playerIsInTrap[0] = false;//将玩家B的陷阱标识 改成 false(已经停了一轮)                Console.ReadLine();            }            else//否则,进行 投骰子            {                playNum = GetAnRandomNum();                //1.1修改玩家A的位置                playerPosition[0] += playNum;                Console.WriteLine("玩家【A】投了一个数字:{0},按回车继续...", playNum);                Console.ReadLine();                //1.2重新绘制地图                Console.Clear();                ShowLogo();                ShowMap();                //1.3判断玩家A新的位置 上 是否 结束 或 有障碍物!,如果有,则进行相应处理                JudgePosition(true);            }            //2.玩家B投骰子-----------------------------            //0.判断玩家A是否在陷阱中            if (playerIsInTrap[1] == true)//如果在陷阱中,则停止一轮            {                Console.WriteLine("玩家【B】正艰难的向陷阱外攀爬~~~~按回车继续");                playerIsInTrap[1] = false;//将玩家B的陷阱标识 改成 false(已经停了一轮)                Console.ReadLine();            }            else            {                playNum = GetAnRandomNum();                //2.1修改玩家B的位置                playerPosition[1] += playNum;                Console.WriteLine("玩家【B】投了一个数字:{0},按回车继续...", playNum);                Console.ReadLine();                //2.2重新绘制地图                Console.Clear();                ShowLogo();                ShowMap();                //2.3判断玩家B新的位置 上 是否 结束 或 有障碍物!,如果有,则进行相应处理                JudgePosition(false);            }        }         #endregion        #region 3.2.2.1 获取一个 骰子 数(1-6)        ///         /// 3.2.2.1 获取一个 骰子 数(1-6)        ///         static int GetAnRandomNum()        {            Random ran = new Random();            return ran.Next(1, 7);        }         #endregion        #region  3.2.2.2 判断玩家在地图上是否有障碍物,如果有则执行对应操作 void JudgePosition(bool isPlayerA)        ///         /// 3.2.2.2 判断玩家在地图上是否有障碍物,如果有则执行对应操作        ///         ///         static void JudgePosition(bool isPlayerA)        {            //0.判断两个玩家的新位置 是否 已经超过地图,如果超过,则结束游戏            if (playerPosition[0] >= 99)            {                Console.WriteLine("游戏结束~~~玩家{0}赢了~~", playerMark[0]);                isGameOver = true;            }            else if (playerPosition[1] >= 99)            {                Console.WriteLine("游戏结束~~~玩家{0}赢了~~", playerMark[1]);                isGameOver = true;            }            else            {                //1.玩家的位置                int playerIndex = isPlayerA ? playerPosition[0] : playerPosition[1];                //2.根据玩家所在地图 的障碍物 执行不同的操作                switch (mapData[playerIndex])                {                    case "地雷":                        {                            MeetBomb(isPlayerA);                            break;                        }                    case "幸运轮盘":                        {                            MeetLuckyCircle(isPlayerA);                            break;                        }                    case "时空隧道":                        {                            MeetTimeTunnuel(isPlayerA);                            break;                        }                    case "陷阱":                        {                            MeetTrap(isPlayerA);                            break;                        }                }            }        }        #endregion        #region 3.2.2.2.1 遇到地雷 void MeetBomb(bool isPlayerA)        ///         /// 3.2.2.2.1 遇到地雷        ///         /// 是否为玩家A,或者玩家B        static void MeetBomb(bool isPlayerA)        {            //1.如果是地雷,则提示 要后退 6 格            Console.WriteLine("真倒霉~~【{0}】踩到了 地雷了~~!后退6格~~!按回车继续...", (isPlayerA ? playerMark[0] : playerMark[1]));            //2.玩家退后 6 格            if (isPlayerA)            {                playerPosition[0] -= 6;            }            else            {                playerPosition[1] -= 6;            }            CheckPosition();            Console.ReadLine();            Console.Clear();            ShowLogo();            ShowMap();        }         #endregion        #region 3.2.2.2.2 遇到时空隧道 void MeetTimeTunnuel(bool isPlayerA)        ///         /// 3.2.2.2.2 遇到时空隧道        ///         /// 是否为玩家A,或者玩家B        static void MeetTimeTunnuel(bool isPlayerA)        {            //1.如果是地雷,则提示 要后退 6 格            Console.WriteLine("真幸运~~【{0}】进入时空隧道了~~ !前进6格子~~!按回车继续...", (isPlayerA ? playerMark[0] : playerMark[1]));            //2.玩家退后 6 格            if (isPlayerA)            {                playerPosition[0] += 6;            }            else            {                playerPosition[1] += 6;            }            CheckPosition();            Console.ReadLine();            Console.Clear();            ShowLogo();            ShowMap();        }        #endregion        #region 3.3.2.2.3 遇到陷阱 void MeetTrap(bool isPlayerA)        ///         /// 3.3.2.2.3 遇到陷阱        ///         ///         static void MeetTrap(bool isPlayerA)        {            //1.如果是地雷,则提示 要后退 6 格            Console.WriteLine("啊~~【{0}】掉进陷阱了~~ !暂停一局!按回车继续...", (isPlayerA ? playerMark[0] : playerMark[1]));            //2.玩家进入陷阱            if (isPlayerA)            {                playerIsInTrap[0] = true;            }            else            {                playerIsInTrap[1] = true;            }            Console.ReadLine();        }         #endregion        #region 3.3.2.4 遇到幸运轮盘 void MeetLuckyCircle()        ///         /// 3.3.2.4 遇到幸运轮盘        ///         static void MeetLuckyCircle(bool isPlayerA)        {            //1.如果是地雷,则提示 要后退 6 格            string strPalyerMark = isPlayerA ? playerMark[0] : playerMark[1];            int num = ReadANum("啊~~【" + strPalyerMark + "】被幸运之神遭砸了~~,请选择一个愿望:1.轰炸对方,对方后退6格;2.乾坤大挪移,和对方交换位置:");            switch (num)            {                case 1://轰炸对方,对方后退6格                    {                        //如果是玩家A,那么 玩家B的位置后退6格                        if (isPlayerA)                        {                            playerPosition[1] -= 6;                            Console.WriteLine("您选择轰炸对方,玩家【B】将后退6格~!");                        }                        else//如果是玩家B,那么 玩家A的位置后退6格                        {                            playerPosition[0] -= 6;                            Console.WriteLine("您选择轰炸对方,玩家【A】将后退6格~!");                        }                        break;                    }                case 2://乾坤大挪移,和对方交换位置                    {                        //playerPosition[0] = playerPosition[0] + playerPosition[1];                        //playerPosition[1] = playerPosition[0] - playerPosition[1];                        //playerPosition[0] = playerPosition[0] - playerPosition[1];                        int temp = playerPosition[0];                        playerPosition[0] = playerPosition[1];                        playerPosition[1] = temp;                        Console.WriteLine("您选择了乾坤大挪移,和对方交换位置~!");                        break;                    }            }            CheckPosition();            Console.ReadLine();            Console.Clear();            ShowLogo();            ShowMap();        }         #endregion        #region 4.检查玩家位置,一旦出现越界,则设置临界值 void CheckPosition()        ///         /// 4.检查玩家位置,一旦出现越界,则设置临界值        ///         static void CheckPosition()        {            if (playerPosition[0] < 0) playerPosition[0] = 0;            if (playerPosition[1] < 0) playerPosition[1] = 0;            if (playerPosition[0] > 99) playerPosition[0] = 99;            if (playerPosition[1] > 99) playerPosition[1] = 99;        }         #endregion        //-----------------------工具方法-------------------------------        //-------------------------------------------------------------        #region 0.0 读取一个非空字符串 string ReadString(string strMsg)        ///         /// 0.0 读取一个非空字符串        ///         /// 
static string ReadString(string strMsg) { string strMsgBack=""; while (true) { Console.Write(strMsg); strMsgBack = Console.ReadLine().Trim(); if (string.IsNullOrEmpty(strMsgBack)) { Console.WriteLine("您输入的字符串不能为空~~"); } else { break; } } return strMsgBack;//返回 接收到的 非空字符串 //Trim方法用来去掉 字符串两边的 空格 ,如:" aaa aaa " => "aaa aaa" //string.IsNullOrEmpty 判断字符串是否为空,如果为空,则返回 true;否则返回 false } #endregion #region 0.0 读取一个数值 int ReadANum(string strMsg) /// /// 0.0 读取一个数值 /// ///
static int ReadANum(string strMsg) { int num = -1; while (true) { string strMsgBack = ReadString(strMsg); if (int.TryParse(strMsgBack, out num) && (num > 0 && num<3)) { break; } else { Console.WriteLine("请输入 1-2 之间的一个数值!"); } } return num; } #endregion }}

  

转载于:https://www.cnblogs.com/fenglingyi/p/4230847.html

你可能感兴趣的文章
另类文件加密 图片当密码给文本加密
查看>>
MySQL cluster 7.2集群部署配置
查看>>
iptables开放端口的使用方法总结
查看>>
MySQL数据库如何解决大数据量存储问题
查看>>
CENTOS6.5 yum配置
查看>>
源码编译安装mysql5.6报错及解决方法
查看>>
linux常用命令汇总
查看>>
PPT加入背景音乐
查看>>
OpenGL入门笔记(十三)
查看>>
Web趋势地图
查看>>
Python天天美味(11) - 可爱的大小写
查看>>
单链表
查看>>
WF4:AcitivityAction和ActivityFunc
查看>>
诺基亚S40手机联系人导入安卓手机
查看>>
java多线程之:创建开启一个线程的开销
查看>>
【福利将至】iPhone用户可用Siri发微信了
查看>>
分布式锁的三种实现方式
查看>>
逆向路由器固件之敏感信息泄露 Part2
查看>>
WebSocket与消息推送
查看>>
apache做转发
查看>>