即使走的再远,也勿忘启程时的初心
C/C++ 游戏开发
Hello,米娜桑们,这里是君兮_,最近开始正式的步入学习游戏开发的正轨,想要通过写博客的方式来分享自己学到的知识和经验,这就是开设本专栏的目的。希望这些独立的C#小项目能对做游戏的你有所帮助,毕竟学会游戏开发的最好的上手方式就是自己做一款游戏!!
Console.Clear();
#region 4 不变的红墙
//设置颜色为红色
Console.ForegroundColor = ConsoleColor.Red;
//画墙
//上方墙
for (int i = 0; i < w; i += 2)
{
//上方墙
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("■");
}
#endregion
#region 5 boss属性相关
//boss坐标
int bossX = 24;
int bossY = 15;
//boss攻击力的最大最小值
int bossAtkMin = 7;
int bossAtkMax = 13;
//boss血量
int bossHp = 100;
string bossIcon = "■";
//申明一个 颜色变量
ConsoleColor bossColor = ConsoleColor.Green;
#endregion
#region 6 玩家属性相关
int playerX = 4;
int playerY = 5;
//玩家攻击力的最大最小值
int playerAtkMin = 8;
int playerAtkMax = 12;
//玩家血量
int playerHp = 100;
string playerIcon = "●";
ConsoleColor playerColor = ConsoleColor.Yellow;
//玩家输入的内容 外面申明 节约性能
//检测玩家的输入 方便之后的移动和攻击逻辑
char playerInput;
#endregion
#region 7 玩家战斗相关
//战斗状态
bool isFight = false;//在玩家与boss战斗或者未进行战斗时应该有不同的逻辑,通过一个bool变量来判断应该走哪种逻辑
#endregion
#region 6 玩家移动相关
//擦除之前位置的玩家图标
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;
}
else if (playerX == bossX && playerY == bossY && bossHp > 0)
{
//拉回去
playerX += 2;
}
break;
case 'S':
case 's':
++playerY;//向下移动
if (playerY > h - 7) 边界检查 如果玩家到红墙下边缘就把玩家坐标拉回去
{
playerY = h - 7;
}
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;
}
#endregion
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)//玩家处于BOSS周围
{
isFight = true;//玩家状态切换至战斗状态
//可以开始战斗,提醒一下玩家应该做什么,以及玩家和BOSS此时的血量
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;
//游戏场景的死循环 专门用来 检测 玩家输入相关循环
while (true)
{
//boss活着时才绘制
if (bossHp > 0)
{
//绘制boss图标
Console.SetCursorPosition(bossX, bossY);
Console.ForegroundColor = bossColor;
Console.Write(bossIcon);
}
//画出玩家
Console.SetCursorPosition(playerX, playerY);
Console.ForegroundColor = playerColor;
Console.Write(playerIcon);
//得到玩家输入
playerInput = Console.ReadKey(true).KeyChar;
//战斗状态处理什么逻辑
if (isFight)
{
#region 7 玩家战斗相关
//如果是战斗状态 你做什么
//只会处理J键
if (playerInput == 'J' || playerInput == 'j')
{
//在这判断 玩家或者怪物 是否死亡 如果死亡了 继续之后的流程
if (playerHp <= 0)
{
//游戏结束
//输掉了 应该直接显示 我们的 游戏结束界面
nowSceneID = 3;
break;
}
else if (bossHp <= 0)
{
//去营救公主
//boss擦除
Console.SetCursorPosition(bossX, bossY);
Console.Write(" ");
isFight = false;//重新让玩家能够按wasd键移动
}
else
{
//去处理按J键打架
// 玩家打怪物
Random r = new Random();
//得到随机攻击了
int atk = r.Next(playerAtkMin, playerAtkMax);
//血量减对应的攻击力
bossHp -= atk;
//打印信息
Console.ForegroundColor = ConsoleColor.Green;
//先擦除这一行 上次显示的内容
Console.SetCursorPosition(2, h - 4);
Console.Write(" ");
//再来写新的信息
Console.SetCursorPosition(2, h - 4);
Console.Write("你对恶龙造成了{0}点伤害,boss剩余血量为{1}", atk, bossHp);
// 怪物打玩家
if (bossHp > 0)
{
//得到随机攻击了
atk = r.Next(bossAtkMin, bossAtkMax);
playerHp -= atk;
//打印信息
Console.ForegroundColor = ConsoleColor.Yellow;
//先擦除这一行 上次显示的内容
Console.SetCursorPosition(2, h - 3);
Console.Write(" ");
//再来写新的信息
//boss如果把玩家打死了 做什么
if (playerHp <= 0)
{
Console.SetCursorPosition(2, h - 3);
Console.Write("很遗憾,你未能通过boss的试炼,战败了");
}
else
{
Console.SetCursorPosition(2, h - 3);
Console.Write("恶龙对你造成了{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键继续");
}
}
}
//游戏场景
case 2:
Console.Clear();
#region 4 不变的红墙
//设置颜色为红色
Console.ForegroundColor = ConsoleColor.Red;
//画墙
//上方墙
for (int i = 0; i < w; i += 2)
{
//上方墙
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("■");
}
#endregion
#region 5 boss属性相关
int bossX = 24;
int bossY = 15;
int bossAtkMin = 7;
int bossAtkMax = 13;
int bossHp = 100;
string bossIcon = "■";
//申明一个 颜色变量
ConsoleColor bossColor = ConsoleColor.Green;
#endregion
#region 6 玩家属性相关
int playerX = 4;
int playerY = 5;
int playerAtkMin = 8;
int playerAtkMax = 12;
int playerHp = 100;
string playerIcon = "●";
ConsoleColor playerColor = ConsoleColor.Yellow;
//玩家输入的内容 外面申明 节约性能
char playerInput;
#endregion
#region 7 玩家战斗相关
//战斗状态
bool isFight = false;
#endregion
//游戏场景的死循环 专门用来 检测 玩家输入相关循环
while (true)
{
#region 5 boss属性相关
//boss活着时才绘制
if (bossHp > 0)
{
//绘制boss图标
Console.SetCursorPosition(bossX, bossY);
Console.ForegroundColor = bossColor;
Console.Write(bossIcon);
}
#endregion
#region 6 玩家移动相关
//画出玩家
Console.SetCursorPosition(playerX, playerY);
Console.ForegroundColor = playerColor;
Console.Write(playerIcon);
//得到玩家输入
playerInput = Console.ReadKey(true).KeyChar;
#endregion
//战斗状态处理什么逻辑
if (isFight)
{
#region 7 玩家战斗相关
//如果是战斗状态 你做什么
//只会处理J键
if (playerInput == 'J' || playerInput == 'j')
{
//在这判断 玩家或者怪物 是否死亡 如果死亡了 继续之后的流程
if (playerHp <= 0)
{
//游戏结束
//输掉了 应该直接显示 我们的 游戏结束界面
nowSceneID = 3;
break;
}
else if (bossHp <= 0)
{
//去营救公主
//boss擦除
Console.SetCursorPosition(bossX, bossY);
Console.Write(" ");
isFight = false;
}
else
{
//去处理按J键打架
// 玩家打怪物
Random r = new Random();
//得到随机攻击了
int atk = r.Next(playerAtkMin, playerAtkMax);
//血量减对应的攻击力
bossHp -= atk;
//打印信息
Console.ForegroundColor = ConsoleColor.Green;
//先擦除这一行 上次显示的内容
Console.SetCursorPosition(2, h - 4);
Console.Write(" ");
//再来写新的信息
Console.SetCursorPosition(2, h - 4);
Console.Write("你对boss造成了{0}点伤害,boss剩余血量为{1}", atk, bossHp);
// 怪物打玩家
if (bossHp > 0)
{
//得到随机攻击了
atk = r.Next(bossAtkMin, bossAtkMax);
playerHp -= atk;
//打印信息
Console.ForegroundColor = ConsoleColor.Yellow;
//先擦除这一行 上次显示的内容
Console.SetCursorPosition(2, h - 3);
Console.Write(" ");
//再来写新的信息
//boss如果把玩家打死了 做什么
if (playerHp <= 0)
{
Console.SetCursorPosition(2, h - 3);
Console.Write("很遗憾,你未能通过boss的试炼,战败了");
}
else
{
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键继续");
}
}
}
#endregion
}
//非战斗状态处理什么逻辑
else
{
#region 6 玩家移动相关
//擦除
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;
}
else if (playerX == bossX && playerY == bossY && bossHp > 0)
{
//拉回去
playerX += 2;
}
break;
case 'S':
case 's':
++playerY;
if (playerY > h - 7)
{
playerY = h - 7;
}
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;
}
#endregion
}
}
break;
新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下再走呗。你们的支持就是我更新的动力!!!
**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**