C++ 字符跑酷#4 游戏制作实录

在完成字符酷跑游戏后,作者决定对其进行改进,受到一篇C++控制台游戏文章的启发,将原来的sytrem函数替换,并添加了存档点和颜色变化功能。通过switch-case语句实现颜色判断,使游戏视觉效果更丰富。文章末尾预告可能将加入怪物元素。
摘要由CSDN通过智能技术生成

版本号: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

小结

今天我们给控制台无聊的黑底白字的内容改变了颜色,让我们的游戏更加丰富多彩,下一次,我们真正会加入怪物(有没有下期……不好说)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值