Muszę jeszcze prosić o jakieś wskazówki dotyczące programu, próbuję wykorzystać kontener deque lecz nadal mam problem.
Czy powinienem przerobić ten program od początku z wykorzystaniem kontenera stl ?
O to mój kod:
#include <iostream>
#include <ctime>
#include <conio.h>
#include <deque>
const int width = 40;
const int height = 20;
class Snake
{
int xFood, yFood, xHead, yHead, Score = 0;
enum Direction { LEFT, RIGHT, UP, DOWN };
Direction Dir;
//std::deque <int> x;
//std::deque <int> y;
int LengthSnake = 0;
public:
bool Gameover;
void StartGame();
void CreateMap();
void CreateFood();
void SnakePosition();
void ChangeDirection();
void MoveSnake();
};
//*************************************************************
int main()
{
srand(time(NULL));
Snake s1;
s1.StartGame();
while (!s1.Gameover)
{
system("cls");
s1.CreateMap();
s1.ChangeDirection();
s1.MoveSnake();
}
system("pause");
return 0;
}
//*************************************************************
void Snake::StartGame()
{
Gameover = false;
CreateFood();
SnakePosition();
}
void Snake::CreateMap()
{
for (int i = 0; i < width; i++)
std::cout << char(219); // up frame
std::cout << std::endl;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width - 1; j++)
{
if (j == 0)
std::cout << char(219); // left frame
else if (j == xFood && i == yFood)
std::cout << char(254);
else if (j == xHead && i == yHead)
std::cout << char(219);
else if (j > 0 || j < width - 1)
std::cout << char(255);
else if (j == width)
std::cout << char(219);
}
std::cout << char(219); // right frame
std::cout << std::endl;
}
for (int i = 0; i < width; i++)
std::cout << char(219); // down frame
std::cout << std::endl << std::endl;
std::cout << "Your Score: " << Score << std::endl << std::endl;
}
void Snake::CreateFood()
{
xFood = rand() % (width - 1) + 1;
yFood = rand() % (height - 1) + 1;
}
void Snake::SnakePosition()
{
xHead = width / 2;
yHead = height / 2;
}
void Snake::ChangeDirection()
{
if (_kbhit())
{
switch (_getch())
{
case 'a':
Dir = LEFT;
break;
case 'd':
Dir = RIGHT;
break;
case 'w':
Dir = UP;
break;
case 's':
Dir = DOWN;
break;
case 'x':
Gameover = true;
break;
}
}
}
void Snake::MoveSnake()
{
switch (Dir)
{
case LEFT:
xHead--;
break;
case RIGHT:
xHead++;
break;
case UP:
yHead--;
break;
case DOWN:
yHead++;
break;
default:
break;
}
if (xHead == xFood && yHead == yFood)
{
CreateFood();
Score += 10;
}
if (xHead >= width - 1 || xHead <= 0 || yHead < 0 || yHead >= height)
Gameover = true;
}