简单小游戏制作

控制台基础设置

//隐藏光标
Console.CursorVisible = false;
//通过两个变量来存储舞台的大小
int w = 50;
int h = 30;
//设置舞台(控制台)的大小
Console.SetWindowSize(w, h);
Console.SetBufferSize(w, h);

多个场景

int nowSceneID = 1;
while (true)
{//不同的场景ID,进行不同的逻辑处理switch (nowSceneID){//开始场景case 1:Console.Clear();Console.WriteLine("开始场景");break;//游戏场景case 2:Console.Clear();Console.WriteLine("游戏场景");break;//结束场景case 3:Console.Clear();Console.WriteLine("结束场景");break;}
}

开始场景逻辑实现

Console.SetCursorPosition(w / 2 - 7, 4);
Console.Write("勇者斗恶龙");//当前选项的编号
int nowSelIndex = 0;
//因为要输入,完没可以构造一个开始界面自己的死循环
//专门用来处理开始场景相关逻辑
while (true)
{//用一个标识来处理想要在while循环内部的switch逻辑执行时希望退出外层循环时改变标识即可。bool isQuitWhite = false;//显示内容//先设置光标位置,再显示内容//根据当前选择的编号来决定是否变色。Console.SetCursorPosition(w / 2 - 6, 7);Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("开始游戏");Console.SetCursorPosition(w / 2 - 6, 9);Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("退出游戏");//检测输入//检测玩家输入的一个键内容,并且不会在控制台上显示输入的内容char input=Console.ReadKey(true).KeyChar;switch (input){case 'w':case 'W':--nowSelIndex;if (nowSelIndex < 0)nowSelIndex = 0;break;case 's':case 'S':++nowSelIndex;if (nowSelIndex > 1)nowSelIndex = 1;break;case 'j':case 'J':if (nowSelIndex == 0){//1.改变当前选择的场景IDnowSceneID = 2;//2.退出内层while循环isQuitWhite = true;}else{//关闭控制台Environment.Exit(0);}break;}if (isQuitWhite){break;}
}

游戏场景

不变的红墙

//设置颜色为红色
Console.ForegroundColor = ConsoleColor.Red;
//画墙          
for (int i = 0; i <= w - 2; i++)
{//上方墙Console.SetCursorPosition(i, 0);Console.Write("■");//下方墙Console.SetCursorPosition(i, h - 1);Console.Write("■");//中间墙Console.SetCursorPosition(i, h - 6);Console.Write("■");
}for (int i = 0; i < h; i++)
{//左边的墙Console.SetCursorPosition(0, i);Console.Write("■");//右边的墙Console.SetCursorPosition(w - 2, i);Console.Write("■");
}

boss相关

int bossX = 24;
int bossY = 15;
int bossAtkMin = 7;
int bossAtkMax = 13;
int bossHp = 100;
string bossIcon = "□";
//声明一个颜色变量
ConsoleColor bossColor = ConsoleColor.Green;//boss活着时才绘制
if (bossHp > 0)
{Console.SetCursorPosition(bossX, bossY);Console.ForegroundColor = bossColor;Console.Write(bossIcon);
}

主角移动相关

