飞行棋游戏代码(C#)

2023-11-06

220224飞行器v1.0

using System;

namespace AeroplaneChess
{
    class Program
    {
        //地图
        static int[] Maps = new int[100];
        //玩家A B坐标
        static int[] playerPos = new int[2];
        //玩家姓名
        static string[] playerNames = new string[2];
        //玩家回合标记
        static bool[] Flags = new bool[2];
        /// <summary>
        /// 主函数
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //游戏封面
            GameShow();
            #region 输入玩家姓名
            Console.WriteLine("请输入玩家A姓名");
            playerNames[0] = Console.ReadLine();
            while (playerNames[0]=="")
            {
                Console.WriteLine("玩家A姓名不能为空,请重新输入");
                playerNames[0] = Console.ReadLine();
            }
            Console.WriteLine("请输入玩家B姓名");
            playerNames[1] = Console.ReadLine();
            while (playerNames[1] == "" || playerNames[1] == playerNames[0])
            {
                if(playerNames[1] == "")
                {
                    Console.WriteLine("玩家B姓名不能为空,请重新输入");
                    playerNames[1] = Console.ReadLine();
                }
                if (playerNames[1] == playerNames[0])
                {
                    Console.WriteLine("玩家B姓名不能与玩家A相同,请重新输入");
                    playerNames[1] = Console.ReadLine();
                }
                    
            }
            #endregion
            Console.Clear();//清屏
            GameShow();
            Console.WriteLine("{0}的飞机用A表示,{1}的士兵用B表示", playerNames[0], playerNames[1]);
            //初始化地图
            InitMap();
            //显示棋盘
            DrawMap();
            //胜利界面

            //游戏逻辑
            while (playerPos[0] < 99 && playerPos[1] < 99)
            {
                if (Flags[0] == false)
                {
                    playGame(0);
                }
                else
                {
                    Flags[0] = false;
                }
                if(playerPos[0]>=99)
                {
                    Console.WriteLine("玩家{0}无耻的赢了玩家{1}",playerNames[0],playerNames[1]);
                    break;
                }
                if(Flags[1] == false)
                {
                    playGame(1);
                }
                else
                {
                    Flags[1] = false;
                }
                if (playerPos[1] >= 99)
                {
                    Console.WriteLine("玩家{0}无耻的赢了玩家{1}", playerNames[1], playerNames[0]);
                    break;
                }
                

            }//while
            Win();
        }//mian

        //
        static void Win()
        {
            Console.WriteLine(@"                                
          ■■■         ■■         
 ■■■■■ ■■ ■■     ■■■■■■■    ■■  
 ■■■■■ ■■ ■■     ■■■■■      ■■  
 ■■ ■■ ■■■■■■■■     ■■   ■■ ■■  
 ■■ ■■ ■■■■■■■■     ■■   ■■ ■■  
 ■■■■■■■  ■■    ■■■■■■■■ ■■ ■■  
 ■■ ■■    ■■    ■■■■■■■■ ■■ ■■  
 ■■ ■■  ■■■■■■     ■■■   ■■ ■■  
 ■■■■■  ■■■■■■    ■■■■■  ■■ ■■  
 ■■ ■■    ■■     ■■ ■■■■ ■■ ■■  
 ■■ ■■    ■■    ■■■ ■■ ■ ■■ ■■  
 ■■ ■■    ■■     ■  ■■      ■■  
 ■■ ■■ ■■■■■■■■     ■■      ■■  
■■ ■■■ ■■■■■■■■     ■■     ■■■  
■■ ■■               ■■     ■■   ");
        }
        /// <summary>
        /// 坐标限制
        /// </summary>
        static void ChangePos()
        {
            if(playerPos[0]<0)
            {
                playerPos[0] = 0;
            }
            if (playerPos[0] >= 99)
            {
                playerPos[0] = 99;
            }
            if (playerPos[1] < 0)
            {
                playerPos[1] = 0;
            }
            if (playerPos[1] >= 99)
            {
                playerPos[1] = 99;
            }
        }
        /// <summary>
        /// 玩游戏
        /// </summary>
        static void playGame(int playerNumber )
        {
            //随机数
            Random r = new Random();
            int rNumber = r.Next(1,7);

            Console.WriteLine("{0}按任意键开始投骰子", playerNames[playerNumber]);
            Console.ReadKey(true);
            Console.WriteLine("{0}掷出了{1}", playerNames[playerNumber], rNumber);
            playerPos[playerNumber] += rNumber;
            ChangePos();//如果不限制 siwtch出界限会崩溃
            Console.ReadKey(true);
            Console.WriteLine("{0}按任意键开始行动", playerNames[playerNumber]);
            Console.ReadKey(true);
            Console.WriteLine("{0}行动完了", playerNames[playerNumber]);
            Console.ReadKey(true);
            //玩家A可能踩到玩家B 方块 幸运轮盘 地雷 暂停 时空隧道
            if (playerPos[playerNumber] == playerPos[1-playerNumber])
            {
                Console.WriteLine("玩家{0}踩到了玩家{1},玩家{2}退6格", playerNames[playerNumber], playerNames[1- playerNumber], playerNames[1- playerNumber]);
                playerPos[1- playerNumber] -= 6;
                Console.ReadKey(true);
            }
            else
            {
                switch (Maps[playerPos[playerNumber]])
                {
                    case 0:
                        Console.WriteLine("玩家{0}踩到了方块,安全", playerNames[playerNumber]);
                        Console.ReadKey(true);
                        break;
                    case 1:
                        Console.WriteLine("玩家{0}踩到了幸运轮盘,请选择1--交换位置 2--轰炸对手", playerNames[playerNumber]);
                        string input = Console.ReadLine();
                        while (true)
                        {
                            if (input == "1")
                            {
                                Console.WriteLine("玩家{0}选择与玩家{1}交换位置", playerNames[playerNumber], playerNames[1- playerNumber]);
                                int temp = playerPos[playerNumber];
                                playerPos[playerNumber] = playerPos[1- playerNumber];
                                playerPos[playerNumber] = temp;
                                Console.WriteLine("交换完成!按下任意键继续游戏");
                                Console.ReadKey(true);
                                break;
                            }
                            else if (input == "2")
                            {
                                Console.WriteLine("玩家{0}选择轰炸玩家{1},玩家{2}退6格", playerNames[playerNumber], playerNames[1- playerNumber], playerNames[1- playerNumber]);
                                Console.ReadKey(true);
                                playerPos[1- playerNumber] -= 6;

                                Console.WriteLine("玩家{0}退了6格!按下任意键继续游戏", playerNames[1- playerNumber]);
                                Console.ReadKey(true);
                                break;
                            }
                            else
                            {
                                Console.WriteLine("只能输入1或者2 1--交换位置 2--轰炸对手");
                                input = Console.ReadLine();
                            }
                        }

                        break;
                    case 2:
                        Console.WriteLine("玩家{0}踩到了地雷,退6格", playerNames[playerNumber]);
                        Console.ReadKey(true);
                        playerPos[playerNumber] -= 6;
                        break;
                    case 3:
                        Console.WriteLine("玩家{0}踩到了暂停,暂停一回合", playerNames[playerNumber]);
                        Flags[playerNumber] = true;
                        Console.ReadKey(true);
                        break;
                    case 4:
                        Console.WriteLine("玩家{0}踩到了时空隧道,前进十格", playerNames[playerNumber]);
                        Console.ReadKey(true);
                        playerPos[playerNumber] += 10;
                        break;

                }//switch
            }//else
            ChangePos();
            Console.Clear();
            DrawMap();
        }


        /// <summary>
        /// 画地图
        /// </summary>
        static void DrawMap()
        {
            Console.WriteLine("图例:幸运轮盘◎   地雷☆   暂停▲   时空隧道※");
            #region 第一横行
            for (int i = 0; i < 30; i++)
            {
                Console.Write(DrawStringMap(i));
            }
            Console.WriteLine();
            #endregion
            #region 第一竖列
            for (int i = 30; i < 35; i++)
            {
                for (int j = 0; j < 29; j++)
                {
                    Console.Write("  ");                   
                }
                Console.Write(DrawStringMap(i));
                Console.WriteLine();
            }
            #endregion
            #region 第二横行
            for (int i = 64; i >=35; i--)
            {
                Console.Write(DrawStringMap(i));
            }
            Console.WriteLine();
            #endregion
            #region 第二竖列
            for (int i = 65; i < 70; i++)
            {
                Console.Write(DrawStringMap(i));
                Console.WriteLine();
            }
            #endregion
            #region 第三横行
            for (int i = 70; i < 100; i++)
            {
                Console.Write(DrawStringMap(i));
            }
            Console.WriteLine();
            #endregion
        }
        /// <summary>
        /// 从画地图方法中抽象出来的一个方法
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        static string DrawStringMap(int i)
        {
 
            string str = "";
            //如果玩家坐标相同,画一个尖括号
            if (playerPos[0] == playerPos[1] && playerPos[1] == i)
            {

                str = "<>";
            }
            else if (playerPos[0] == i)
            {

                str = "A";
            }
            else if (playerPos[1] == i)
            {

                str = "B";
            }
            else
            {
                switch (Maps[i])
                {
                    case 0:
                        Console.ForegroundColor = ConsoleColor.Red;
                        str = "□";
                        break;
                    case 1:
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        str = "◎";
                        break;
                    case 2:
                        Console.ForegroundColor = ConsoleColor.Green;
                        str = "☆";
                        break;
                    case 3:
                        Console.ForegroundColor = ConsoleColor.Blue;
                        str = "▲";
                        break;
                    case 4:
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        str = "※";
                        break;
                }
            }


            return str;
   
        }

        /// <summary>
        /// 初始化棋盘
        /// </summary>
        static void InitMap()
        {
            //幸运轮盘◎1
            int[] luckytuen = { 6, 23, 40, 55, 69 };
            for (int i = 0; i < luckytuen.Length; i++)
            {
                Maps[luckytuen[i]] = 1;
            }
            //地雷☆2
            int[] lanMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };
            for (int i = 0; i < lanMine.Length; i++)
            {
                Maps[lanMine[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, 72, 88, 90 };
            for (int i = 0; i < timeTunnel.Length; i++)
            {
                Maps[timeTunnel[i]] = 4;
            }
        }

        /// <summary>
        /// 画游戏头
        /// </summary>
        static void GameShow()
        {
            
            //背景色
            //Console.BackgroundColor = ConsoleColor.Red;
            //前景色 字体颜色
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("**************************");
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("**************************");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("**********飞行棋**********");
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine("*********20220203*********");
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("************肖******V1.0**");
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine("**************************");
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

飞行棋游戏代码(C#) 的相关文章

  • 有没有快速创建集合的方法?

    目前我正在创建一个像这样的新集 std set a s s insert a1 s insert a2 s insert a3 s insert a10 有没有办法创建s在一行 int myints 10 20 30 40 50 std s
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 运行选定的代码生成器时出错:“未将对象引用设置到对象的实例。”错误?

    我已经尝试了所有解决方案 例如修复 VS 2013 但没有用 当您通过右键单击控制器文件夹来创建控制器并添加控制器时 然后右键单击新创建的控制器的操作并选择添加视图 当我尝试创建视图时 就会发生这种情况 它不是一个新项目 而是一个现有项目
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • IEnumerable.Except 不起作用,那么我该怎么办?

    我有一个 linq to sql 数据库 非常简单 我们有 3 个表 项目和用户 有一个名为 User Projects 的连接表将它们连接在一起 我已经有了一个获得的工作方法IEnumberable
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i
  • 使我的 COM 程序集调用异步

    我刚刚 赢得 了在当前工作中维护用 C 编码的遗留库的特权 这个dll 公开使用 Uniface 构建的大型遗留系统的方法 除了调用 COM 对象之外别无选择 充当此遗留系统与另一个系统的 API 之间的链接 在某些情况下 使用 WinFo
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • Qt编写自定义控件:自定义表头实现左右两端上部分圆角

    如上图 左上角和右上角凸出来了 设置表格圆角和表头圆角和QHeaderView section圆角都不管用 解决此问题需要重写QHeaderView的paintSection 函数 class CustomHeaderView public
  • 在文件选择打开方式里,无法添加.exe程序怎么解决

    转载自 https blog csdn net xfdywy article details 50967932 和 https blog csdn net sinat 26472165 article details 83505792 在设
  • 阿里云的ECS服务器的使用

    最近购买了阿里云的ECS服务器 对他的基本使用做了记录 服务器配置 CPU 2核 内存 4GB 数据盘 100G 操作系统 Ubuntu 12 04 32位 带宽计费方式 按固定带宽 当前使用带宽 1Mbps 网络类型 经典网络 1 登陆服
  • 漫谈图像超分辨率技术

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 作为将模糊的图像变清晰的神奇技术 图像超分辨率技术在游戏 电影 相机 医疗影像等多个领域都有广泛的应用 在这篇文章中 微软亚洲研究院的研究员们为你总结了图像超分辨率问题中
  • IDEA+Maven 打jar包

    IDEA Maven 打jar包 包涵依赖jar 最新修改 以前写的打包方式可能看起来有些繁琐 这里给出进一步简洁的解决方案简单粗暴 写在前面 这两天一直在整 gu 理 dao IDEA 用Maven打jar包 网上的教程是各式各样 但是都
  • Chapter 2 Trajectory Indexing and Retrival

    This 26 pages paper is a bit short as a survey but a little too long for me the first day to write a papaer analysis But
  • 什么是Progressive Web App(PWA)?它们有哪些特点?

    聚沙成塔 每天进步一点点 专栏简介 渐进式Web App简介 PWAs的主要特点 总结 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 欢迎来到前端入门之旅 感兴趣的可以订阅本专栏哦 这个专栏是为那些对Web开发感兴趣 刚刚踏入
  • 毕业设计-基于 BERT 的中文长文本分类系统

    目录 前言 课题背景和意义 实现技术思路 一 文本分类的相关技术 二 文本表示模型 三 文本分类模型 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力
  • ResNet的改进系列:ResNext和Res2Net

    ResNext paper https arxiv org abs 1611 05431 code https github com facebookresearch ResNeXt Res2Net paper https arxiv or
  • 关于HTTP的8种请求方法

    关于HTTP请求方法中的8种请求方法 简单介绍 HTTP是超文本传输协议 其定义了客户端与服务器端之间文本传输的规范 HTTP默认使用80端口 这个端口指的是服务端的端口 而客户端使用的端口是动态分配的 当我们没有指定端口访问时 浏览器会默
  • Quartus和ModelSim软件关联

    Quartus和ModelSim软件关联 QuartusII 18 1 和 ModelSim 10 5b 软件的关联 Altera 自身在仿真领域做的并不是很好 所以 Quartus 软件兼容 Mentor 公司的ModelSim 仿真软件
  • hutool实现excel的导出,包括级联下拉

    废话不多说 直接上代码 1 pom xml
  • 什么是 Web 3.0?

    很多人并不理解什么是 Web 3 0 本文尝试以最简洁的语言来解释一下我对于这个问题的理解 01 互联网范式迭代 Web 1 0 也就是第一代互联网 是静态互联网 主要的应用是网络媒体 各网媒雇佣一大批编辑 将图文并茂的内容发布成为网页 读
  • 无法启动程序 xxx.exe,系统找不到指定的文件

    1 问题现象 解绝方法 语法问题 scanf函数调用后边没写分号 导致没能编译生成可执行程序 2 问题现象 解绝方法 printf函数错写成print 导致语法错误 3 问题现象 解决方法 头文件写错了 找不到stdio h 注意 这几种问
  • JavaWeb 项目部署到 Aliyun 服务器

    JavaWeb 项目部署到 Aliyun 服务器 准备工作 环境 Java8 IDEA tomcat8 5 本次 web 项目在本地 tomcat 跑通 打包 项目没问题后进行打包 选择 Artifacts gt 点击 号 gt 右击选择
  • 【node】3、fs文件读写流

    fs createReadStream读取指定文件的可读流 const fs require fs const rs fs createReadStream 1 mp4 resume开启可读流 rs resume 通过rs readable
  • 《数据结构题集》求k阶斐波那契序列的第m项值的函数算法

    这个属于学习笔记一篇 刚看到这个题的时候 花了好半天时间 才搞明白题目到底是啥意思 原来我之前接触的斐波那契数列都是2阶的 有了思路之后就开始动手操作 经过我的验证 2阶的前14项的运算结果与百度百科上的一致 5阶前10项与我手动计算结果一
  • tp5下,保存公众号access_token

    在开发公众号的时候 免不了要用到公众号的接口 基于接口 它是需要access token做基础的 而access token它的有效期是有限定的 所以在获取到access token的时候要注意保存 1 在控制器中建一个方法 专门用来保存a
  • Mybatis中"if else"的写法

    在SSM框架中编写mapper xml的时候 需要对数据库进行操作 在对数据库操作的时候有时会遇到需要判断字段内容的情况 如果只需要判断字段满足某个条件 那么直接使用
  • 飞行棋游戏代码(C#)

    220224飞行器v1 0 using System namespace AeroplaneChess class Program 地图 static int Maps new int 100 玩家A B坐标 static int play