Я начинаю знакомство с классом C++, и я очень застрял в этом проекте.
Мне нужно, чтобы мой персонаж «H» свободно перемещался по массиву. Я написал много своего кода, но когда я его компилирую и запускаю, моему герою не предоставляется возможность двигаться. Я не знаю, что происходит не так, когда я вызываю свою функцию в main. Любая помощь будет с удовольствием оценена. Мне нужно, чтобы его новое положение в массиве сохранялось, чтобы он мог найти злодея, который случайным образом помещается в массив. Я могу поработать над частью randint позже, но мне трудно просто заставить `` H '' двигаться.
Вот что у меня есть на данный момент:
Спасибо.
#include <iostream>
using namespace std;
void printBoard(char board[][8])
{
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
cout << board[x][y];
}
cout << endl;
}
}
void move(char board[][8], char umove)
{
cout << "Please enter which direction you would like to move." << endl;
cin >> umove;
if (umove == 'x')
{
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
board[x][y] = x - 1;
}
}
}
else if (umove == 'd')
{
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
board[x][y] = y + 1;
}
}
}
else if (umove == 'a')
{
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
board[x][y] = y - 1;
}
}
}
else if (umove == 'w')
{
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
board[x][y] = x + 1;
}
}
}
}
char userinput()
{
char usermove;
cout << "Please enter the direction you want to go." << endl;
cin >> usermove;
return usermove;
}
int main()
{
char board[8][8];
int x;
int y;
while (true)
{
for (x = 0; x < 8; x++)
{
for (y = 0; y < 8; y++)
{
board[x][y] = 'e';
}
}
board[0][0] = 'H';
printBoard(board);
void move();
return 0;
}
}
Когда я запускаю программу, я хотел бы, чтобы H перемещался по доске, когда я нажимаю w, a, x или d в соответствующих направлениях.





вы вызываете void move(), который является объявлением метода, и вместо этого вы должны использовать move(...) для вызова метода. return 0 приводит к завершению работы приложения, что в данной ситуации неверно. вы используете бесконечный цикл, и вы должны использовать условие для завершения игры.
в зависимости от вашего описания я предлагаю:
void printBoard(char board[][8]) {
// same as before
}
bool move(char board[][8], int &Hx, int &Hy) {
char umove;
cout << "Please enter which direction you would like to move." << endl;
cin >> umove;
if (umove == 'f') // f mean finish it
return false;
board[Hx][Hy] = 'e';
if (umove == 'a') // a mean left
Hy = Hy == 0 ? 7 : Hy - 1;
else if (umove == 'd') // d mean right
Hy = Hy == 7 ? 0 : Hy + 1;
else if (umove == 'w') // w mean up
Hx = Hx == 0 ? 7 : Hx - 1;
else if (umove == 's') // s mean down
Hx = Hx == 7 ? 0 : Hx + 1;
board[Hx][Hy] = 'H';
return true;
}
int main() {
char board[8][8];
int Hx = 0, Hy = 0;
for (int x = 0; x < 8; x++) {
for (int y = 0; y < 8; y++) {
board[x][y] = 'e';
}
}
board[Hx][Hy] = 'H';
bool res = true;
while (res) {
printBoard(board);
res = move(board, Hx, Hy);
}
cout << "Game finished!";
return 0;
}
Вы можете сделать char board[][], Hx и Hy (которые содержат текущую позицию H) глобальными и не отправлять их в метод, но это совсем не хорошо.
Надеюсь, это то, что вам нужно.
Да, это помогло. Я пытался заставить H перемещаться по доске, используя другую функцию void, но использование bool кажется лучшим методом для этого.
Добро пожаловать. если вы можете принять или проголосовать, чтобы другие знали, что это правда.
void move (); - это объявление метода в вашем коде, который ничего не делает.
return 0завершает программу, а циклwhileвыполняется только один раз. у вас есть платаchar, но вы назначаете ей целое число в методеmove. Я не могу этого понять. Можно ли отредактировать и добавить детали? Что ты хочешь делать?