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.hqwc.cn/news/123847.html

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

相关文章

Python学习笔记之运算符的使用

Python学习笔记之运算符的使用 整型&#xff1a;二进制0b100十进制4、八进制0o100十进制64、十进制100、十六进制0x100十进制256浮点型&#xff1a;123.456&#xff0c;1.23456e2字符串型&#xff1a;‘Hello’&#xff0c;“Hello”布尔型&#xff1a;True、False复数型&…

网络基础入门(网络基础概念详解)

本篇文章主要是对网络初学的概念进行解释&#xff0c;可以让你对网络有一个大概整体的认知。 文章目录 一、简单认识网络 1、1 什么是网络 1、2 网络分类 二、网络模型 2、1OSI七层模型 2、1、1 简单认识协议 2、1、2 OSI七层模型解释 2、2 TCP/IP五层(或四层)模型 三、网络传…

前端系列-1 HTML+JS+CSS基础

背景&#xff1a; 前端系列会收集碎片化的前端知识点&#xff0c;作为自己工作和学习时的字典&#xff0c;欢迎读者收藏和使用。 笔者是后端开发&#x1f636;前端涉猎不深&#xff0c;因此文章重在广度和实用&#xff0c;对原理和性能不会过多深究。 1.html 1.1 html5网页结…

Leetcode---364场周赛

题目列表 2864. 最大二进制奇数 2865. 美丽塔 I 2866. 美丽塔 II 2867. 统计树中的合法路径数目 一、最大二进制奇数 这题只要你对二进制有了解(学编程的不会不了解二进制吧)&#xff0c;应该问题不大&#xff0c;这题要求最大奇数&#xff0c;1.奇数&#xff1a;只要保证…

国庆中秋特辑(六)大学生常见30道宝藏编程面试题

以下是 30 道大学生 Java 面试常见编程面试题和答案&#xff0c;包含完整代码&#xff1a; 什么是 Java 中的 main 方法&#xff1f; 答&#xff1a;main 方法是 Java 程序的入口点。它是一个特殊的方法&#xff0c;不需要被声明。当 Java 运行时系统执行一个 Java 程序时&…

安全基础 --- MySQL数据库的《锁》解析

MySQL的ACID &#xff08;1&#xff09;ACID是衡量事务的四个特性 原子性&#xff08;Atomicity&#xff0c;或称不可分割性&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; &…

Linux关于gittee的远端仓库的连接和git三板斧

目录 1.网页操作 2.Linux操作 查看Linux系统中是否安装git指令 安装git指令 链接远端仓库 设置 .gitignore文件 3.git三板斧 1.网页操作 首先我们要在gittee建立一个仓库 这是我自己的勾选方案&#xff0c;大家可以参考一下。 这个方案勾选最下面的三个选项才有&#x…

“童”趣迎国庆 安全“童”行-柿铺梁坡社区开展迎国庆活动

“金秋十月好心境&#xff0c;举国欢腾迎国庆。”国庆节来临之际&#xff0c;为进一步加强梁坡社区未成年人爱国主义教育&#xff0c;丰富文化生活&#xff0c;营造热烈喜庆、文明和谐的节日氛围。9月24日上午&#xff0c;樊城区柿铺街道梁坡社区新时代文明实践站联合襄阳市和时…

数据结构与算法——19.红黑树

这篇文章我们来讲一下红黑树。 目录 1.概述 1.1红黑树的性质 2.红黑树的实现 3.总结 1.概述 首先&#xff0c;我们来大致了解一下什么是红黑树 红黑树是一种自平衡的二叉查找树&#xff0c;是一种高效的查找树。红黑树具有良好的效率&#xff0c;它可在 O(logN) 时间内完…

你写过的最蠢的代码是?——后端篇

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

C++list模拟实现

list模拟实现 1.链表结点2.类模板基本框架3.构造4.插入普通迭代器实现4.1尾插4.2普通迭代器实现4.3对比list和vector的iterator4.4迭代器的价值4.5insert4.6尾插头插复用写法 5.删除erase5.1erase5.2尾删头删复用写法 6.析构emptysizeclear6.1clear6.2size6.3 empty6.4 析构 7.…

lv7 嵌入式开发-网络编程开发 02OSI七层结构

目录 1 计算机网络体系结构的形成 1.1 提出了不同体系结构 1.2 国际标准&#xff1a;开放系统互连参考模型 OSI/RM 1.3 存在两种国际标准 2 协议与划分层次 2.1 网络协议 2.2 协议的两种形式 2.3 层次式协议结构 2.4 各层完成的主要功能 2.5 计算机网络的体系结构 …