版本号: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
小结
今天我们给控制台无聊的黑底白字的内容改变了颜色,让我们的游戏更加丰富多彩,下一次,我们真正会加入怪物(有没有下期……不好说)