Snake Game
Snake Game developed using Object Oriented Design principles.
Developed a Snake Game using object-oriented design principles for the COMP ENG 2SH4 course, showcasing a snippet from the main project file below!
#include <iostream>
#include "MacUILib.h"
#include "objPos.h"
#include "objPosArrayList.h"
#include "GameMechs.h"
#include "Player.h"
//using namespace std;
#define DELAY_CONST 100000
GameMechs* myGM;
Player* myPlayer;
void Initialize(void);
void GetInput(void);
void RunLogic(void);
void DrawScreen(void);
void LoopDelay(void);
void CleanUp(void);
int main(void)
{
Initialize();
while(myGM->getExitFlagStatus() == false)
{
GetInput();
RunLogic();
DrawScreen();
LoopDelay();
}
CleanUp();
}
void Initialize(void)
{
MacUILib_init();
MacUILib_clearScreen();
myGM = new GameMechs(26,13);
myPlayer = new Player(myGM);
srand(time(NULL));
objPos tempPos;
myGM->generateFood(tempPos);
}
void GetInput(void)
{
myGM->getInput();
}
void RunLogic(void)
{
myPlayer->updatePlayerDir();
myPlayer->movePlayer();
if (myPlayer->checkSelfCollision())
{
myGM->setLoseFlag();
myGM->setExitTrue();
return;
}
myGM->clearInput();
}
void DrawScreen(void)
{
MacUILib_clearScreen();
bool drawn;
objPosArrayList* playerBody = myPlayer->getPlayerPos();
objPos tempBody;
objPos tempFoodPos;
myGM->getFoodPos(tempFoodPos);
//creating a for loop to iterate through Y values
for (int i = 0; i < myGM->getBoardSizeY(); i++)
{
//creating a for loop to iterate through X values
for (int j = 0; j < myGM->getBoardSizeX(); j++)
{
drawn = false;
//creating a for loop to print each of the elements in the snake
for (int k = 0; k < playerBody->getSize(); k++)
{
playerBody->getElement(tempBody, k);
if (tempBody.x == j && tempBody.y == i)
{
MacUILib_printf("%c", tempBody.symbol);
drawn = true;
break;
}
}
//coninuing if we've drawn the player
if (drawn)
{
continue;
}
//printing the border
if (i == 0 || i == myGM->getBoardSizeY() - 1 || j == 0 || j == myGM->getBoardSizeX() - 1)
{
MacUILib_printf("%c",'#');
}
//printing the food pos
else if (i == tempFoodPos.y && j == tempFoodPos.x)
{
MacUILib_printf("%c", tempFoodPos.symbol);
}
//printing blank spaces
else
{
MacUILib_printf("%c",' ');
}
}
MacUILib_printf("\n");
}
//printing the score
MacUILib_printf("Score: %d\n", myGM->getScore());
//printing debugging messages
MacUILib_printf("===== DEBUG MESSAGES =====\n");
MacUILib_printf("Player Positions:\n");
for (int l = 0; l < playerBody->getSize(); l++)
{
playerBody->getElement(tempBody, l);
MacUILib_printf("<%d, %d> ", tempBody.x, tempBody.y);
}
MacUILib_printf("\nBoard Size: %dx%d", myGM->getBoardSizeX(), myGM->getBoardSizeY());
MacUILib_printf("\nFood Pos: <%d, %d> + %c\n", tempFoodPos.x, tempFoodPos.y, tempFoodPos.symbol);
}
void LoopDelay(void)
{
MacUILib_Delay(DELAY_CONST); // 0.1s delay
}
void CleanUp(void)
{
MacUILib_clearScreen();
//printing either losing screen or exit screen
myGM->getLoseFlagStatus() ? (MacUILib_printf("You Lost! Final Score: %d\n", myGM->getScore())) : (MacUILib_printf("Game Exited\n"));
MacUILib_uninit();
//removing the heap instances
delete myGM;
delete myPlayer;
}