【C#项目实战】控制台游戏勇士斗恶龙(1)——游戏初始设置以及开始界面

在这里插入图片描述

君兮_的个人主页

即使走的再远,也勿忘启程时的初心

C/C++ 游戏开发

Hello,米娜桑们,这里是君兮_,最近开始正式的步入学习游戏开发的正轨,想要通过写博客的方式来分享自己学到的知识和经验,这就是开设本专栏的目的。希望这些独立的C#小项目能对做游戏的你有所帮助,毕竟学会游戏开发的最好的上手方式就是自己做一款游戏!!

勇士救公主

  • 前言
  • 一.勇士救公主流程图
  • 二.项目实现
    • 1.游戏流程
    • 2.项目解析
    • 3.初始的设置
    • 4.开始界面
    • 5.该模块源码
  • 总结

前言

  • 本专栏主要是分享一些纯C#的项目开发流程,后面如有结合Unity开发的游戏会有专门的专栏,同时由于任何一个独立的项目都是非常复杂的,哪怕是简单的小项目做完整都至少需要4~500行代码,因此本专栏的独立项目多半会分不同的板块来分批次讲解,这样一是能拆分板块减小项目开发难度,二也能够便于大家理解方便大家跟着博客自己上手设计。
  • 还在更新中的项目,会在更新之后把相关链接放在本博客的开头,我也会在开设一个新项目时尽快更完方便大家查阅的!!
  • 同时在每个项目的开头,都会把本项目的流程图放在开头,方便大家检索,当然,我更加希望,大家在学习一段时间后,能不看我的讲解只看流程图就能把这个项目给实现了,能做到这样那么恭喜你真正入门了。

一.勇士救公主流程图

在这里插入图片描述

二.项目实现

1.游戏流程

  • 该游戏的大体流程是玩家通过打败恶龙来到公主身边拯救公主。如果挑战成功,救出公主,则游戏胜利,如果不幸被恶龙击败,则游戏结束。
  • 开始界面
    在这里插入图片描述
  • 游戏界面
    在这里插入图片描述
  • 营救公主
    在这里插入图片描述
  • 游戏结束界面
    在这里插入图片描述
  • 麻雀虽小,五脏俱全,游戏的制作正是要从这种简单的项目一步一步来的,废话不多说,开始我们的学习吧!!

2.项目解析

  • 该项目主要分为几块,场景设置,开始界面的设置和切换,游戏界面的地图的设计及角色的初始化,玩家的移动逻辑以及游戏的战斗逻辑,救出公主的逻辑,胜利或者失败后进入的结束界面的设置。
  • 今天,我们主要来讲初始的一些设置以及开始界面的布置。

3.初始的设置

  • 首先,我们需要先来完成一些基础的设置。
  • 由于我们是一个控制台窗口的小游戏,因此我们需要先设置一下控制台窗口以及缓冲区的大小
  int w = 60;int h = 40;Console.SetWindowSize(w, h);//控制台窗口大小Console.SetBufferSize(w, h);//缓冲区大小
  • 其实这两个函数第一个传入的参数为设置的宽度,第二个传入的参数为设置的高度
    在这里插入图片描述
  • 此时,在你的电脑上还有光标闪烁,我们需要把光标给隐去
//隐藏光标Console.CursorVisible = false;//false为隐去,true为显示
  • 好了,做了以上的基本设置,我们来进行开始界面的设置

4.开始界面

  • 在开始之前,我们不妨想想,我们这个游戏有三个界面,我们要怎么实现不同界面的切换呢?
  • 在这里,我们可以考虑到用switch来进行分组,用不同的条件来区别不同的界面,然后在不同的case下实现不同界面的不同功能。这样在切换不同界面时,我们只需改变条件让程序进入不同case即可。
int nowSceneID = 1;
//不同的场景进行不同的逻辑处理
switch (nowSceneID)
{//开始界面case 1:break;//游戏界面case 2:break;//结束界面case 3:break;default:break;
}
  • 这样,我们就能通过在代码中改变nowScene的值来切换不同的场景了
  • 同时,我们要注意,不能让游戏主动退出,而是通过玩家的输入才能退出,因此我们不妨将以上的逻辑放入一个死循环中,这样我们就能通过控制循环来控制游戏的退出了。

在这里插入图片描述

  • 下面我们就这case 1里实现我们开始界面的功能
  • 我们的开始界面,首先得有我们的游戏名称吧
