游戏标题

 static void ShowTitle(){Console.ForegroundColor = ConsoleColor.Cyan;Console.WriteLine("****************************************");Console.ForegroundColor = ConsoleColor.Green;Console.WriteLine("****************************************");Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine("****************************************");Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine("*****************飞行棋*****************");Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine("****************************************");Console.ForegroundColor = ConsoleColor.Green;Console.WriteLine("****************************************");Console.ForegroundColor = ConsoleColor.Cyan;Console.WriteLine("****************************************");}

游戏规则说明

  1. 玩家A和玩家B必须输入一个非纯数字的非空用户名
  2. 玩家A先掷骰子,AB玩家轮流投掷骰子
  3. 游戏中“□”代表普通格子,“◎”代表幸运轮盘,“★”代表地雷,“▲”代表暂停,“卍”代表时空隧道
  4. “□”对于玩家没有任何奖惩!
  5. “◎”玩家具有两种选择:a.选择与对方交换位置;b.选择轰炸对方使对方倒退6步
  6. “★”对于玩家惩罚使玩家倒退6步
  7. “▲”惩罚玩家下一轮暂停操作
  8. “卍”奖励玩家直接前进10步
  9. 如果踩到对方则惩罚对方直接倒退6步

游戏的地图

地图共由100个格子组成,Z型实现,第一行从左往右30个格子,第一列往下5个,第二行从右往左30个格子,第二列往下5个第三行从左往右30个

  1. 声明一个int类型的一维数组,长度是100,每个位置的默认值是0
  2. “□”普通格子也就是默认的值0代表
  3. “◎”幸运轮盘使用数字1代表 {6,23,40,55,69,83}
  4. “★”地雷使用数字2代表 {5,13,17,33,38,50,64,80,94}
  5. “▲”暂停使用数字3代表 {9,27,60,93}
  6. “卍”时空隧道使用数字4代表 {20,25,45,63,88,90}

绘制游戏规则

 static void ShowRule(){Console.ForegroundColor = ConsoleColor.Yellow;Console.WriteLine("------------------------------------------------------------");Console.WriteLine("玩家【1】使用A表示");Console.WriteLine("玩家【2】使用B表示");Console.WriteLine("规则说明:");Console.WriteLine("1.玩家A先掷骰子,A、B玩家轮流投掷骰子");Console.WriteLine("2.“□”对于玩家没有任何奖惩!");Console.WriteLine("3.“◎”玩家具有两种选择:a.选择与对方交换位置;b.选择轰炸对方使对方倒退6步");Console.WriteLine("4.“★”对于玩家惩罚使玩家倒退6步");Console.WriteLine("5.“▲”惩罚玩家下一轮暂停操作");Console.WriteLine("6.“卍”奖励玩家直接前进10步");Console.WriteLine("7.如果踩到对方则惩罚对方直接倒退6步");Console.WriteLine("------------------------------------------------------------");}

