Compare commits

..

No commits in common. "4f7cacfc441e116c892318fc46ad854bba204f7c" and "9bb4b8ebcac0d82c5940cb0c61b3eca3c47a8776" have entirely different histories.

5 changed files with 4 additions and 46 deletions

View File

@ -36,33 +36,17 @@ namespace snakeplusplus
return lastKnownDirection;
}
void AISnake::UpdateProbability(int snakeSize)
{
probabilityBFS = 1 - ((double) snakeSize) / 1000;
return;
}
// Gets a new path for the bot to follow
// Uses DFS algorithm
void AISnake::GetNewPath(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries, const int snakeSize)
{
// Search for food
/*
BFS(gameBoard, source, boundaries);
if (gameBoard[botPathUnsanitized.top().y][botPathUnsanitized.top().x] != 'X') {
while (!botPathUnsanitized.empty()) { botPathUnsanitized.pop(); }
DFS(gameBoard, source, boundaries);
while (botPathUnsanitized.size() > 15) { botPathUnsanitized.pop(); }
}
*/
// Probability-based approach for fun
double roll = ((double) GenerateRandomNumber(RAND_MAX)) / ((double) RAND_MAX);
if (roll <= probabilityBFS)
{
BFS(gameBoard, source, boundaries);
} else {
DFS(gameBoard, source, boundaries);
}
// Create path for food
path.push(botPathUnsanitized.top());
botPathUnsanitized.pop();
@ -152,12 +136,6 @@ namespace snakeplusplus
}
for (sf::Vector2f newLocation : localLocations) {
try {
if (newLocation.x < 1 || newLocation.y < 1
|| newLocation.x > boundaries.x - 2
|| newLocation.y > boundaries.y - 2) {
continue;
}
if ((!visited.at(newLocation.y).at(newLocation.x))
&& (gameBoard.at(newLocation.y).at(newLocation.x) == ' ')) {
search.push(newLocation);

View File

@ -14,9 +14,7 @@ namespace snakeplusplus
AISnake();
void GetNewPath(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries, const int snakeSize);
PlayerDirection GetInput(const sf::Vector2f* source);
void UpdateProbability(int snakeSize);
private:
double probabilityBFS = 1.000;
std::stack<sf::Vector2f> botPathUnsanitized;
void BFS(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries);
void DFS(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries);

View File

@ -36,16 +36,13 @@ namespace snakeplusplus
void GameEngine::Loop(void)
{
int currentScore = 0;
while (graphics.IsOpen())
{
if (isGameOver) { Reset(); }
UpdatePlayerSpeed();
PlaceNewSnakePart(MovePlayer());
RegenerateFood();
currentScore = player.body.size() * 100;
bot.UpdateProbability(player.body.size());
graphics.DisplayGameState(gameBoard, currentScore);
graphics.DisplayGameState(gameBoard);
}
return;
}

View File

@ -71,20 +71,7 @@ namespace snakeplusplus
return;
}
void PlayerOutput::DisplayScore(int score) {
sf::Vector2f textPosition(gameBoundaries);
textPosition.x = textPosition.x / 2;
textPosition.y = textPosition.y / 2;
sf::Font font;
font.loadFromFile("Arial.ttf");
std::string text = "Score: " + std::to_string(score);
sf::Text ScoreText(text, font);
ScoreText.setPosition(textPosition);
gameWindow.draw(ScoreText);
}
void PlayerOutput::DisplayGameState(std::vector< std::vector<char> >& gameBoard, int score)
void PlayerOutput::DisplayGameState(std::vector< std::vector<char> >& gameBoard)
{
CheckWindowEvents();
char* letterOnBoard;
@ -107,7 +94,6 @@ namespace snakeplusplus
}
}
}
DisplayScore(score);
gameWindow.display();
sf::sleep(delay);
return;

View File

@ -17,8 +17,7 @@ namespace snakeplusplus
PlayerOutput(void);
bool IsOpen(void);
void CheckContinue(bool isBotControlled);
void DisplayGameState(std::vector< std::vector<char> >& gameBoard, int score);
void DisplayScore(int score);
void DisplayGameState(std::vector< std::vector<char> >& gameBoard);
void StartGameWindow(void);
private:
void CheckWindowEvents(void);
@ -31,7 +30,7 @@ namespace snakeplusplus
sf::RectangleShape drawObject;
sf::Event event;
bool isWindowAlive;
sf::Time delay = sf::milliseconds(10);
sf::Time delay = sf::milliseconds(15);
};
}