版本号:1.3
嗨,我是一块铌金属
上次的字符酷跑,我做完之后,还是觉得不太满意,正好,题刷完了,作业也做完了,那就……做游戏吧
但是,在我刚想开一个新坑的时候,我看到了这样一篇文章:
C/C++代码实现各种控制台游戏,大神请收下我的膝盖!_Python编程导师的博客-CSDN博客_c++控制台游戏
那顿时让我精神一振啊,就想起了我之前做的酷跑游戏,好吧,那就继续做。
注:本篇有借鉴上面的那篇文章的内容,在此谢过~
首先,我们把sytrem函数替换掉,把它变成评论里的函数
然后,添加说明,就像这样:
我把 * 换成存档点了,E就是真正的终点。
把函数改一下,基本本期的内容就差不多结束啦!
#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>
using namespace std;
void Clear_Screen() {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coordScreen = {0, 0};
SetConsoleCursorPosition(hConsole, coordScreen);
}
char a[10][175] = {
" 嗨~欢迎来到字符酷跑,在这里,I是你,#是墙,M是岩浆,碰到了就会死了,W是水,可以游上去,*是存档点 ",
" E就是终点,还有,w往上跳,a向左走,d向右走,加油~ ",
"################################# ################################# #################################",
"# ### ### #",
"# * * E#",
"# ##### W#### W##",
"# #### # W## # W##",
"# # # # ##### # W## # W##",
"#I ## # # # # # ###### # W## # W##",
"################################# ########M###MMM###MM############# ########M###MMM###MM#############",
};
int Bx = 7;
int By = 1;
int x = 7;
int y = 1;
bool flag = 0;
void check(int xad, int yad) {
if (a[x + xad][y + yad] == '*') {
a[x][y] = ' ';
Bx = x + xad;
By = y + yad;
x = Bx;
y = By;
a[x][y] = 'I';
} else if (a[x + xad][y + yad] == 'E') {
flag = 1;
} else if (a[x + xad][y + yad] == 'M') {
a[x][y] = ' ';
x = Bx;
y = By;
a[x][y] = 'I';
} else if (a[x + xad][y + yad] == 'W' && a[x][y] == 'U') {
a[x][y] = 'W';
x += xad;
y += yad;
a[x][y] = 'U';
} else if (a[x + xad][y + yad] == 'W' && a[x][y] == 'I') {
a[x][y] = ' ';
x += xad;
y += yad;
a[x][y] = 'U';
} else if (a[x + xad][y + yad] == ' ' && a[x][y] == 'U') {
a[x][y] = 'W';
x += xad;
y += yad;
a[x][y] = 'I';
} else {
a[x][y] = ' ';
x += xad;
y += yad;
a[x][y] = 'I';
}
}
int main() {
char c;
while (1) {
c = _getch();
if (a[x + 1][y] != '#' && a[x + 1][y] != 'W') {
check(1, 0);
}
if (c == 'a') {
if (a[x][y - 1] != '#') {
check(0, -1);
}
} else if (c == 'd') {
if (a[x][y + 1] != '#') {
check(0, 1);
}
} else if (c == 'w' && (a[x - 1][y] == 'W' or a[x + 1][y] == 'W')) {
check(-1, 0);
} else if (c == 'w' && a[x + 1][y] == '#') {
a[x][y] = ' ';
for (int i = 0; i < 4; i++) {
if (a[x - 1][y] != '#') {
check(-1, 0);
}
}
a[x][y] = 'I';
} else if (c == 's') {
if (a[x + 1][y] == 'W') {
check(1, 0);
}
}
Clear_Screen();
for (int i = 0; i < 10; i++) {
puts(a[i]);
}
if (flag) {
break;
}
}
system("cls");
printf("You Win!");
return 0;
}
这样就结束了吗?
不!
我们要添加颜色!
首先,我们把输出改一下,改成一个一个输出,这样就能判断了
然后,我们从其他地方搬来改变局部颜色的函数
最终代码:
#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>
using namespace std;
void Clear_Screen() {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coordScreen = {0, 0};
SetConsoleCursorPosition(hConsole, coordScreen);
}
void color(int m) {
HANDLE consolehend;
consolehend = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehend, m);
}
string a[10] = {
" 嗨~欢迎来到字符酷跑,在这里,I是你,#是墙,M是岩浆,碰到了就会死了,W是水,可以游上去,*是存档点 ",
" E就是终点,还有,w往上跳,a向左走,d向右走,加油~ ",
"################################# ################################# #################################",
"# ### ### #",
"# * * E#",
"# ##### W#### W##",
"# #### # W## # W##",
"# # # # ##### # W## # W##",
"#I ## # # # # # ###### # W## # W##",
"################################# ########M###MMM###MM############# ########M###MMM###MM#############",
};
int Bx = 7;
int By = 1;
int x = 7;
int y = 1;
bool flag = 0;
void check(int xad, int yad) {
if (a[x + xad][y + yad] == '*') {
a[x][y] = ' ';
Bx = x + xad;
By = y + yad;
x = Bx;
y = By;
a[x][y] = 'I';
} else if (a[x + xad][y + yad] == 'E') {
flag = 1;
} else if (a[x + xad][y + yad] == 'M') {
a[x][y] = ' ';
x = Bx;
y = By;
a[x][y] = 'I';
} else if (a[x + xad][y + yad] == 'W' && a[x][y] == 'U') {
a[x][y] = 'W';
x += xad;
y += yad;
a[x][y] = 'U';
} else if (a[x + xad][y + yad] == 'W' && a[x][y] == 'I') {
a[x][y] = ' ';
x += xad;
y += yad;
a[x][y] = 'U';
} else if (a[x + xad][y + yad] == ' ' && a[x][y] == 'U') {
a[x][y] = 'W';
x += xad;
y += yad;
a[x][y] = 'I';
} else {
a[x][y] = ' ';
x += xad;
y += yad;
a[x][y] = 'I';
}
}
int main() {
char c;
while (1) {
c = _getch();
color(0xF);
if (a[x + 1][y] != '#' && a[x + 1][y] != 'W') {
check(1, 0);
}
if (c == 'a') {
if (a[x][y - 1] != '#') {
check(0, -1);
}
} else if (c == 'd') {
if (a[x][y + 1] != '#') {
check(0, 1);
}
} else if (c == 'w' && (a[x - 1][y] == 'W' or a[x + 1][y] == 'W')) {
check(-1, 0);
} else if (c == 'w' && a[x + 1][y] == '#') {
a[x][y] = ' ';
for (int i = 0; i < 4; i++) {
if (a[x - 1][y] != '#') {
check(-1, 0);
}
}
a[x][y] = 'I';
} else if (c == 's') {
if (a[x + 1][y] == 'W') {
check(1, 0);
}
}
Clear_Screen();
for (int i = 0; i < 10; i++) {
int len = a[i].size();
for (int j = 0; j < len; j++) {
switch (a[i][j]) {
case 'I':
color(6);
printf("%c", a[i][j]);
break;
case '*':
color(2);
printf("%c", a[i][j]);
break;
case 'M':
color(4);
printf("%c", a[i][j]);
break;
case 'W':
color(9);
printf("%c", a[i][j]);
break;
case 'U':
color(1);
printf("%c", a[i][j]);
break;
case 'E':
color(14);
printf("%c", a[i][j]);
break;
default:
color(0xF);
printf("%c", a[i][j]);
break;
}
}
printf("\n");
}
if (flag) {
break;
}
}
system("cls");
printf("You Win!");
return 0;
}
这里,我使用了 switch-case 的语法来判断
这种判断方式比较简单,就是用 switch 后面的括号里的内容,一个一个的和下面的每一个 case 里的内容比较,相同进去,不相同就不进去,看下一个,和 if{} else if{} else{} 的逻辑是一样的。else代表了里面的 default
小结
今天我们给控制台无聊的黑底白字的内容改变了颜色,让我们的游戏更加丰富多彩,下一次,我们真正会加入怪物(有没有下期……不好说)