初始化地图

 static void InitialMap(){//确定“◎”=1int[] lunckturn = { 6, 23, 40, 55, 69, 83 };for (int i = 0; i < lunckturn.Length; i++){int index = lunckturn[i];Maps[index] = 1;}//确定“★”=2int[] landmine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };for (int i = 0; i < landmine.Length; i++){Maps[landmine[i]] = 2;}//确定“▲”=3int[] pause = { 9, 27, 60, 93 };for (int i = 0; i < pause.Length; i++){Maps[pause[i]] = 3;}//确定“卍”=4int[] timeTunnel = { 20, 25, 45, 63, 88, 90 };for (int i = 0; i < timeTunnel.Length; i++){Maps[timeTunnel[i]] = 4;}}

绘制地图

 /// <summary>/// 绘制地图/// </summary>static void DrawMap(){//第一行for (int i = 0; i < 30; i++){Console.Write(DrawString(i));}Console.WriteLine();//第一列for (int i = 30; i < 35; i++){for (int k = 0; k < 29; k++){Console.Write(" ");}Console.Write(DrawString(i));Console.WriteLine();}//第二行for (int i = 64; i > 34; i--){Console.Write(DrawString(i));}Console.WriteLine();//第二列for (int i = 65; i <70; i++){Console.WriteLine(DrawString(i));}//第三行for (int i = 70; i < 100; i++){Console.Write(DrawString(i));}Console.WriteLine();}/// <summary>/// 根据地图数组每个位置的值选择绘制的图案/// </summary>/// <param name="type">地图数组中位置数字代表地图位置索引</param>/// <returns>返回最终选择的图案</returns>static string DrawString(int index){string str = "";//两名玩家的位置重合,并且保证两个玩家的位置都在地图中if (playerPosition[0]==playerPosition[1]&&playerPosition[0]==index){Console.ForegroundColor = ConsoleColor.White;str = "<>";}else if (playerPosition[0]==index){Console.ForegroundColor = ConsoleColor.DarkYellow;str = "A";}else if (playerPosition[1]==index){Console.ForegroundColor = ConsoleColor.DarkCyan;str = "B";}else{switch (Maps[index]){case 0:Console.ForegroundColor = ConsoleColor.Cyan;str = "□";break;case 1:Console.ForegroundColor = ConsoleColor.Magenta;str = "◎";break;case 2:Console.ForegroundColor = ConsoleColor.Red;str = "★";break;case 3:Console.ForegroundColor = ConsoleColor.DarkBlue;str = "▲";break;case 4:Console.ForegroundColor = ConsoleColor.Green;str = "卍";break;default:break;}}return str;}

实现用户注册

 /// <summary>/// 地图/// </summary>static int[] Maps = new int[100];/// <summary>/// 用户姓名/// </summary>static string[] playerName = new string[2];/// <summary>/// 两名玩家的位置/// </summary>static int[] playerPosition = new int[2];static void Main(string[] args){//游戏标题ShowTitle();#region///用户名注册Console.WriteLine("请两名玩家先进行用户注册!");Console.WriteLine("注册规则:不能为空,并且不能是纯数字,玩家AB姓名不能相同");Console.WriteLine("请输入玩家A的姓名:");string pattern = @"^\d+$";bool isok = true;while (isok){playerName[0] = Console.ReadLine();if (string.IsNullOrWhiteSpace(playerName[0])){Console.WriteLine("玩家A的姓名不能为空,请重新输入");}else if (Regex.IsMatch(playerName[0], pattern)){Console.WriteLine("玩家A的姓名不能是纯数字,请重新输入");}else{isok = false;}}isok = true;Console.WriteLine("请输入玩家B的姓名:");while (isok){playerName[1] = Console.ReadLine();if (string.IsNullOrWhiteSpace(playerName[1])){Console.WriteLine("玩家B的姓名不能为空,请重新输入");}else if(Regex.IsMatch(playerName[1], pattern)){Console.WriteLine("玩家B的姓名不能是纯数字,请重新输入");}else if (playerName[0]==playerName[1]){Console.WriteLine("玩家B的姓名已被占用,请重新输入");}else{isok = false;}}#endregionConsole.Clear();ShowTitle();ShowRule();InitialMap();DrawMap();Console.ReadLine();}

游戏逻辑

  1. 玩家A按下任意键先手掷骰子
  2. 掷完骰子出现随机的1-6步
  3. 按下任意键进行移动相对应的步数
 /// <summary>/// 地图/// </summary>static int[] Maps = new int[100];/// <summary>/// 用户姓名/// </summary>static string[] playerName = new string[2];/// <summary>/// 两名玩家的位置/// </summary>static int[] playerPosition = new int[2];/// <summary>/// 标记两个玩家谁该进行投掷筛子/// </summary>static bool[] playerFlag = new bool[2];static void Main(string[] args){//游戏标题ShowTitle();#region///用户名注册Console.WriteLine("请两名玩家先进行用户注册!");Console.WriteLine("注册规则:不能为空,并且不能是纯数字,玩家AB姓名不能相同");Console.WriteLine("请输入玩家A的姓名:");string pattern = @"^\d+$";bool isok = true;while (isok){playerName[0] = Console.ReadLine();if (string.IsNullOrWhiteSpace(playerName[0])){Console.WriteLine("玩家A的姓名不能为空,请重新输入");}else if (Regex.IsMatch(playerName[0], pattern)){Console.WriteLine("玩家A的姓名不能是纯数字,请重新输入");}else{isok = false;}}isok = true;Console.WriteLine("请输入玩家B的姓名:");while (isok){playerName[1] = Console.ReadLine();if (string.IsNullOrWhiteSpace(playerName[1])){Console.WriteLine("玩家B的姓名不能为空,请重新输入");}else if(Regex.IsMatch(playerName[1], pattern)){Console.WriteLine("玩家B的姓名不能是纯数字,请重新输入");}else if (playerName[0]==playerName[1]){Console.WriteLine("玩家B的姓名已被占用,请重新输入");}else{isok = false;}}#endregionConsole.Clear();ShowTitle();ShowRule();InitialMap();DrawMap();//开始进入游戏//判断两名玩家都未到达终点则游戏继续while (playerPosition[0]<99&&playerPosition[1]<99){if (playerFlag[0]==false){PlayGame(0);}else{playerFlag[0] = false;}if (playerFlag[1]==false){PlayGame(1);}else{playerFlag[1] = false;}if (playerPosition[0]>=99){Console.WriteLine("恭喜玩家【{0}】获胜!",playerName[0]);break;}else if (playerPosition[1] >= 99){Console.WriteLine("恭喜玩家【{0}】获胜!", playerName[1]);break;}}Console.ReadLine();}
  1. 移动完成之后判断这个格子的功能,并实现特殊格子的功能
  2. 按下任意键完成界面
/// <summary>/// 实现游戏功能的方法/// </summary>/// <param name="playerIndex">通过玩家索引判断本次游戏操作是由哪个玩家发起的</param>static void PlayGame(int playerIndex){#region ///为了实现玩家掷骰子算出移动步数Random r = new Random();Console.WriteLine("本回合由玩家【{0}】按下任意键掷骰子!",playerName[playerIndex]);Console.ReadKey(true);int number=r.Next(1, 7);Console.WriteLine("玩家【{0}】掷出<{1}>点",playerName[playerIndex],number);Console.WriteLine("玩家【{0}】按下任意键开始移动!",playerName[playerIndex]);Console.ReadKey(true);playerPosition[playerIndex] += number;Console.WriteLine("玩家【{0}】移动完成!",playerName[playerIndex]);#endregionCheckPosition();#region///进行对移动结果的格子奖惩判断//先判断两个玩家是否踩到对方if (playerPosition[0]==playerPosition[1]){Console.WriteLine("玩家【{0}】踩到玩家【{1}】,玩家【{1}】退6格!",playerName[playerIndex],playerName[1-playerIndex]);playerPosition[1-playerIndex] -= 6;}else{switch (Maps[playerPosition[playerIndex]]){//踩到普通格子case 0:Console.WriteLine("玩家【{0}】踩到安全地带!无奖惩!按下任意键刷新界面!",playerName[playerIndex]);Console.ReadKey(true);break;//踩到幸运轮盘case 1:Console.WriteLine("玩家【{0}】踩到幸运轮盘!请选择:a--交换位置,b--轰炸对方",playerName[playerIndex]);string type = Console.ReadLine();while (true){if (type=="a"){Console.WriteLine("玩家【{0}】选择与玩家【{1}】交换位置",playerName[playerIndex],playerName[1-playerIndex]);int temp = playerPosition[0];playerPosition[0] = playerPosition[1];playerPosition[1] = temp;Console.WriteLine("玩家【{0}】与玩家【{1}】交换位置完成,按下任意键刷新界面!", playerName[playerIndex], playerName[1 - playerIndex]);Console.ReadKey(true);break;}else if (type=="b"){Console.WriteLine("玩家【{ 0}】选择轰炸玩家【{ 1}】", playerName[playerIndex], playerName[1 - playerIndex]);playerPosition[1-playerIndex] -= 6;Console.WriteLine("玩家【{ 0}】轰炸玩家【{ 1}】完成,按下任意键刷新界面!", playerName[playerIndex], playerName[1 - playerIndex]);Console.ReadKey(true);break;}else{Console.WriteLine("请输入正确的指令!请选择:a--交换位置,b--轰炸对方");type = Console.ReadLine();}}break;//踩到地雷case 2:Console.WriteLine("玩家【{0}】踩到地雷,退6格!按下任意键刷新界面",playerName[playerIndex]);playerPosition[playerIndex] -= 6;Console.ReadKey(true);break;//踩到暂停case 3:Console.WriteLine("玩家【{0}】踩到暂停,下一回合暂停!按下任意键刷新界面",playerName[playerIndex]);playerFlag[playerIndex] = true;break;//踩到时空隧道case 4:Console.WriteLine("玩家【{0}】踩到时空隧道,前进10步!按下任意键刷新界面", playerName[playerIndex]);playerPosition[playerIndex] += 10;Console.ReadKey(true);break;default:break;}}CheckPosition();Console.Clear();ShowTitle();ShowRule();InitialMap();DrawMap();#endregion}/// <summary>/// 断是否超越终点或者超出起点/// </summary>static void CheckPosition(){if (playerPosition[0] < 0){playerPosition[0] = 0;}if (playerPosition[0] > 99){playerPosition[0] = 99;}if (playerPosition[1] < 0){playerPosition[1] = 0;}if (playerPosition[1] > 99){playerPosition[1] = 99;}}


C#控制台实现飞行棋小游戏相关推荐

  1. C# 飞行棋小游戏 (控制台应用)

    目录 C# 控制台飞行棋小游戏 简要介绍 游戏画面 规则说明 游戏代码 `Entry.cs` `Operate.cs` `Map.cs` `Player.cs` 其他问题 C# 控制台飞行棋小游戏 简 ...

  2. C#实现一个控制台飞行棋小游戏(附源码)

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

  3. C# 实现飞行棋小游戏

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

  4. 【全栈计划 —— 编程语言之C#】 C# 实现双人飞行棋小游戏

    文章目录 前言 项目结构流程图 项目实现 一.游戏开始界面 二.初始化游戏地图 三.绘制飞行棋地图 四.玩游戏具体逻辑 ① 创建两个玩家角色 ② 具体走到每个关卡触发的结果 ③ 判断胜利 ④ 回首调优 ...

  5. python飞行棋小游戏

    import random # 地图初始坐标 Maps = [0] *100 # 玩家A和玩家B的初始坐标 PlayerPos = [0]*2 # 存储玩家姓名 playerNames = [&quo ...

  6. 【C#】制作简单的飞行棋小游戏

    飞行棋双人小游戏 目标:实现飞行棋游戏基础功能 玩家在地图触发道具: 获得道具,可以进行一次选择 1–交换位置 2–让对方退随机格子 踩到炸弹,让对方暂停一回合 乘上了飞机,前进10格 进入隧道,将随 ...

  7. C#-飞行棋小游戏的前识 067

    1) Console.Title 这是Console类的一个属性用于设置控制台的标题 2)Console.Clear() 不用说是一个方法,用于清除控制台屏幕上的文字,只清除该代码中方法前面输出的内容 ...

  8. C#基础知识---飞行棋小游戏

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

  9. 记录基础学习第二_小项目_飞行棋小游戏

    飞行棋项目: 1.游戏头(要求每一个句子显示不同的颜色 )  //这里用到了Console类中的ForegroundColor属性 取值是枚举类型ConsoleColor中的值             ...

