hej, "napisałem" grę snake i nic nie jest tak jak miało być (chociaż program kompiluje się poprawnie) . przypuszczam że zrobiłem błąd przy poruszaniu się węża lub generowaniu mapy . Na razie nie dodałem jeszcze schematu jedzenia owoców ani zabezpieczenia wyjścia poza mapę, zabezpieczenia przed cofaniem itp... . Ostatnio dodaje dość sporo postów ne temat tej gry ale uparłem się że muszę ją napisać a z racji że jestem kiepskim programistą (mimo tego że lubię to robić) to ciągle napotykam jakieś problemy ,na dole podałem fragment kodu w którym najprawdopodobniej popełniłem błąd , oraz cały kod gry . Dam też linki do wcześniejszych moich zapytań ,dziękuje za pomoc i cierpliwość , pozdrawiam
https://forum.pasja-informatyki.pl/250781/prototyp-gry-snake-w-c#c250813 oraz https://forum.pasja-informatyki.pl/250831/skrecanie-weza-w-grze-snake#a250851
kod poruszania się wężyka :
void snake_vector()
{
if(snake_direction==left)
{
position pos;
pos.y = snake_body[0].y-1;
pos.x = snake_body[0].x;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
if(snake_direction==right)
{
position pos;
pos.y = snake_body[0].y+1;
pos.x = snake_body[0].x;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
if(snake_direction==up)
{
position pos;
pos.y = snake_body[0].y;
pos.x = snake_body[0].x-1;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
if(snake_direction==down)
{
position pos;
pos.y = snake_body[0].y;
pos.x = snake_body[0].x+1;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
}
cały kod :
#include <iostream>
#include <vector>
#include <windows.h>
#include <cstdlib>
#include <conio.h>
#include <time.h>
using namespace std;
const short mapX = 20;
const short mapY = 60;
struct position
{
int x, y;
};
//////////////////////////////////////////////////////////////////
class GameProgress
{
public:
vector<position>snake_body; //vector weza
position sPos; //pozycje obiektow
short map[mapX][mapY]; //mapa
enum direction //kierunik
{
left,
right,
up,
down
};
direction snake_direction = left;
void snake_control() //kontrola nad wezem
{
char z = getch();
switch(z)
{
case 'a': snake_direction = left; break;
case 'd': snake_direction = right; break;
case 'w': snake_direction = up; break;
case 's': snake_direction = down; break;
}
}
void snake_vector()
{
if(snake_direction==left)
{
position pos;
pos.y = snake_body[0].y-1;
pos.x = snake_body[0].x;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
if(snake_direction==right)
{
position pos;
pos.y = snake_body[0].y+1;
pos.x = snake_body[0].x;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
if(snake_direction==up)
{
position pos;
pos.y = snake_body[0].y;
pos.x = snake_body[0].x-1;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
if(snake_direction==down)
{
position pos;
pos.y = snake_body[0].y;
pos.x = snake_body[0].x+1;
snake_body.insert(snake_body.begin(),pos);
snake_body.pop_back();
}
}
void game_begin()
{
snake_body.push_back(sPos); //na start waz jest troche dloszy
snake_body.push_back(sPos);
snake_body.push_back(sPos);
snake_body[0].x=10;
snake_body[0].y=30;
snake_body[0].x=10;
snake_body[0].y=31;
snake_body[0].x=10;
snake_body[0].y=32;
for(int i=0; i<mapX; i++)
{
for(int j=0; j<mapY; j++)
{
map[i][j]=0;
}
}
}
};
////////////////////////////////////////////////////////////////
class GameMap
{
public:
GameProgress obj;
void render_map()
{
for(int s=0; s<obj.snake_body.size(); s++) //render mapy
{
for(int i=0; i<mapX; i++)
{
for(int j=0; j<mapY; j++)
{
if((i==obj.snake_body[s].x)&&(j==obj.snake_body[s].y))
{
obj.map[i][j]=1;
}
}
}
}
for(int i=0; i<mapX; i++) //byc moze tu jest blad s
{
for(int j=0; j<mapY; j++)
{
switch(obj.map[i][j])
{
case 0: cout.put('.'); break;
case 1: cout.put('#'); break;
}
}
cout<<endl;
}
for(int i=0; i<mapX; i++)
{
for(int j=0; j<mapY; j++)
{
obj.map[i][j]=0;
}
}
}
};
///////////////////////////////////////////////////////
class GameLoop
{
public:
void null_map(int x, int y) //czyszczenie ekranu
{
HANDLE hCon;
COORD dwPos;
dwPos.X = x;
dwPos.Y = y;
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hCon,dwPos);
}
void loop()
{
GameProgress gp;
GameMap gm;
gp.game_begin();
while(true)
{
null_map(0,0); //czyszczenie
Sleep(100); //uspienie
gp.snake_vector(); //poruszanie sie weza
gm.render_map(); //render mapy
if(kbhit()==true) //jezeli kliknieto klawisz
{
gp.snake_control();//to pobierz argument od gracza
}
}
}
};
/////////////////////////////////////////////////////////////
int main()
{
GameLoop begin_game;
begin_game.loop();
return 0;
}
Jak czegoś nie rozumiecie to piszcie ...