int playerX = 4;
int playerY = 5;
int playerAtkMin = 8;
int playerAtkMax = 12;
int playerHp = 100;
string playerIcon = "●";
ConsoleColor playerColor = ConsoleColor.Yellow;
//玩家输入的内容,外面声明,节约性能
char playerInput;
//画出玩家
Console.SetCursorPosition(playerX, playerY);
Console.ForegroundColor = playerColor;
Console.Write(playerIcon);
//得到玩家的输入
playerInput = Console.ReadKey(true).KeyChar;
//擦除
Console.SetCursorPosition(playerX, playerY);
Console.Write(' ');
//改位置
switch (playerInput)
{case 'W':case 'w':--playerY;if (playerY < 1){playerY = 1;}//位置如果和boss重合了,并且boss没有死else if (playerX == bossX && playerY == bossY && bossHp > 0){//拉回去++playerY;}break;case 'A':case 'a':playerX -= 2;if (playerX < 2){playerX = 2;}//位置如果和boss重合了,并且boss没有死else if (playerX == bossX && playerY == bossY && bossHp > 0){//拉回去playerX += 2;}break;case 'S':case 's':++playerY;if (playerY > h - 7){playerY = h - 7;}//位置如果和boss重合了,并且boss没有死else if (playerX == bossX && playerY == bossY && bossHp > 0){//拉回去--playerY;}break;case 'D':case 'd':playerX += 2;if (playerX > w - 4){playerX = w - 4;}else if (playerX == bossX && playerY == bossY && bossHp > 0){//拉回去playerX -= 2;}break;case 'J':case 'j'://开始战斗if ((playerX == bossX && playerY == bossY - 1 || playerX == bossX && playerY == bossY + 1 || playerX == bossX - 2 && playerY == bossY || playerX == bossX + 2 && playerY == bossY) && bossHp > 0){isFight = true;//可以开始战斗Console.SetCursorPosition(2, h - 5);Console.ForegroundColor = ConsoleColor.White;Console.Write("开始和boss战斗了,按J键继续....");Console.SetCursorPosition(2, h - 4);Console.Write("玩家当前的血量为{0}", playerHp);Console.SetCursorPosition(2, h - 3);Console.Write("boss当前的血量为{0}", bossHp);}break;}

主角和boss战斗

bool isFight = false;
//只会处理J键
if (playerInput == 'j' || playerInput == 'J')
{//在这里判断玩家或者boss是否死亡,如果死亡了,继续之后的流程if (playerHp < 0){//游戏结束//输掉了,应该直接显示游戏结束界面nowSceneID = 3;break;}else if (bossHp < 0){//去营救公主//boss擦除Console.SetCursorPosition(bossX,bossY);Console.Write(' ');isFight = false;}else{//去处理按j键打架//玩家打bossRandom random = new Random();//得到随机攻击力int atk = random.Next(playerAtkMin, playerAtkMax);//血量减对应的攻击力bossHp -= atk;//打印信息Console.ForegroundColor = ConsoleColor.Magenta;//先擦除这一行,上次显示的信息Console.SetCursorPosition(2, h - 4);Console.Write("                                                   ");//再来写新的信息Console.SetCursorPosition(2, h - 4);Console.Write("你对boss造成了{0}点伤害,boss剩余血量为{1}", atk, bossHp);//boss打玩家if (bossHp > 0){//得到随机攻击力atk = random.Next(bossAtkMin, bossAtkMax);//血量减对应的攻击力playerHp -= atk;//打印信息Console.ForegroundColor = ConsoleColor.Yellow;//先擦除这一行,上次显示的信息Console.SetCursorPosition(2, h - 3);Console.Write("                                                ");//再来写新的信息Console.SetCursorPosition(2, h - 3);Console.Write("boss对你造成了{0}点伤害,你剩余血量为{1}", atk, playerHp);}else{//擦除之前的战斗信息Console.SetCursorPosition(2, h - 5);Console.Write("                                               ");Console.SetCursorPosition(2, h - 4);Console.Write("                                               ");Console.SetCursorPosition(2, h - 3);Console.Write("                                               ");//显示恭喜胜利的信息Console.SetCursorPosition(2, h - 5);Console.Write("你战胜了boss,快去营救公主吧");Console.SetCursorPosition(2, h - 4);Console.Write("前往公主身边按J键继续...");}}}

公主相关

int princessX = 24;
int princessY = 5;
string princessIcon = "★";
ConsoleColor princessColor = ConsoleColor.Blue;
//作用是从while循环内部的switch改变标识,用来跳出外层的while循环
bool isOver = false;
Console.SetCursorPosition(princessX, princessY);
Console.ForegroundColor = princessColor;
Console.Write(princessIcon);
 //判断是否在公主身边按J键else if ((playerX == princessX && playerY == princessY - 1 || playerX == princessX && playerY == princessY + 1 || playerX == princessX - 2 && playerY == princessY || playerX == princessX + 2 && playerY == princessY) && bossHp <= 0){nowSceneID = 3;isOver=true;break;}

结束场景逻辑实现

Console.Clear();
//标题的显示
Console.SetCursorPosition(w / 2 - 4, 5);
Console.ForegroundColor = ConsoleColor.White;
Console.Write("GameOver");
//可变内容的显示,根据失败活着成功显示的内容不一样
Console.SetCursorPosition(w / 2 - 4, 7);
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(gameOver);
int nowSelEndIndex = 0;
while (true)
{bool isQuitEndWhile = false;Console.SetCursorPosition(w / 2 - 6, 9);Console.ForegroundColor = nowSelEndIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("回到开始界面");Console.SetCursorPosition(w / 2 - 4, 11);Console.ForegroundColor = nowSelEndIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("退出游戏");char input = Console.ReadKey(true).KeyChar;switch (input){case 'w':case 'W':--nowSelEndIndex;if (nowSelEndIndex < 0){nowSelEndIndex = 0;}break;case 's':case 'S':++nowSelEndIndex;if (nowSelEndIndex > 1){nowSelEndIndex = 1;}break;case 'j':case 'J':if (nowSelEndIndex == 0){nowSceneID = 1;isQuitEndWhile=true;}else{Environment.Exit(0);}break;}//为了从switch中跳出上一成的while循环加的标识if (isQuitEndWhile){break;}
}

游戏截图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

从0开始学人工智能测试节选:Spark -- 结构化数据领域中测试人员的万金油技术(三)

分布式计算原理 分布式计算的原理总结一句话就是&#xff1a;分而治之。 把数据分片&#xff0c;存在不同的机器中&#xff0c;解决数据存储的压力。客户端和服务端之间通过相关协议来自动的完成在不同的机器之间进行数据的存取&#xff0c;用户并不感知数据的物理存储结构。 用…

大模型Prompt-Tuning技术入门

Prompt-Tuning方法 1 NLP任务四种范式 目前学术界一般将NLP任务的发展分为四个阶段&#xff0c;即NLP四范式&#xff1a; 第一范式&#xff1a;基于「传统机器学习模型」的范式&#xff0c;如TF-IDF特征朴素贝叶斯等机器算法&#xff1b;第二范式&#xff1a;基于「深度学习模…

python小练习03

1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…

双指针解题

验证回文数&#xff08;验证回文数-CSDN博客&#xff09;和判断在子序列&#xff08;判断子序列-CSDN博客&#xff09;已经在之前进行了计算&#xff0c;今天有三个新的双指针问题&#xff1a; 两数之和II—输入有序数组 给你一个下标从 1 开始的整数数组 numbers &#xff0…

ZL-GL-4离体组织灌流系统测试在恒温条件下离体标本的肌张拉力

简单介绍&#xff1a; 离体组织灌流系统为生理实验及药理实验提供恒温环境&#xff0c;在麦氏浴皿内加养液同时能通氧&#xff0c;测试在恒温条件下离体标本的肌张拉力&#xff0c;离体组织灌流系统具有进气口,配备微调固定器,省时省力,并提高了实验效率,同时可方便串联恒温供水…

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册 环境信息&#xff1a;VMware虚拟软件16.0 首先查看KylinOS服务器版本&#xff1a;nkvers 备注&#xff1a; (Tercel) 版本是 V10 SP1 版本&#xff0c; (Sword) 版本是 V10 SP2 版本&#xff0c; (Lance) 版本是 V10 …

超声波清洗机哪家好一点?四大顶级高分超声波清洗机专业推荐

在日常生活中&#xff0c;我们每天都在与灰尘和污渍作斗争&#xff0c;尤其是对于那些细小、精密的物品&#xff0c;如眼镜。眼镜不仅是视力矫正的工具&#xff0c;更是我们个人形象的一部分。一副干净、明亮的眼镜可以让我们的视线更加清晰。因为保持眼镜的清洁是一件很重要的…

初始操作系统

概念&#xff1a; 1.系统资源的管理者&#xff1a;实质控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机地工作和资源的分配 2.向上层提供方便易用的服务&#xff1a;以提供给用户和其他软件方便接口和环境 封装思想&#xff1a;操作系统把一些丑…

进阶 RocketMQ - 消息存储-一张图掌握核心要点

看了很多遍源码整理的 一张图进阶 RocketMQ 图片&#xff0c;关于 RocketMQ 你只需要记住这张图&#xff01; 消息传递责任已移交至Broker&#xff0c;接下来如何处理&#xff1f;首先&#xff0c;我们需要确保消息的持久化&#xff0c;避免因宕机导致的数据丢失。那么&#xf…

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…

IP地址开启HTTPS方法

可以使用IP地址申请SSL证书&#xff0c;申请之前必须是公网IP地址&#xff0c;不支持内网IP地址申请。 申请过程需要确定IP地址外网可以访问&#xff0c;这里特别注意只是申请过程中可以访问。访问验证过程必须采取80端口、443端口两者选择1个&#xff0c;不可以用其它端口进行…

[C/C++]_[初级]_[在Windows和macOS平台上导出动态库的一些思考]

场景 最近看了《COM本质论》里关于如何设计基于抽象基类作为二进制接口,把编译器和链接器的实现隐藏在这个二进制接口中,从而使用该DLL时不需要重新编译。在编译出C接口时,发现接口名直接是函数名,比如BindNativePort,怎么不是_BindNativePort?说明 VC++导出的函数默认是使…

javaweb——js

JavaScript是一种网页脚本语言。JavaScript代码可以很容易的嵌入到HTML页面中。 js引入 JavaScript嵌入到HTML页面中 <body><script>alert("Hello JS")</script> </body>再HTML页面中插入外部脚本JavaScript <body><script src&…

三、基于图像分类预训练编码及图神经网络的预测模型 【框图+源码】

背景&#xff1a; 抽时间补充&#xff0c;先挖个坑。 一、模型结构 二、源码

【2023百度之星初赛】跑步,夏日漫步,糖果促销,第五维度,公园,新材料,星际航行,蛋糕划分

目录 题目&#xff1a;跑步 思路&#xff1a; 题目&#xff1a;夏日漫步 思路&#xff1a; 题目&#xff1a;糖果促销 思路&#xff1a; 题目&#xff1a;第五维度 思路&#xff1a; 题目&#xff1a;公园 思路&#xff1a; 新材料 思路&#xff1a; 星际航行 思路…

python项目中requirements.txt文件使用

由于之前用的技术栈是java&#xff0c;后续项目中需要逐渐用起python&#xff0c;但是很多地方只会用&#xff0c;没太了解过本质作用是什么&#xff0c;这里总结下 requirements.txt 一.作用 requirements.txt 文件是 Python 项目中常见的文件&#xff0c;用于列出项目所需…

MySQL的组成与三种log

MySQL由几块组成 连接器分析器优化器执行器 MySQL的三大log blog 作用&#xff1a; 用于主从同步与数据恢复 记录内容&#xff1a; 已经完成的 DML(数据操作语句)&#xff0c;主要是用于数据备份 redolog<重试日志> 作用&#xff1a; 崩溃恢复&#xff0c;用于事…

web项目规范配置(husky、eslint、lint-staged、commit)

背景&#xff1a; 团队开发为了保证提交代码格式统一&#xff0c;通常在进行代码提交的时候对暂存区代码进行校验&#xff0c;如没有通过eslint(本例使用eslint)校验&#xff0c;则不能提交到远端。 安装依赖 husky 、eslint 、prettier 、lint-staged npm install husky e…

计算机网络——在地址栏输入网址(URL)之后都发生了什么

网址&#xff0c;也叫域名&#xff0c;域名就像一个 IP 地址的可读版本&#xff0c;比如&#xff0c;百度的域名 www.baidu.com&#xff0c;他的 ip 是 110.242.68.3&#xff0c;输入 IP 一样可以跳转到百度搜索的页面&#xff0c;我想没有一个人没去记百度的 IP 吧。其实我们真…

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…