我是C ++的初学者,正在编写一个名为dungeoncrawl.cpp的程序。
因此,到目前为止,程序的第一部分(地图生成和随机位置)到目前为止都很好,但是对于运动机制,我发现了一个问题。 是的,到目前为止,我只添加了左右键,但是该程序似乎只能识别switch语句中的第二种情况,例如,当我按下“ d”键时,播放器移至右侧,但是当我按下“ a”键时,什么也不会发生,而且如果我改变案件的顺序,将会发生相反的情况。 我很确定可以使用if语句使它起作用,但是我很好奇。 感谢您的帮助。
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
// dungeoncrawl.cpp
// Make a program that outputs a simple grid based gameboard to the screen
// using either numbers or characters.
// Allow the user (marked by G in the example) to move either up, down, left,
// or right each turn.
// If the player steps on a trap then they lose. If the make it to the
// treasure 'X' then they win.
int i;
char table[76];
class game {
public:
void board() { // GAME BOARD
srand(time(0));
for (i = 0; i <= 76; i++) {
if (i % 11 == 0) {
table[i] = '\n';
} else {
table[i] = '.';
}
}
// ENEMIES
for (int x = 0; x < 3; x++) {
i = (rand() % 75);
if (table[i] != '\n' && table[i] != 'G' && table[i] != 'X' &&
table[i] != 'T') {
table[i] = 'T';
} else {
i = (rand() % 75 + 1);
if (table[i] != '\n' && table[i] != 'G' && table[i] != 'X' &&
table[i] != 'T') {
table[i] = 'T';
}
}
}
// PLAYER
i = (rand() % 25 + 1); // player initiantes in the beggining of the board
if (table[i] != '\n' && table[i] != 'G' && table[i] != 'X' &&
table[i] != 'T') {
table[i] = 'G';
} else {
i = (rand() % 25 + 1);
if (table[i] != '\n' && table[i] != 'G' && table[i] != 'X' &&
table[i] != 'T') {
table[i] = 'G';
}
}
// TREASURE
table[75] = 'X';
// PRINT BOARD
for (i = 0; i <= 76; i++) cout << table[i];
}
};
// board:
// game obj;
// obj.board();
int main() {
char move;
game obj;
obj.board();
// player move
while (table[75] != 'G') {
cout << "\n"
<< "Make your move: ";
cin >> move;
switch (move) {
case 'a':
for (i = 0; i <= 76; i++) {
if (table[i] == 'G') {
table[i] = '.';
table[i - 2] = 'G';
break;
}
}
case 'd':
for (i = 0; i <= 76; i++) {
if (table[i] == 'G') {
table[i] = '.';
table[i + 2] = 'G';
break;
}
}
}
for (i = 0; i <= 76; i++) cout << table[i];
}
return 0;
}
答案 0 :(得分:0)
您没有足够的break语句,您所拥有的中断位于for循环内,并且可以中断
尝试一下:
case 'a':
for (i=0;i<=76;i++){
if (table [i]=='G') {
table [i]='.';
table [i-2]='G';break;}
}
break;
case 'd':
for (i=0;i<=76;i++){
if (table [i]=='G') {
table [i]='.';
table [i+2]='G';break;}
}
break;