C#(CSharp)入门实践项目(简易回合制游戏)

项目名称

木木夕营救公主

项目介绍

这是一个小游戏,你将扮演一个英雄(木木夕),去打败恶龙,拯救出公主,该项目采用回合制战斗模式,由于角色的血量和攻击为随机数,所以需要靠运气才能通关噢!

简单需求分析

开始界面:控制台输入输出,控制台颜色变化

游戏界面:控制台输入输出,控制台颜色变化,回合制战斗(随机数,循环,条件判断)

结束界面: 控制台输入输出,控制台颜色变化

界面间相互切换 

项目代码(含详细说明)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace CSharp入门_实践
{class Program{static void Main(string[] args){#region 控制台基础设置int width = 50;int height = 30;//隐藏光标Console.CursorVisible = false;//设置控制台大小Console.SetWindowSize(width, height);//设置缓冲区大小Console.SetBufferSize(width, height);#endregion#region 多场景//约定 1是开始游戏界面,2是游戏界面,3是结束界面int nowId = 1;string gameOverInfo ="" ;while (true){//不同的场景id,进行不同的逻辑switch (nowId){#region 开始场景逻辑//开始场景case 1:Console.Clear();//每次场景切换需要把上一次的场景清除Console.SetCursorPosition(width / 2 - 7, 8);//设置下面文字的位置Console.Write("木木夕营救公主");int nowSelIndex = 0;//当前选项编号 0:开始游戏  1:结束游戏//输入while (true){bool isQuit = false;//退出循环标志Console.SetCursorPosition(width / 2 - 4, 12);//改变开始游戏的颜色Console.ForegroundColor = nowSelIndex == 0 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("开始游戏");Console.SetCursorPosition(width / 2 - 4, 14);//改变结束游戏的颜色Console.ForegroundColor = nowSelIndex == 1 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("退出游戏");//说明Console.SetCursorPosition(width / 2 - 16, 16);Console.ForegroundColor = ConsoleColor.White;Console.Write("说明:按W,S进行上下选择,J键确定");Console.SetCursorPosition(width / 2 - 10, 18);Console.Write("操作时按WASD进行移动");Console.ForegroundColor = ConsoleColor.Green;Console.SetCursorPosition(width / 2 - 10, 20);Console.Write("★");Console.ForegroundColor = ConsoleColor.White;Console.Write("为boss");Console.ForegroundColor = ConsoleColor.Yellow;Console.SetCursorPosition(width / 2 - 10, 21);Console.Write("●");Console.ForegroundColor = ConsoleColor.White;Console.Write("为玩家木木夕");Console.ForegroundColor = ConsoleColor.Blue;Console.SetCursorPosition(width / 2 - 10, 22);Console.Write("▲");Console.ForegroundColor = ConsoleColor.White;Console.Write("为公主");Console.SetCursorPosition(width / 2 - 18, 23);Console.Write("找到boss,进行挑战,按J键进行一次攻击");//检测玩家输入,根据输入内容进行跳转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){//进入游戏//改变当前场景idnowId = 2;//退出内层while循环isQuit = true;}else{//关闭控制台Environment.Exit(0);}break;}if (isQuit == true){break;//跳出该层循环}}break;#endregion//游戏场景case 2:Console.Clear();#region 红墙Console.ForegroundColor = ConsoleColor.Red;//设置颜色//画墙for (int i = 0; i < width-2; i += 2){//上方Console.SetCursorPosition(i, 0);//设置位置Console.Write("■");//下方Console.SetCursorPosition(i, height - 2);//设置位置Console.Write("■");//中间Console.SetCursorPosition(i, height - 7);//设置位置Console.Write("■");}for (int i = 0; i <height-1; i++){//左边Console.SetCursorPosition(0, i);//设置位置Console.Write("■");//右边Console.SetCursorPosition(width-2, i);//设置位置Console.Write("■");}#endregion#region boss属性相关//boss位置int xBoss = 24;int yBoss = 15;//boss攻击范围int bossAtkMin = 9;int bossAtkMax = 16;//boss血量int bossHP = 100;//boss图标string bossIcon = "★";//boss颜色ConsoleColor bossColor = ConsoleColor.Green;#endregion#region 玩家属性相关//Player位置int xPlayer = 4;int yPlayer = 5;//Player攻击范围int playerAtkMin = 8;int playerAtkMax = 15;//Player血量int playerHP = 100;//Player图标string playerIcon = "●";//Player颜色ConsoleColor playerColor = ConsoleColor.Yellow;//玩家输入的内容char playerInput;#endregion#region 公主属性int xprincess = 24;int yprincess = 5;string princessIcon = "▲";ConsoleColor princessColor = ConsoleColor.Blue;#endregion#region 玩家战斗状态bool isFight = false;bool isOver = false;//跳出while#endregion//游戏场景死循环while (true){//boss活着if (bossHP > 0){//绘制bossConsole.SetCursorPosition(xBoss, yBoss);Console.ForegroundColor = bossColor;Console.Write(bossIcon);}#region 公主模块else{Console.SetCursorPosition(xprincess, yprincess);Console.ForegroundColor = princessColor;Console.Write(princessIcon);}#endregion#region 玩家移动//绘制玩家Console.SetCursorPosition(xPlayer, yPlayer);Console.ForegroundColor = playerColor;Console.Write(playerIcon);//玩家移动//得到玩家输入playerInput = Console.ReadKey(true).KeyChar;//判断是否为战斗状态if (isFight){//执行战斗状态逻辑if (playerInput == 'j'|| playerInput == 'J'){//判断boss和玩家是否死亡if (playerHP <= 0){//游戏结束nowId = 3;//结束游戏gameOverInfo = "游戏失败";break;}else if (bossHP <= 0){//营救公主//先把boss擦除Console.SetCursorPosition(xBoss, yBoss);Console.Write("  ");isFight = false;}else{//玩家攻击bossRandom rd = new Random();int atk = rd.Next(playerAtkMin, playerAtkMax);bossHP -= atk;//打印信息Console.ForegroundColor = ConsoleColor.Green;//擦除信息Console.SetCursorPosition(2, height - 4);Console.Write("                                               ");//再写新的信息Console.SetCursorPosition(2, height - 4);Console.Write("你对boss造成了{0}伤害,boss剩余血量为{1}", atk, bossHP);//boss攻击玩家if (bossHP > 0){atk = rd.Next(bossAtkMin, bossAtkMax);playerHP -= atk;//打印信息Console.ForegroundColor = ConsoleColor.Yellow;//擦除信息Console.SetCursorPosition(2, height - 3);Console.Write("                                               ");//再写新的信息//玩家死亡if (playerHP < 0){Console.SetCursorPosition(2, height - 3);Console.Write("很遗憾,你未能通过boss的试炼,战败了(按J结束)");}else{Console.SetCursorPosition(2, height - 3);Console.Write("boss对你造成了{0}伤害,你的剩余血量为{1}", atk, playerHP);}}else{//擦除战斗信息Console.SetCursorPosition(2, height - 5);Console.Write("                                               ");Console.SetCursorPosition(2, height - 4);Console.Write("                                               ");Console.SetCursorPosition(2, height - 3);Console.Write("                                               ");//显示胜利信息Console.SetCursorPosition(2, height - 5);Console.Write("你战胜了boss,快去营救公主(先按J键解除战斗)");Console.SetCursorPosition(2, height - 4);Console.Write("请前往公主身边,按J键进行营救");}}}}else{//执行非战斗状态逻辑//擦除Console.SetCursorPosition(xPlayer, yPlayer);//设置光标位置Console.Write("  ");//擦除//改位置switch (playerInput){case 'w':case 'W':--yPlayer;if (yPlayer < 1){yPlayer = 1;}//主角与boss重合,但是boss没有死else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0){//拉回去++yPlayer;}else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0){//拉回去++yPlayer;}break;case 'a':case 'A':xPlayer -= 2;if (xPlayer < 2){xPlayer = 2;}//主角与boss重合,但是boss没有死else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0){//拉回去xPlayer += 2;}else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0){//拉回去xPlayer += 2;}break;case 's':case 'S':++yPlayer;if (yPlayer > height - 8){yPlayer = height - 8;}//主角与boss重合,但是boss没有死else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0){//拉回去--yPlayer;}else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0){//拉回去--yPlayer;}break;case 'd':case 'D':xPlayer += 2;if (xPlayer > width - 4){xPlayer = width - 4;}//主角与boss重合,但是boss没有死else if (xPlayer == xBoss && yPlayer == yBoss && bossHP > 0){//拉回去xPlayer -= 2;}else if (xPlayer == xprincess && yPlayer == yprincess && bossHP <= 0){//拉回去xPlayer -= 2;}break;case 'j':case 'J'://开始战斗,玩家不再移动,下方显示信息if ((xPlayer == xBoss && yPlayer == yBoss - 1 ||xPlayer == xBoss && yPlayer == yBoss + 1 ||yPlayer == yBoss && xPlayer == xBoss - 2 ||yPlayer == yBoss && xPlayer == xBoss + 2) && bossHP > 0){isFight = true;//满足上述条件可以开始战斗Console.SetCursorPosition(2, height - 5);Console.ForegroundColor = ConsoleColor.White;Console.Write("开始和boss战斗了,按J键继续");Console.SetCursorPosition(2, height - 4);Console.Write("玩家当前血量为{0}", playerHP);Console.SetCursorPosition(2, height - 3);Console.Write("Boss当前血量为{0}", bossHP);}//判断是否在公主身边else if ((xPlayer == xprincess && yPlayer == yprincess - 1 ||xPlayer == xprincess && yPlayer == yprincess + 1 ||yPlayer == yprincess && xPlayer == xprincess - 2 ||yPlayer == yprincess && xPlayer == xprincess + 2) && bossHP<=0){nowId = 3;gameOverInfo ="游戏通关";isOver = true;break;}break;}}#endregionif (isOver){break;}}break;//结束场景case 3:Console.Clear();Console.SetCursorPosition(width / 2 - 5, 5);Console.ForegroundColor = ConsoleColor.White;Console.Write("GAME  OVER");//失败和成功提示不一样Console.SetCursorPosition(width / 2 - 4, 7);Console.ForegroundColor = ConsoleColor.Green;Console.Write(gameOverInfo);int nowSelEndId = 0;while (true){bool isQuitEnd = false;Console.SetCursorPosition(width / 2 - 6, 9);Console.ForegroundColor = nowSelEndId == 0 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("回到开始界面");Console.SetCursorPosition(width / 2 - 4, 11);Console.ForegroundColor = nowSelEndId == 1 ? ConsoleColor.Red : ConsoleColor.White;Console.Write("退出游戏");char input = Console.ReadKey(true).KeyChar;switch (input){case 'w':case 'W':--nowSelEndId;if (nowSelEndId < 0){nowSelEndId = 0;}break;case 's':case 'S':++nowSelEndId;if (nowSelEndId >1){nowSelEndId = 1;}break;case 'j':case 'J':if (nowSelEndId == 0){nowId = 1;isQuitEnd = true;}else{Environment.Exit(0);}break;}//为了从switch中跳出whileif (isQuitEnd){break;}}break;}}#endregion}}
}

项目演示 

木木夕营救公主

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

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

相关文章

Spring | 基于SpringBoot的多数据源实战 - 使用seata实现多数据源的全局事务管理

Spring | 基于SpringBoot的多数据源实战 - 使用seata实现多数据源的全局事务管理 引言1.1 多数据源的必要性1.2 多数据源的应用场景 实战演示2.1 创建实体类2.2 配置数据源2.3 实现数据源配置类2.4 配置Repository类2.5 运行与验证 事务管理与数据一致性3.1 事务管理3.2 使用Se…

变电站无人值守方案:提升效率与增强安全性

随着信息技术、人工智能、大数据的发展进步&#xff0c;电力行业正逐步向智能化转型。其中&#xff0c;无人值守变电站成为了现代电力系统的明显趋势。这种新型的运营模式不仅提高了效率&#xff0c;还极大地增强了电力系统的安全性。 无人值守变电站的核心概念是在没有人类现场…

Adams齿轮副

1.运动副 添加旋转副的时候&#xff0c;必须先物体后公共part(即此处的ground&#xff09;&#xff0c;最后再选择质心点 2.啮合点 啮合点marker的z轴必须是齿轮分度圆的切线方向 3.啮合点 两齿轮的旋转副&#xff0c;和啮合点&#xff0c;即cv marker &#xff0c;必须属…

win10打开VMware 16 pro里面的虚拟机就蓝屏怎么办

2023年9月30日&#xff0c;周六下午 今天下午我也遇到了这个问题&#xff0c;后来解决了&#xff0c;于是记录一下我的解决办法 目录 1、打开控制面板&#xff0c;并选择“程序和功能” 2、点击“启动或关闭Windows服务” 3、勾选两个服务 4、重启电脑&#xff0c;大功告成…

【CMU15-445 Part-14】Query Planning Optimization I

Part14-Query Planning & Optimization I SQL is Declarative&#xff0c;只告诉想要什么而不需要说怎么做。 IBM System R是第一个实现query optimizer查询优化器的系统 Heuristics / Rules 条件触发 静态规则&#xff0c;重写query来remove 低效或者愚蠢的东西&#xf…

牛客 ( 计算几何

#include <bits/stdc.h> using namespace std; using ll long long; using PII pair<double , double>; int n; PII p[3000010]; vector<PII> pp; PII yuan(PII a , PII b , PII c) {//已知三个点确定圆的半径和圆心double x1 a.first,x2 b.first,x3 c.…

华为云云耀云服务器L实例评测 | 实例评测使用之体验评测:华为云云耀云服务器管理、控制、访问评测

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之体验评测&#xff1a;华为云云耀云服务器管理、控制、访问评测 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…

协议-TCP协议-基础概念02-TCP握手被拒绝-内核参数-指数退避原则-TCP窗口-TCP重传

协议-TCP协议-基础概念02-TCP握手被拒绝-TCP窗口 参考来源&#xff1a; 《极客专栏-网络排查案例课》 TCP连接都是TCP协议沟通的吗&#xff1f; 不是 如果服务端不想接受这次握手&#xff0c;它会怎么做呢&#xff1f; 内核参数中与TCP重试有关的参数(两个) -net.ipv4.tc…

asp.net企业生产管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 企业生产管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 二、功能介绍 (1)用户管理&…

索尼 toio™应用创意开发征文|检测工业平台震动

虽然索尼toio Q宝机器人主要是为儿童教育娱乐开发的&#xff0c;但我认为它在工业等领域也有一定应用潜力。例如&#xff0c;工业领域经常会有某些平面在实际作业中持续震动&#xff0c;导致零件过疲劳、平台失去稳定等问题。而这样的平台往往位于机器内部&#xff0c;从外部很…

TensorFlow学习1:使用官方模型进行图片分类

前言 人工智能以后会越来越发达&#xff0c;趁着现在简单学习一下。机器学习框架有很多&#xff0c;这里觉得学习谷歌的 TensorFlow&#xff0c;谷歌的技术还是很有保证的&#xff0c;另外TensorFlow 的中文文档真的很友好。 文档&#xff1a; https://tensorflow.google.cn/…

云安全【阿里云ECS攻防】

关于VPC的概念还请看&#xff1a;记录一下弹性计算云服务的一些词汇概念 - 火线 Zone-安全攻防社区 一、初始化访问 1、元数据 1.1、SSRF导致读取元数据 如果管理员给ECS配置了RAM角色&#xff0c;那么就可以获得临时凭证 如果配置RAM角色 在获取ram临时凭证的时候&#xff…

ubuntu安装PhotoPrism,并开启安卓照片同步

之前安装了黑群晖7.2&#xff0c;并开启了Photo&#xff0c;照片同步用的挺好。唯一的缺陷是群晖的照片搜索太弱鸡了&#xff0c;基本上关键字搜索是一点不可用&#xff0c;常见的“花”&#xff0c;“山”&#xff0c;“文件”&#xff0c;“证件”都是不可用的。 后来了解到了…

Ubuntu基于Docker快速配置GDAL的Python、C++环境

本文介绍在Linux的Ubuntu操作系统中&#xff0c;基于Docker快速配置Python、C等不同编程语言均可用的地理数据处理库GDAL的方法。 首先&#xff0c;我们访问GDAL库的Docker镜像官方网站&#xff08;https://github.com/OSGeo/gdal/tree/master/docker&#xff09;。其中&#x…

DAMA-DMBOK2重点知识整理CDGA/CDGP——第14章 大数据与数据科学

目录 一、分值分布 二、重点知识梳理 1、引言 1.1 业务驱动因素 1.2 原则 1.3 基本理念 2、活动 2.1 定义大数据战略和业务需求 2.2 选择数据源 2.3 获得和接收数据源 2.4 制定数据假设和方法 2.5 集成和调整数据进行分析 2.6 使用模型探索数据 2.7 部署和监控 …

Android 遍历界面所有的View

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、实践四、 推荐阅读 一、导读 我们…

FFmpeg 命令:从入门到精通 | ffmpeg 命令分类查询

FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令分类查询 FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg 命令分类查询ffmpeg -versionffmpeg -buildconfffmpeg -formatsffmpeg -muxersffmpeg -demuxersffmpeg -codecsffmpeg -decodersffmpeg -encodersffmpeg -bsfsffmpeg…

【QT】使用toBase64方法将.txt文件的明文变为非明文(类似加密)

目录 0.环境 1.背景 2.详细代码 2.1 .h主要代码 2.2 .cpp主要代码&#xff0c;主要实现上述的四个方法 0.环境 windows 11 64位 Qt Creator 4.13.1 1.背景 项目需求&#xff1a;我们项目中有配置文件&#xff08;类似.txt&#xff0c;但不是这个格式&#xff0c;本文以…

信息安全:网络安全漏洞防护技术原理与应用.

信息安全&#xff1a;网络安全漏洞防护技术原理与应用. 网络安全漏洞又称为脆弱性&#xff0c;简称漏洞。漏洞一般是致使网络信息系统安全策略相冲突的缺陷&#xff0c;这种缺陷通常称为安全隐患。 安全漏洞的影响主要有机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可…

Java | Maven(知识点查询)

文章目录 Maven知识速查1. Maven概述2. Maven的作用3. Maven的下载4. Maven的环境配置5. Maven 的基础组成5.1 Maven仓库5.1.1 本地仓库配置&#xff1a;5.1.2 中央仓库配置&#xff1a;5.1.3 镜像仓库配置 5.2 Maven坐标 6. Maven项目6.1 手工创建Maven项目6.2 自动构建项目 7…