Witam, napisałem prymitywny silnik gry 2d, który wyświetla mapę złożoną z kropek i naszą postać jako znak @. Postacią można poruszać po mapie za pomocą klawiszy WASD.
Przy kompilacji ukazuje nam się napisa początkowy (witaj, naciśnij 1 aby...) po wpisaniu 1 program powinien wyświetlić mapkę, jednak nic się nie dzieje, po kilku sekundach Windows wyświetla błąd i zamyka program.
Ktoś wie co jest nie tak?
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <windows.h> //polish notes
using namespace std;
int const mapa_x = 10;
int const mapa_y = 10;
struct posXY // struktura przechowujaca pozycje gracza
int pos_x, pos_y;
};
posXY gracz;
void ruch() // funkcja odpowiadajaca za ruch gracza
{
char krok = getch();
switch(krok){
case 'w':
{
if(gracz.pos_x == 0)
break;
else gracz.pos_x--;
};
case 'a':
{
if(gracz.pos_y == 0)
break;
else gracz.pos_y--;
};
case 's':
{
if(gracz.pos_x == mapa_x)
break;
else gracz.pos_x++;
};
case 'd':
{
if(gracz.pos_y == mapa_y)
break;
else gracz.pos_y++;
};
}
}
class Mapa // klasa mapy
{
int mapa[mapa_x][mapa_y]; // tablica dwuwymiarowa - pole mapy
public:
Mapa() // ... konstruktor? który ustala mape jako czystą bazowo
{
for(int i = 0; i < mapa_x; i++)
{
for(int j = 0; j < mapa_y; i++)
{
mapa[i][j] = 0;
}
};
};
void pozycja() // startowa pozycja gracza
{
mapa[gracz.pos_x][gracz.pos_y] = 1;
}
void rysuj() // rysuje mape
{
for(int i = 0; i< mapa_x; i++)
{
for(int j = 0; j < mapa_y; j++)
{
switch(mapa[i][j])
{case 0:
{
cout << ".";
break;
}
case 1:
{
cout << "@";
break;
}
}
}; cout << endl;
};
};
void czysc() // resetuje mape
{
for(int i = 0; i < mapa_x; i++)
{
for(int j = 0; j < mapa_y; i++)
{
mapa[i][j] = 0;
}
};
}
};
int main()
{
int wybor;
cout << endl;
cout << " Witaj w prostej grze" << endl;
cout << " Nacisnij 1 aby zaczac, inna liczbe aby wyjsc"<< endl;
cin >> wybor;
Mapa m;
if( wybor == 1)
{
for(;;)
{
m.czysc();
m.rysuj();
ruch();
system("cls");
}
}
return 0;
}