我怎么能在这个简单的 C++ 游戏中进入另一个 "map"?
How could I go to another "map" in this simple C++ game?
因此,问题如下:我已将数组设置为 "map"s,玩家 (@) 可以在其中移动。但是我怎样才能让程序切换地图,例如当玩家点击坐标时,如 [4] 和 [19]?
#include <iostream>
#include <windows.h>
using namespace std;
char plyr = '@';
char map[10][20] = {
"###################",
"#@ #",
"# #",
"# ",
"# ",
"# #",
"# #",
"# #",
"###################"
};
char map2[10][20] = {
"###################",
"# ############# #",
"# ## ",
" ",
" #",
"# #",
"# ####",
"# #######",
"###################"
};
int x = 1;
int y = 1;
bool gameRunning = true;
int main(){
while(gameRunning == true){
system("cls");
for(int disp=0; disp<10; disp++){
cout << map[disp] << endl;
}
system("pause>nul");
if(GetAsyncKeyState(VK_DOWN)){
int y2 = y+1;
if(map[y2][x] == ' '){
map[y][x] = ' ';
y++;
map[y][x] = plyr;
}
}
if(GetAsyncKeyState(VK_UP)){
int y2 = y-1;
if(map[y2][x] == ' '){
map[y][x] = ' ';
y--;
map[y][x] = plyr;
}
}
if(GetAsyncKeyState(VK_RIGHT)){
int x2 = x+1;
if(map[y][x2] == ' '){
map[y][x] = ' ';
x++;
map[y][x] = plyr;
}
}
if(GetAsyncKeyState(VK_LEFT)){
int x2 = x-1;
if(map[y][x2] == ' '){
map[y][x] = ' ';
x--;
map[y][x] = plyr;
}
}
}
return 0;
}
您可以像这样向数组添加另一个维度:
#include <iostream>
char map[2][10][20] =
{
{
"###################",
"#@ #",
"# #",
"# ",
"# ",
"# #",
"# #",
"# #",
"###################"
}
,
{
"###################",
"# ############# #",
"# ## ",
" ",
" #",
"# #",
"# ####",
"# #######",
"###################"
}
};
void display_map(int level)
{
std::cout << "level: " << (level + 1) << '\n';
for(int y = 0; y < 9; ++y)
std::cout << map[level][y] << '\n';
}
int main()
{
// Display both maps:
for(int level = 0; level < 2; ++level)
{
display_map(level);
std::cout << '\n';
}
}
您需要的是某种方法来抽象出当前使用的地图。您可以通过保留指向当前地图的指针,或使用一个将 return 引用当前地图的函数来实现 - 索引变量将指示哪个地图是当前地图。
因此,当您的用户到达坐标时,您应该将当前地图 index/pointer 更新为新地图。您可能还想在某处存储应该使用哪个新地图的信息。以下是一些方法,但还有更多。
decltype(map)& get_map(int map_index) {
switch(map_index) {
case 1:
return map;
case 2:
default:
return map2;
}
}
struct map_obj {
int current_map;
decltype(map[0])& operator[](int ind1) {
auto& mp = get_map(current_map);
return mp[ind1];
}
};
int main()
{
// mathod1: Pointer to the current map
char (*cur_map)[10][20] = ↦
if ( (*cur_map)[9][19] == '#' ) {}
// mathod1: Also pointer to current map, but using decltype
decltype(map)* cur_map2 = ↦
if ( (*cur_map2)[9][19] == '#' ) {}
// mathod2: Use function which returns reference to current map
int current_map = 0;
if ( get_map(current_map)[9][19] == '#' ) {}
// mathod3: Use object which uses operator[] to return row for specified column
map_obj mp;
mp.current_map = 1;
if ( mp[9][19] == '#' ) {}
}
因此,问题如下:我已将数组设置为 "map"s,玩家 (@) 可以在其中移动。但是我怎样才能让程序切换地图,例如当玩家点击坐标时,如 [4] 和 [19]?
#include <iostream>
#include <windows.h>
using namespace std;
char plyr = '@';
char map[10][20] = {
"###################",
"#@ #",
"# #",
"# ",
"# ",
"# #",
"# #",
"# #",
"###################"
};
char map2[10][20] = {
"###################",
"# ############# #",
"# ## ",
" ",
" #",
"# #",
"# ####",
"# #######",
"###################"
};
int x = 1;
int y = 1;
bool gameRunning = true;
int main(){
while(gameRunning == true){
system("cls");
for(int disp=0; disp<10; disp++){
cout << map[disp] << endl;
}
system("pause>nul");
if(GetAsyncKeyState(VK_DOWN)){
int y2 = y+1;
if(map[y2][x] == ' '){
map[y][x] = ' ';
y++;
map[y][x] = plyr;
}
}
if(GetAsyncKeyState(VK_UP)){
int y2 = y-1;
if(map[y2][x] == ' '){
map[y][x] = ' ';
y--;
map[y][x] = plyr;
}
}
if(GetAsyncKeyState(VK_RIGHT)){
int x2 = x+1;
if(map[y][x2] == ' '){
map[y][x] = ' ';
x++;
map[y][x] = plyr;
}
}
if(GetAsyncKeyState(VK_LEFT)){
int x2 = x-1;
if(map[y][x2] == ' '){
map[y][x] = ' ';
x--;
map[y][x] = plyr;
}
}
}
return 0;
}
您可以像这样向数组添加另一个维度:
#include <iostream>
char map[2][10][20] =
{
{
"###################",
"#@ #",
"# #",
"# ",
"# ",
"# #",
"# #",
"# #",
"###################"
}
,
{
"###################",
"# ############# #",
"# ## ",
" ",
" #",
"# #",
"# ####",
"# #######",
"###################"
}
};
void display_map(int level)
{
std::cout << "level: " << (level + 1) << '\n';
for(int y = 0; y < 9; ++y)
std::cout << map[level][y] << '\n';
}
int main()
{
// Display both maps:
for(int level = 0; level < 2; ++level)
{
display_map(level);
std::cout << '\n';
}
}
您需要的是某种方法来抽象出当前使用的地图。您可以通过保留指向当前地图的指针,或使用一个将 return 引用当前地图的函数来实现 - 索引变量将指示哪个地图是当前地图。
因此,当您的用户到达坐标时,您应该将当前地图 index/pointer 更新为新地图。您可能还想在某处存储应该使用哪个新地图的信息。以下是一些方法,但还有更多。
decltype(map)& get_map(int map_index) {
switch(map_index) {
case 1:
return map;
case 2:
default:
return map2;
}
}
struct map_obj {
int current_map;
decltype(map[0])& operator[](int ind1) {
auto& mp = get_map(current_map);
return mp[ind1];
}
};
int main()
{
// mathod1: Pointer to the current map
char (*cur_map)[10][20] = ↦
if ( (*cur_map)[9][19] == '#' ) {}
// mathod1: Also pointer to current map, but using decltype
decltype(map)* cur_map2 = ↦
if ( (*cur_map2)[9][19] == '#' ) {}
// mathod2: Use function which returns reference to current map
int current_map = 0;
if ( get_map(current_map)[9][19] == '#' ) {}
// mathod3: Use object which uses operator[] to return row for specified column
map_obj mp;
mp.current_map = 1;
if ( mp[9][19] == '#' ) {}
}