题目描述:你需要设计一个控制台地图游戏,玩家需要通过控制台输入来移动自己的角色,并在地图上寻找宝藏。玩家可以通过键盘控制小球向上、向下、向左或向右移动。当小球移动到宝藏处时,游戏结束,输出恭喜信息。
要求:
可以通过输入行数和列数调整地图的大小;
可以随机生成宝藏位置和角色起始位置,注意两者不能相同,借助rand()函数生成;
提示:可以采用w、s、a、d表示键盘控制的方向。游戏开始时用O表示角色起始位置,X表示宝藏所在位置。当到达目的地后,即X和O符号重合时变成“$”符号。
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以实现这个控制台地图游戏。具体解决方案如下:
1.设计地图,可以使用二维数组来表示。
char map[10][10] = {
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', 'O', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', '*' },
{ '*', '*', '*', '*', '*', '*', '*', '*', '*', 'X' }
};
2.利用循环输出出地图。
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << map[i][j] << " ";
}
cout << endl;
}
3.定义小球的位置和宝藏的位置,还要定义变量flag来判断游戏是否结束。
int ballx = 1, bally = 1;
int treasurex = 9, treasurey = 9;
bool flag = false;
4.利用while循环来实现移动小球。
while (!flag)
{
char move;
cin >> move;
switch (move)
{
case 'w': //上
if (map[ballx - 1][bally] == 'X')
{
map[ballx - 1][bally] = 'O';
map[ballx][bally] = ' ';
flag = true;
}
else if (map[ballx - 1][bally] == '*')
{
cout << "不能移动" << endl;
}
else
{
map[ballx - 1][bally] = 'O';
map[ballx][bally] = ' ';
ballx--;
}
break;
case 's': //下
//类似上面的代码
case 'a': //左
//类似上面的代码
case 'd': //右
//类似上面的代码
}
}
5.具体实现小球移动的代码如下:
case 'w':
if (map[ballx - 1][bally] == 'X')
{
map[ballx - 1][bally] = 'O';
map[ballx][bally] = ' ';
flag = true;
}
else if (map[ballx - 1][bally] == '*')
{
cout << "不能移动" << endl;
}
else
{
map[ballx - 1][bally] = 'O';
map[ballx][bally] = ' ';
ballx--;
}
break;
case 's':
//类似上面的代码
case 'a':
//类似上面的代码
case 'd':
//类似上面的代码
6.最后输出恭喜信息。
cout << "恭喜你,找到了宝藏!" << endl;
完整代码如下:
```c++
using namespace std;
int main() { char map[10][10] = { { '', '', '', '', '', '', '', '', '', '' }, { '', 'O', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', '' }, { '', '', '', '', '', '', '', '', '', 'X' } };
int ballx = 1, bally = 1;
int treasurex = 9, treasurey = 9;
bool flag = false;
while (!flag)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << map[i][j] << " ";
}
cout << endl;
}
char move;
cin >> move;
switch (move)
{
case 'w':
if (map[ballx - 1][bally] == 'X')
{
map[ballx - 1][bally] = 'O';
map[ballx][bally] = ' ';
flag = true;
}
else if (map[ballx - 1][bally] == '*')
{
cout << "不能移动" << endl;
}
else
{
map[ballx - 1][bally] = 'O';
map[ballx][bally] = ' ';
ballx--;