Compare commits
No commits in common. "4f7cacfc441e116c892318fc46ad854bba204f7c" and "9bb4b8ebcac0d82c5940cb0c61b3eca3c47a8776" have entirely different histories.
4f7cacfc44
...
9bb4b8ebca
@ -36,33 +36,17 @@ namespace snakeplusplus
|
|||||||
return lastKnownDirection;
|
return lastKnownDirection;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AISnake::UpdateProbability(int snakeSize)
|
|
||||||
{
|
|
||||||
probabilityBFS = 1 - ((double) snakeSize) / 1000;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets a new path for the bot to follow
|
// Gets a new path for the bot to follow
|
||||||
// Uses DFS algorithm
|
// Uses DFS algorithm
|
||||||
void AISnake::GetNewPath(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries, const int snakeSize)
|
void AISnake::GetNewPath(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries, const int snakeSize)
|
||||||
{
|
{
|
||||||
// Search for food
|
// Search for food
|
||||||
/*
|
|
||||||
BFS(gameBoard, source, boundaries);
|
BFS(gameBoard, source, boundaries);
|
||||||
if (gameBoard[botPathUnsanitized.top().y][botPathUnsanitized.top().x] != 'X') {
|
if (gameBoard[botPathUnsanitized.top().y][botPathUnsanitized.top().x] != 'X') {
|
||||||
while (!botPathUnsanitized.empty()) { botPathUnsanitized.pop(); }
|
while (!botPathUnsanitized.empty()) { botPathUnsanitized.pop(); }
|
||||||
DFS(gameBoard, source, boundaries);
|
DFS(gameBoard, source, boundaries);
|
||||||
while (botPathUnsanitized.size() > 15) { botPathUnsanitized.pop(); }
|
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
|
// Create path for food
|
||||||
path.push(botPathUnsanitized.top());
|
path.push(botPathUnsanitized.top());
|
||||||
botPathUnsanitized.pop();
|
botPathUnsanitized.pop();
|
||||||
@ -152,12 +136,6 @@ namespace snakeplusplus
|
|||||||
}
|
}
|
||||||
for (sf::Vector2f newLocation : localLocations) {
|
for (sf::Vector2f newLocation : localLocations) {
|
||||||
try {
|
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))
|
if ((!visited.at(newLocation.y).at(newLocation.x))
|
||||||
&& (gameBoard.at(newLocation.y).at(newLocation.x) == ' ')) {
|
&& (gameBoard.at(newLocation.y).at(newLocation.x) == ' ')) {
|
||||||
search.push(newLocation);
|
search.push(newLocation);
|
||||||
|
@ -14,9 +14,7 @@ namespace snakeplusplus
|
|||||||
AISnake();
|
AISnake();
|
||||||
void GetNewPath(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries, const int snakeSize);
|
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);
|
PlayerDirection GetInput(const sf::Vector2f* source);
|
||||||
void UpdateProbability(int snakeSize);
|
|
||||||
private:
|
private:
|
||||||
double probabilityBFS = 1.000;
|
|
||||||
std::stack<sf::Vector2f> botPathUnsanitized;
|
std::stack<sf::Vector2f> botPathUnsanitized;
|
||||||
void BFS(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries);
|
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);
|
void DFS(const std::vector< std::vector<char> >& gameBoard, const sf::Vector2f& source, const sf::Vector2f& boundaries);
|
||||||
|
@ -36,16 +36,13 @@ namespace snakeplusplus
|
|||||||
|
|
||||||
void GameEngine::Loop(void)
|
void GameEngine::Loop(void)
|
||||||
{
|
{
|
||||||
int currentScore = 0;
|
|
||||||
while (graphics.IsOpen())
|
while (graphics.IsOpen())
|
||||||
{
|
{
|
||||||
if (isGameOver) { Reset(); }
|
if (isGameOver) { Reset(); }
|
||||||
UpdatePlayerSpeed();
|
UpdatePlayerSpeed();
|
||||||
PlaceNewSnakePart(MovePlayer());
|
PlaceNewSnakePart(MovePlayer());
|
||||||
RegenerateFood();
|
RegenerateFood();
|
||||||
currentScore = player.body.size() * 100;
|
graphics.DisplayGameState(gameBoard);
|
||||||
bot.UpdateProbability(player.body.size());
|
|
||||||
graphics.DisplayGameState(gameBoard, currentScore);
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -71,20 +71,7 @@ namespace snakeplusplus
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerOutput::DisplayScore(int score) {
|
void PlayerOutput::DisplayGameState(std::vector< std::vector<char> >& gameBoard)
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
CheckWindowEvents();
|
CheckWindowEvents();
|
||||||
char* letterOnBoard;
|
char* letterOnBoard;
|
||||||
@ -107,7 +94,6 @@ namespace snakeplusplus
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DisplayScore(score);
|
|
||||||
gameWindow.display();
|
gameWindow.display();
|
||||||
sf::sleep(delay);
|
sf::sleep(delay);
|
||||||
return;
|
return;
|
||||||
|
@ -17,8 +17,7 @@ namespace snakeplusplus
|
|||||||
PlayerOutput(void);
|
PlayerOutput(void);
|
||||||
bool IsOpen(void);
|
bool IsOpen(void);
|
||||||
void CheckContinue(bool isBotControlled);
|
void CheckContinue(bool isBotControlled);
|
||||||
void DisplayGameState(std::vector< std::vector<char> >& gameBoard, int score);
|
void DisplayGameState(std::vector< std::vector<char> >& gameBoard);
|
||||||
void DisplayScore(int score);
|
|
||||||
void StartGameWindow(void);
|
void StartGameWindow(void);
|
||||||
private:
|
private:
|
||||||
void CheckWindowEvents(void);
|
void CheckWindowEvents(void);
|
||||||
@ -31,7 +30,7 @@ namespace snakeplusplus
|
|||||||
sf::RectangleShape drawObject;
|
sf::RectangleShape drawObject;
|
||||||
sf::Event event;
|
sf::Event event;
|
||||||
bool isWindowAlive;
|
bool isWindowAlive;
|
||||||
sf::Time delay = sf::milliseconds(10);
|
sf::Time delay = sf::milliseconds(15);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user