Dziwna zamiana zmiennych

0

Witam! Pisząc zwykłe przesuwanie się "X" po mapie w konsoli natrafiłem na problem. Zamieniają mi się klawisze tak jakby. na pewno coś na odwrót napisałem. Proszę o przejrzenie kodu:

int x = 1, y = 1;
int map[10][10];

void move(int _x, int _y)
{
    map[x][y] = 0; //likwidacja starego
    x = _x; //aktualizacja pozycji na nowe
    y = _y;
    map[x][y] = 1; //postawienie nowego
}

int main()
{
    char choice;
    while (choice != 'q')
    {
        system("CLS");
        for (int _x = 1; _x <= 10; _x++) //pętla x (tak mi się wydaję ;p)
        {
            for (int _y = 1; _y <= 10; _y++) //pętla y
            {
                if (map[_x][_y] == 1) cout << "X"; //czyżby tu coś nie tak?
                else cout << ".";
            }
            cout << endl;
        }
        cout << endl;
        cout << "Wprowadz kierunek ruchu (w, a, s, d): ";
        choice = getch();
        switch(choice)
        {
            case 'w': move(x, y - 1); break; //wydaję mi się że tak powinno być, zgodnie z prawami układu współrzędnych
            case 's': move(x, y + 1); break;
            case 'a': move(x - 1, y); break;
            case 'd': move(x + 1, y); break;
            case 'q': return 1;
        }
    }
    return 0;
}

Nie wiem co o tym myśleć. Proszę o pomoc.

Pragnę dodać, że przy poruszaniu się np. w górę "X" mi idzie na bok. To samo w bok leci po osi Y. ;(

0

Problem nie polega na współrzędnych, tylko na pętli. Musisz pamiętać, że pierwsza pętla odpowiada za wiersz(w naszym przypadku są to y), a pętla wewnętrzna odpowiada za kolumny (x). Więc w tym jest problem. Twój kod napisałbym troszkę inaczej(działa prawidłowa):

int x = 0, y = 0;
int map[10][10];

void gra(int,int); 
int main()
{
    gra(0,0);
}

void gra(int x, int y)
{
   system("CLS");
   char choice;  
   
   for (int _y = 0; _y < 10; _y++) 
   {
        for (int _x = 0; _x < 10; _x++) //pętla y
        {
                if (_x == x && _y == y) cout << "X"; 
                else cout << ".";
        }
        
        cout << endl;
   }
        cout << endl;
        cout << "Wprowadz kierunek ruchu (w, a, s, d): ";
        choice = getch();
        switch(choice)
        {
            case 'w': 
               y--;   
               break; 
            case 's':
               y++;
               break;
            case 'a': 
               x--; 
               break;
            case 'd': 
               x++; 
               break;
            case 'q': 
               exit(0);
        }
        gra(x,y);
}
}
  1. Twój program też źle działał, ponieważ odwoływałeś się do 10-tego elementu tablicy, który nie istnieje
  2. Miał też bug'a, ponieważ x mógł być równy -1, co to by oznaczało, chyba każdy wie(musisz też się przed tym zabezpieczyć)
  3. Musisz też zapamiętać, że matematyczny układ współrzędnych różni się od informatycznego
0

Dzięki za rozwiązanie problemu :) Faktycznie nie pomyślałem. Tutaj jest z Y na odwrót jak w matmie. Teraz działa jak należy. A co do reszty 'usterek' to wiem, ale pisałem kod na szybko, bo nudziłem się i to tylko tak. Teraz już poprawiłem całość i działa jak należy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1