Tworzę prostą minigierkę w konsoli. Chciałbym by "@" czyli gracz nie przechodził poza "#" oznaczające ścianę. Niestety nie mam innego pomysłu jak to zrobić a chciałbym dodać ściany wewnątrz planszy. Drugim problemem jest to że za każdym razem jak się postać porusza odświeża mapę. Czy jest możliwość by to odbywało się tak by nie było tego widać? Jeśli ktoś ma jeszcze jakieś inne porady to z chęcią wysłucham.
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cstdlib>
#include <ctime>
using namespace std;
/*
(0,0) (10,0)
(0,10) (10,10)
*/
void rysuj(const int X, const int Y, const int x, const int y, const char mapa[30][31])
{
system("cls");
cout << x << ", " << y << endl;
for(int ry=0; ry<Y; ry++)
{
for(int rx=0; rx<X; rx++)
{
if(rx==x && ry==y)
{
cout << '@';
}
else
{
cout << mapa[ry][rx];
}
}
cout << endl;
}
}
int main()
{
srand(time(NULL));
//mapa
const int X=30;
const int Y=15;
char mapa[30][30+1] =
{
"############################",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# * #",
"############################"
};
//klawiatura
int kod=0, kodPoprzedni=0;
//pozycja gracza
int x=1, y=1;
//licznik punktów
int pkt=0;
rysuj(X, Y, x, y, mapa);
while(true)
{
kodPoprzedni = kod;
kod = getch();
if(kodPoprzedni==224)
{
switch(kod)
{
case 72:
cout << "G";
y--;
break;
case 80:
cout << "D";
y++;
break;
case 77:
cout << "P";
x++;
break;
case 75:
cout << "L";
x--;
break;
}
if(mapa[y][x] == '*')
{
mapa[y][x] = ' ';
mapa[(rand() % 7)+1][(rand() % 26)+1] = '*';
pkt+=1;
}
if(mapa[y][x] == '#')
{
}
if(y==8) y-=1; // Ustawienie granicy planszy
if(y==0) y+=1;
if(x==27) x-=1;
if(x==0) x+=1;
rysuj(X, Y, x, y, mapa);
}
cout<<"Punkty: "<<pkt<<endl;
}
return 0;
}