木木夕营救公主
这是一个小游戏,你将扮演一个英雄(木木夕),去打败恶龙,拯救出公主,该项目采用回合制战斗模式,由于角色的血量和攻击为随机数,所以需要靠运气才能通关噢!
开始界面:控制台输入输出,控制台颜色变化
游戏界面:控制台输入输出,控制台颜色变化,回合制战斗(随机数,循环,条件判断)
结束界面: 控制台输入输出,控制台颜色变化
界面间相互切换
- 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)
- {
- //进入游戏
- //改变当前场景id
- nowId = 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
-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)
- {
- //绘制boss
- Console.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
- {
- //玩家攻击boss
- Random 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;
- }
-
- }
- #endregion
-
- if (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中跳出while
- if (isQuitEnd)
- {
- break;
- }
-
- }
- break;
-
-
- }
- }
-
- #endregion
- }
- }
- }
木木夕营救公主