case 1:Console.Clear();//清屏Console.SetCursorPosition(w/2-5,10);//设置输入坐标Console.WriteLine("勇士斗恶龙");
  • 先介绍一下SetCursorPosition函数。我们的控制台坐标的坐标轴(0,0)在左上角,因此增加传入参数的大小输入位置是往右往下的,关于坐标的设置,相信聪明的你自己动手试一下就能明白其中的原理
    在这里插入图片描述

  • 注意:如果你这里一直闪屏是由于你一直在循环清屏造成的,属于正常现象,不要慌,等下会解决的,我们继续

  • 好了,接下来是开始界面中最复杂的一段,我们怎么实现按W键和S键点亮”开始游戏“或“结束游戏”,来提醒玩家目前的选项呢?
    在这里插入图片描述

  • 这里我们来分析一下,其实逻辑是非常简单的,首先,当刚进入时,我们让程序进入让开始游戏亮,退出游戏不亮的场景,而玩家按下“S”,就切换到“退出游戏”亮上,再按下“W”就切回“开始游戏”亮的情况。

  • 哎,是不是和刚才的场景切换逻辑有亿点点相像呢?没错,这是也可以通过while结合switch的方法实现!!

 //当前选项的编号int nowSelIndex = 0;//因为要输入 我们可以构造一个开始界面的死循环//专门用来处理 开始场景相关的逻辑while (true){//显示内容检测输入//设置光标位置,再显示内容Console.SetCursorPosition(w / 2 - 4, 12);//根据当前选择的编号来决定是否变色Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;//三目操作符结合设置字体颜色的函数Console.Write("开始游戏");Console.SetCursorPosition(w / 2 - 4, 14);Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("退出游戏");//检查玩家输入的键并且不会在控制台上显示输入内容char input = Console.ReadKey(true).KeyChar;switch (input){case 'W':case 'w':nowSelIndex = 0;break;case 'S':case 's':nowSelIndex = 1;break;}}
  • 很简单的逻辑,通过 nowSelIndex的值进行标记,初始为0,如果按下“S”键就让nowSelIndex = 1,此时开始游戏为白,退出游戏为红,想再切换为开始游戏为红退出游戏为白就按下”W“键即可。
  • 这里是你需要注意的地方:
  //检查玩家输入的键并且不会在控制台上显示输入内容char input = Console.ReadKey(true).KeyChar;
  • 当ReadKey括号中的值为true时,输入的值就不会显示在控制台上了,同时我们由于每次进入下一次循环中都会清屏也不会影响游戏的运行。这样就达到了我们的目的,我们来进行下一步。
  • 同时,我们实现“开始游戏”和“退出游戏”的标记提醒后,该进行选择了,这里我们就通过来按“J”来进行下一步,在“开始游戏”高亮时,按J切换到游戏场景,在退出游戏时高亮,按J就退出程序。
 case 'j':case 'J':if(nowSelIndex == 0){//1.改变场景ID,进入游戏场景nowSceneID = 2;//2.要退出内层循环whileisQuitWhile = true;}else{//关闭控制台Environment.Exit(0);}break;if (isQuitWhile == true)break;
  • 这里我们定义了一个bool类型的isQuitWhile来实现切换场景的目的,由于我们这里的break都是switch都是里的,只能退出switch,因此需要通过这个bool类型的变量达到退出内层循环进入外层的switch里重新选择的目的,而由于此时我们改变了 nowSceneID的值,自然就可以切换进入游戏场景了。

5.该模块源码

  • 由于上面的讲述是分步拆分的,下面为大家提供该部分的源码来帮助大家理解该部分的内容
namespace 勇士斗恶龙
{class Program{static void Main(string[] args){int w = 60;int h = 40;Console.SetWindowSize(w, h);Console.SetBufferSize(w, h);//隐藏光标Console.CursorVisible = false;int nowSceneID = 1;while (true){//不同的场景进行不同的逻辑处理switch (nowSceneID){case 1:Console.Clear();Console.SetCursorPosition(w / 2 - 5, 10);Console.WriteLine("勇士斗恶龙");//当前选项的编号int nowSelIndex = 0;//因为要输入 我们可以构造一个开始界面的死循环//专门用来处理 开始场景相关的逻辑while (true){//用一个标识用来退出此循环bool isQuitWhile = false;//显示内容检测输入//设置光标位置,再显示内容Console.SetCursorPosition(w / 2 - 4, 12);//根据当前选择的编号来决定是否变色Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("开始游戏");Console.SetCursorPosition(w / 2 - 4, 14);Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("退出游戏");//检查玩家输入的键并且不会在控制台上显示输入内容char input = Console.ReadKey(true).KeyChar;switch (input){case 'W':case 'w':nowSelIndex = 0;break;case 'S':case 's':nowSelIndex = 1;break;case 'j':case 'J':if (nowSelIndex == 0){//1.改变场景IDnowSceneID = 2;//2.要退出内层循环whileisQuitWhile = true;}else{//关闭控制台Environment.Exit(0);}break;}if (isQuitWhile == true)break;}break;case 2:break;case 3:break;default:break;}}}}
}

总结

  • 今天的内容到这里就结束了,总的来说这部分的内容还是比较简单的,不妨跟着博主自己动手尝试一下,毕竟很多问题只有自己动手试过了才能发现,如果你在实现过程中遇到任何问题,欢迎在评论区指出或者私信我!!
  • 后面的内容很快更新,感兴趣不妨关注一下错过后面的内容哦!!(小小预告一下,接下来就开始我们游戏界面的内容啦,这一块才是真正的重头戏)

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下再走呗。你们的支持就是我更新的动力!!!

**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

植物大战僵尸各种僵尸攻略

前言 此文章为“植物大战僵尸”专栏中的009刊(2023年9月第八刊),欢迎订阅。版权所有。 注意: 1.本博客适用于pvz无名版; 2.pvz指植物大战僵尸(Plants VS Zonbies); 3.本文以耗费低做标准&am…

老太太阿姨收割机秀才被封

除了他自己和平台官方,恐怕没有人知道详细数字,不过坊间流传着一句话,叫“秀才和一笑倾城一场直播,就可以榨光一个省的老人低保 可见吸金是有多么恐怖 一笑倾城是秀才的“姊妹篇”,秀才专供老太太,一笑倾城…

uni-app:自带的消息提示被遮挡的解决办法(自定义消息提示框)

效果&#xff1a; 代码&#xff1a; 1、在最外层或者根组件的模板中添加一个容器元素&#xff0c;用于显示提示消息。例如&#xff1a; <div class"toast-container" v-if"toastMessage"><div class"toast-content">{{ toastMessa…

EMERSON A6500-CC 机架接口模块 AMS参数

EMERSON A6500-CC 机架接口模块 AMS参数 ModBus和机架接口模块设计用于工厂的高可靠性 最关键的旋转机械。它从所有AMS A6500 ATG模块读取参数 并通过ModBus TCP/IP和/或ModBus RTU&#xff08;串行&#xff09;输出这些参数。 此外&#xff0c;OPC UA可用于向第三方系统传输数…

华为Mate 60和iPhone 15选哪个?

最近也有很多朋友问我这个问题来着&#xff0c;首先两款手机定位都是高端机&#xff0c;性能和体验各有千秋&#xff0c;各自有自己的铁杆粉。 但是让人意想不到的是华为mate60近日在海外越来越受欢迎和追捧&#xff0c;甚至是引起了不少人的抢购&#xff0c;外观设计和…

最详细的CompletableFuture异步编程-进阶篇

1、异步任务的交互 异步任务交互指 将异步任务获取结果的速度相比较&#xff0c;按一定的规则( 先到先用 )进行下一步处理。 1.1 applyToEither applyToEither() 把两个异步任务做比较&#xff0c;异步任务先到结果的&#xff0c;就对先到的结果进行下一步的操作。 Complet…

C/C++操作加密与不加密的zip文件

为了后续的方便操作zip文件&#xff0c; 将所有的操作封装成了一个动态库了。 /*** \description 从压缩包文件中解压出指定的文件到指定的目录.* \author sunsz* \date 2023/09/09**/ LIBZIP_API int UnpackFile(const char* password, char zipfilename[], char filename_…

如何使用ArcGIS去除卫星影像上的云

虽然目前发布的地图都是对云量进行过筛选&#xff08;一般低于20%&#xff09;&#xff0c;但是还是有可能会遇到有云的情况&#xff08;特别是下载历史影像的时候&#xff09;&#xff0c;那么这些云应该怎么去除呢&#xff0c;我们可以尝试使用ArcGIS进行处理。 识别像素 将…

pb:垃圾收集函数

PB系统函数大全 - 垃圾收集函数 垃圾收集函数让应用程序能够控制何时开始收集系统产生的垃圾。 1、GarbageCollect() 功 能:强制系统立即开始收集垃圾。 语 法:GarbageCollect ( ) 返回值:无。 用 法:该函数强制系统立即开始收集垃圾。PowerBuilder将查找并标识未…

Python一行命令搭建HTTP服务器并外网访问 - 内网穿透

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言&#xff0c;其语法简单且语句清晰&#xff0c;而且python有…

CC-Proxy配置实验室网络代理服务器

1.安装CCProxy 2.关闭自己电脑防火墙&#xff0c;打开CCProxy软件 3.使用MobaXterm远程工具来连接服务器&#xff0c; 输入&#xff1a; export http_proxy"自己电脑的ip地址:808" export https_proxy"自己电脑的ip地址:808"之后可以输入如下命令来检查…

TCP三次握手和四次挥手

目录 TCP连接建立 问题思考 1.为什么要三次握手&#xff1f; 2.三次握手一定要保证成功吗&#xff1f; TCP连接释放 问题思考 ​ 1.理解TIME-WAIT状态 2.理解CLOSE-WAIT状态 TCP连接建立 TCP建立连接的过程叫作握手&#xff0c;握手需要在客户和服务器之间交换三个TCP…

详解Typescript中的泛型

泛型 在 TypeScript 中&#xff0c;泛型&#xff08;Generics&#xff09;是一种在编写可重用、灵活的代码时使用的工具。它允许我们在定义函数、类或接口时使用类型参数&#xff0c;以便在使用时指定具体的类型。 通过使用泛型&#xff0c;我们可以编写更通用的代码&#xff…

tomcat的优化

TOMCAT的优化 tomcat的优化主要是从三个方面进行的&#xff0c;第一个是 tomcat配置的优化第二是对JVM虚拟机的优化第三是对Linux系统内核的优化&#xff0c;配置文件中的优化主要在tomcat中server.xml文件夹内 tomcat配置文件的优化 1、 maxThreads&#xff1a; Tomcat 使用…

调用微信公众号创建会员卡接口报错48001

调用文档&#xff1a;1.新版会员卡介绍 | 微信开放文档 接口地址&#xff1a; HTTP请求方式: POSTURL:https://api.weixin.qq.com/card/create?access_tokenACCESS_TOKEN 错误描述&#xff1a;48001 {"errcode":48001,"errmsg":"api unauthorized hi…

Fastjson反序列化漏洞

文章目录 一、概念二、Fastjson-历史漏洞三、漏洞原理四、Fastjson特征五、Fastjson1.2.47漏洞复现1.搭建环境2.漏洞验证&#xff08;利用 dnslog&#xff09;3.漏洞利用1)Fastjson反弹shell2)启动HTTP服务器3)启动LDAP服务4)启动shell反弹监听5)Burp发送反弹shell 一、概念 啥…

网站优化搜索引擎与关键词

网站优化搜索引擎与关键词 人们不应该高估搜索引擎的智商。这不利于seo的研究&#xff0c;事实上&#xff0c;搜索引擎是非常愚蠢的&#xff0c;让我们举一个非常简单的例子&#xff0c;你在搜索引擎中输入“教师”这个词&#xff0c;搜索引擎就会给出一个准确的搜索列表。我们…

U3D外包开发框架及特点

U3D&#xff08;Unity3D&#xff09;是一款流行的跨平台游戏开发引擎&#xff0c;用于创建2D和3D游戏以及交互性应用程序。U3D有许多常用的开发框架和库&#xff0c;这些框架和库可以扩展其功能&#xff0c;使开发人员更轻松地构建游戏和应用程序。以下是一些常用的U3D开发框架…

免费的敏捷项目管理,scrum开发软件

Scrum中非常强调公开、透明、直接有效的沟通&#xff0c;这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求&#xff0c;故事&#xff0c;任务之间的流转状态&#xff0c;可以使团队成员更加快速适应敏捷开发流程。 …

3D打印,耗材注意事项

目前我的3D打印机只用到PETG和PLA俩种耗材材料 PLA 喷头温度:200或200热床温度40~50移动速度&#xff0c;最好100%挤出速度和移动速度最好一致 PETG PETG这个材料比PLA感觉上更软一点,商家说PLA比PETG温度更低 喷头温度:220~250℃热床温度最好80℃移动速度&#xff0c;最好5…