项目名称
木木夕营救公主
项目介绍
这是一个小游戏,你将扮演一个英雄(木木夕),去打败恶龙,拯救出公主,该项目采用回合制战斗模式,由于角色的血量和攻击为随机数,所以需要靠运气才能通关噢!
简单需求分析
开始界面:控制台输入输出,控制台颜色变化
游戏界面:控制台输入输出,控制台颜色变化,回合制战斗(随机数,循环,条件判断)
结束界面: 控制台输入输出,控制台颜色变化
界面间相互切换
项目代码(含详细说明)
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}}
}
项目演示
木木夕营救公主