Я пытаюсь отслеживать местоположение игрока с x, обозначающим их место. Когда игрок входит в строку, я соответственно увеличиваю координаты. Однако, когда игрок находится в одном пространстве от периметра, затем пытается переместиться к краю карты, игрок исчезает.Элемент массива исчезает
Пример:
.....
...x.
.....
.....
.....
Игрок находится в 'x'
Если игрок вводит строку "право" и переместить player_loc
, массив просто возвращает:
.....
.....
.....
.....
.....
Я попытался добавить своего рода буфера, увеличивая размер массива. Не повезло. Я застрял на этом почти неделю. Любая помощь будет оценена по достоинству. Прошу прощения за беспорядочный код. Я полный новичок в этом, и я действительно просто путешествую в темноте со всем этим. Я исследовал это на форумах здесь и не нашел решения. Если вы знаете что-то, что я, возможно, пропустил, не стесняйтесь указывать мне в этом направлении.
#include <stdio.h>
#include <string.h>
char map[6][6];
char player_loc = 'x';
int row;
int col;
void init_map()
{
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
map[i][j] = '.';
}
}
}
void print_map()
{
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
}
int get_player_loc()
{
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 5; k++) {
if(map[j][k] == player_loc)
{
row = k;
col = j;
}
}
}
return row;
return col;
}
void init_player_loc()
{
int check = 1;
for (int g = 0; g < 5; g++) {
for (int h = 0; h < 5; h++) {
if (map[g][h] == 'x') {
check = 0;
}
}
}
if(check == 1) {
map[0][0] = player_loc;
} else {
get_player_loc();
}
}
void move_left()
{
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (map[i][j] == player_loc) {
map[i][j-1] = player_loc;
map[i][j] = '.';
}
}
}
}
void move_right()
{
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (map[i][j] == player_loc) {
map[i][j+1] = player_loc;
map[i][j] = '.';
}
}
}
}
int main(int argc, char* argv[])
{
char input[15];
printf("You enter a room...you can go left, right, or straight. Which way do you go?\n");
int done = 0;
init_map();
map[3][3] = player_loc;
//init_player_loc();
print_map();
while (!done) {
scanf("%s", input);
if (strcmp("left", input) == 0) {
move_left();
printf("You go left...\n");
print_map();
get_player_loc();
printf("%d %d\n", row, col);
done = 1;
}
else if (strcmp("right", input) == 0) {
move_right();
printf("You go right...\n");
print_map();
get_player_loc();
printf("%d %d\n", row, col);
done = 1;
}
else if (strcmp("straight", input) == 0) {
printf("You go straight...");
done = 1;
}
else {
printf("Sorry, can't do that.\n");
}
}
}
где вы увеличиваете индексы? – zubergu
Извините, не понял, что я вставил старый файл. Исправлено. В операторах if я печатаю координаты в попытке отладить это. На самом деле это не часть «игры». – Jiskadar
В 'get_player_loc()' вы не можете использовать 'return row; return col; } 'для возврата строки и столбца; он возвращает одно значение, и это оператор 'row' -' return col ;' недопустим, и компилятор должен предупредить об этом. Однако, если вы устанавливаете глобальные переменные, вам не нужно возвращать ни одно значение; 'get_player_loc()' должен быть 'void get_player_loc (void)' без возврата в конце. Или вы можете вернуться из «if» и получить ошибку, если дойдете до конца; что бы показать проблему (без игрока). –