C#实现控制台飞行棋小游戏

作者:王梦翰 时间:2023-01-01 15:43:12 

本文实例为大家分享了C#实现控制台飞行棋小游戏的具体代码,供大家参考,具体内容如下


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace 飞行棋小游戏
{
   class Program
   {
       /// <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;
               }
           }
           #endregion
           Console.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();
       }

/// <summary>
       /// 绘制游戏标题
       /// </summary>
       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("****************************************");
       }
       /// <summary>
       /// 绘制游戏规则
       /// </summary>
       static void ShowRule()
       {
           Console.ForegroundColor = ConsoleColor.Yellow;
           Console.WriteLine("------------------------------------------------------------");
           Console.WriteLine("玩家【{0}】使用A表示", playerName[0]);
           Console.WriteLine("玩家【{0}】使用B表示", playerName[1]);
           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("8.“<>”代表玩家AB位置重合");
           Console.WriteLine("------------------------------------------------------------");
       }
       /// <summary>
       /// 初始化地图
       /// </summary>
       static void InitialMap()
       {
           //确定“◎”=1
           int[] lunckturn = { 6, 23, 40, 55, 69, 83 };
           for (int i = 0; i < lunckturn.Length; i++)
           {
               int index = lunckturn[i];
               Maps[index] = 1;
           }
           //确定“★”=2
           int[] landmine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
           for (int i = 0; i < landmine.Length; i++)
           {
               Maps[landmine[i]] = 2;
           }
           //确定“▲”=3
           int[] pause = { 9, 27, 60, 93 };
           for (int i = 0; i < pause.Length; i++)
           {
               Maps[pause[i]] = 3;
           }
           //确定“卍”=4
           int[] 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>
       /// <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]);
           #endregion
           CheckPosition();
           #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#实现控制台飞行棋小游戏

来源:https://blog.csdn.net/ITwangmenghan/article/details/94429440

标签:C#,飞行棋
0
投稿

猜你喜欢

  • java 使用Scanner类接收从控制台输入的数据方式

    2023-10-23 08:54:57
  • .NET Core使用C#扫描并读取图片中的文字

    2022-03-09 11:06:54
  • C#支付宝新版支付请求接口调用

    2023-02-23 15:50:45
  • 浅谈java中的重载和重写的区别

    2023-03-31 04:45:57
  • 基于SpringMVC入门案例及讲解

    2023-04-06 17:34:43
  • android实现简单左滑删除控件

    2023-11-10 03:01:29
  • Android使用CountDownTimer模拟短信验证倒计时

    2022-10-24 18:00:28
  • Android seekbar实现可拖动进度条

    2023-04-02 20:34:45
  • 解决Android Studio导入项目非常慢的办法

    2022-12-07 19:44:31
  • 详解Spring Boot中MyBatis的使用方法

    2023-08-22 17:25:01
  • c# 二分查找算法

    2023-10-24 04:42:45
  • java解析json数组方式

    2023-08-10 17:22:14
  • Java看完秒懂版熔断和降级的关系

    2023-11-06 01:12:13
  • shiro实现单点登录(一个用户同一时刻只能在一个地方登录)

    2022-07-04 01:37:55
  • java 中Spark中将对象序列化存储到hdfs

    2022-09-17 04:06:18
  • Java并发编程示例(八):处理线程的非受检异常

    2022-03-23 14:15:57
  • SpringBoot 自定义+动态切换数据源教程

    2021-10-13 21:30:39
  • Java实现导出ZIP压缩包的方法

    2023-05-06 04:58:57
  • 详解Java中super的几种用法并与this的区别

    2023-07-12 01:21:23
  • C#图表算法之无向图

    2021-08-08 22:50:20
  • asp之家 软件编程 m.aspxhome.com