最新文章

  1. Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作
  2. 嵌入式科普:基本概念,设计流程,开发特点,如何学习
  3. g4e基础篇#2 Git分布式版本控制系统的优势
  4. 用虚拟机把ubuntu安装到TF卡上
  5. 前端学习(2413):关于有默认子路由的路由name
  6. 深度学习笔记(48) 内容代价函数
  7. 3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
  8. MongoDB的选举过程
  9. 适合于小团队且周期短的产品迭代的APP测试流程
  10. CentOS7学习笔记--PHP环境安装
  11. java解释器是哪个命令_宽恕命令解释器的最佳Java库(IES)
  12. python标准库之collections
  13. qt mdi 子窗口关闭再打开_QT 信号的使用方法
  14. Object.entries()方法的使用和实现
  15. Chinaz:谈谈近期的安全事件
  16. OO ALV中的data_changed、data_changed_finished事件介绍
  17. 院士李德毅:大数据认知(演讲全文)
  18. ShortCut Key——Google
  19. 懂得爱――在亲密关系中成长
  20. hbase表按rowkey和时间清理数据

热门文章

  1. 王者荣耀中皮肤和英雄技能java实现
  2. 【Docker】配置镜像加速器(以腾讯云为例)
  3. Axure 8.1.0.3381 激活码 10月20号更新 亲测可用
  4. 2006-2020年10月各类型国债利率
  5. 软考复盘:我的一些复习经验分享
  6. 如何在UnrealEngine虚幻引擎中加载Web页面
  7. 分享公众号预约系统怎么做_微信公众号制作线上预约系统步骤
  8. 进原神显示服务器错误黑屏,《原神》数据异常怎么办 数据异常问题解决方法...
  9. Vue全家桶+Socket.io+Koa2打造一个智能聊天室 接口已开放
  10. 安卓Android Studio标签