diff --git a/README.md b/README.md index 1f5f2e7..be8c47a 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ Usage: `./isnake [options]` * `./isnake -b [blocks]`: Set the number of blocks: between [0] and [40] (DEFAULT: [20]) * `./isnake -l [length]`: Set the snake's starting length: between [3] and [35] (DEFAULT: [3]) * `./isnake -s [speed]`: Set the snake's starting speed: between [1] and [9] (DEFAULT: [1]) +* `./isnake -2`: Double the size the game renders at * `./isnake -h`: Display help information ## Controls ## diff --git a/isnake.c b/isnake.c index eb60d6b..add504e 100644 --- a/isnake.c +++ b/isnake.c @@ -91,29 +91,29 @@ const int colourTextData[3] = { 135, 215, 255 }; // Blue // ENUMERATIONS FOR MORE READABLE CODE enum direction { Up, Down, Left, Right }; // Movement directions -enum gameParams { QuitGame, TilesHigh, TilesWide, NPCCount, SnakeSpeed, SnakeLength, SnakeDirection, SnakeScore }; +enum gameParams { QuitGame, TilesHigh, TilesWide, NPCCount, SnakeSpeed, SnakeLength, SnakeDirection, SnakeScore, RenderSizeMultiplier }; // GAME FUNCTIONS -void gameLoop(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], SDL_Event* event); -void moveSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], enum direction newDirection); -bool collisionDetect(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], enum direction newDirection); -void collisionDetectFood(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]); -bool gameEventPoll(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], SDL_Event* event); -bool scrollSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]); -void updateSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]); -void loadNPCs(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]); -void randomLocation(int** ppSprites, int (*gameParameters)[8], int* location[2]); +void gameLoop(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], SDL_Event* event); +void moveSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], enum direction newDirection); +bool collisionDetect(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], enum direction newDirection); +void collisionDetectFood(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]); +bool gameEventPoll(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], SDL_Event* event); +bool scrollSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]); +void updateSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]); +void loadNPCs(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]); +void randomLocation(int** ppSprites, int (*gameParameters)[9], int* location[2]); void drawText(SDL_Surface* screen, char* string, int size, int x, int y, SDL_Colour colour); void updateRect(SDL_Surface* screen, SDL_Rect** ppTiles, int position[2], const int colour[3]); // COMMANDLINE FUNCTIONS -void configureGame(int argc, char** args, int (*gameParameters)[8]); +void configureGame(int argc, char** args, int (*gameParameters)[9]); void printHelpMenu(char filename[]); void printErrorHelp(char filename[]); // MAIN LOOP int main(int argc, char* args[]) { - int x, y, gameParameters[8]; + int x, y, gameParameters[9]; int** ppSprites = NULL; int* pSprites = NULL; SDL_Surface* screen = NULL; @@ -144,7 +144,7 @@ int main(int argc, char* args[]) { atexit(TTF_Quit); // INITIALIZE THE MAIN SURFACE - if ((screen = SDL_SetVideoMode((TILEWIDTH * gameParameters[TilesWide]), (TILEHEIGHT * gameParameters[TilesHigh]) + 35, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT)) == NULL) { + if ((screen = SDL_SetVideoMode((TILEWIDTH * gameParameters[TilesWide] * gameParameters[RenderSizeMultiplier]), ((TILEHEIGHT * gameParameters[TilesHigh]) + 35) * gameParameters[RenderSizeMultiplier], 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT)) == NULL) { fprintf(stderr, "\nUnable to initialize SDL: %s\n", SDL_GetError()); exit(EXIT_FAILURE); } @@ -169,10 +169,10 @@ int main(int argc, char* args[]) { for (x = 0; x < gameParameters[TilesHigh]; x++) { for (y = 0; y < gameParameters[TilesWide]; y++) { - ppTiles[x][y].w = TILEWIDTH - (TILEWIDTH / 10); - ppTiles[x][y].h = TILEHEIGHT - (TILEHEIGHT / 10); - ppTiles[x][y].x = ((ppTiles[x][y].w + (TILEWIDTH / 10)) * y); - ppTiles[x][y].y = ((ppTiles[x][y].h + (TILEHEIGHT / 10)) * x); + ppTiles[x][y].w = TILEWIDTH * gameParameters[RenderSizeMultiplier] - (TILEWIDTH * gameParameters[RenderSizeMultiplier] / 10); + ppTiles[x][y].h = TILEHEIGHT * gameParameters[RenderSizeMultiplier] - (TILEHEIGHT * gameParameters[RenderSizeMultiplier] / 10); + ppTiles[x][y].x = ((ppTiles[x][y].w + (TILEWIDTH * gameParameters[RenderSizeMultiplier] / 10)) * y); + ppTiles[x][y].y = ((ppTiles[x][y].h + (TILEHEIGHT * gameParameters[RenderSizeMultiplier] / 10)) * x); SDL_FillRect(screen, &ppTiles[x][y], SDL_MapRGB(screen->format, colourTiles[0], colourTiles[1], colourTiles[2])); } } @@ -221,16 +221,16 @@ int main(int argc, char* args[]) { } // GAME LOOP -void gameLoop(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], SDL_Event* event) { +void gameLoop(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], SDL_Event* event) { SDL_Colour SDL_ColourBackground = { colourBackground[0], colourBackground[1], colourBackground[2] }; SDL_Colour SDL_ColourTextLabel = { colourTextLabel[0], colourTextLabel[1], colourTextLabel[2] }; SDL_Colour SDL_ColourTextData = { colourTextData[0], colourTextData[1], colourTextData[2] }; SDL_Colour SDL_ColourTextGameOver = { colourTextGameOver[0], colourTextGameOver[1], colourTextGameOver[2] }; - int scoreLabelPosition[2] = { 15, (TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4 }; - int scoreDataPosition[2] = { 95, (TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4 }; - int speedLabelPosition[2] = { (TILEWIDTH * (*gameParameters)[TilesWide]) - 100, (TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4 }; - int speedDataPosition[2] = { (TILEWIDTH * (*gameParameters)[TilesWide]) - 25, (TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4 }; - int gameOverMsgPosition[5] = { (TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) - 147, (TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) - 50, (TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) + 61, (TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) + 82, (TILEHEIGHT * (*gameParameters)[TilesHigh]) + 9 }; + int scoreLabelPosition[2] = { 15 * (*gameParameters)[RenderSizeMultiplier], ((TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4) * (*gameParameters)[RenderSizeMultiplier] }; + int scoreDataPosition[2] = { 95 * (*gameParameters)[RenderSizeMultiplier], ((TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4) * (*gameParameters)[RenderSizeMultiplier] }; + int speedLabelPosition[2] = { ((TILEWIDTH * (*gameParameters)[TilesWide]) - 100) * (*gameParameters)[RenderSizeMultiplier], ((TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4) * (*gameParameters)[RenderSizeMultiplier] }; + int speedDataPosition[2] = { ((TILEWIDTH * (*gameParameters)[TilesWide]) - 25) * (*gameParameters)[RenderSizeMultiplier], ((TILEHEIGHT * (*gameParameters)[TilesHigh]) + 4) * (*gameParameters)[RenderSizeMultiplier] }; + int gameOverMsgPosition[5] = { ((TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) - 147) * (*gameParameters)[RenderSizeMultiplier], ((TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) - 50) * (*gameParameters)[RenderSizeMultiplier], ((TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) + 61) * (*gameParameters)[RenderSizeMultiplier], ((TILEWIDTH * ((*gameParameters)[TilesWide] / 2)) + 82) * (*gameParameters)[RenderSizeMultiplier], ((TILEHEIGHT * (*gameParameters)[TilesHigh]) + 9) * (*gameParameters)[RenderSizeMultiplier] }; char* gameOverMsg[4] = { "GAME OVER", "SPACE to RESTART", " or ", "ESC to QUIT" }; char tempString[2][3] = { "-1", "-1" }; @@ -238,29 +238,29 @@ void gameLoop(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*ga loadNPCs(screen, ppTiles, ppSprites, gameParameters); // DRAW LABELS FOR SCORE AND SPEED RESPECTIVELY - drawText(screen, "SCORE", DEFAULT_FONT_SIZE, scoreLabelPosition[0], scoreLabelPosition[1], SDL_ColourTextLabel); - drawText(screen, "SPEED", DEFAULT_FONT_SIZE, speedLabelPosition[0], speedLabelPosition[1], SDL_ColourTextLabel); + drawText(screen, "SCORE", DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], scoreLabelPosition[0], scoreLabelPosition[1], SDL_ColourTextLabel); + drawText(screen, "SPEED", DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], speedLabelPosition[0], speedLabelPosition[1], SDL_ColourTextLabel); // LOOP UNTIL GAME IS FINISHED while (1) { // UPDATE THE SNAKE'S SCORE WHEN IT CHANGES if (atoi(tempString[0]) != (*gameParameters)[SnakeScore]) { if (atoi(tempString[0]) != -1) { - drawText(screen, tempString[0], DEFAULT_FONT_SIZE, scoreDataPosition[0], scoreDataPosition[1], SDL_ColourBackground); + drawText(screen, tempString[0], DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], scoreDataPosition[0], scoreDataPosition[1], SDL_ColourBackground); } sprintf(tempString[0], "%d", (*gameParameters)[SnakeScore]); - drawText(screen, tempString[0], DEFAULT_FONT_SIZE, scoreDataPosition[0], scoreDataPosition[1], SDL_ColourTextData); + drawText(screen, tempString[0], DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], scoreDataPosition[0], scoreDataPosition[1], SDL_ColourTextData); } // UPDATE THE SNAKE'S SPEED WHEN IT CHANGES if (atoi(tempString[1]) != (*gameParameters)[SnakeSpeed]) { if (atoi(tempString[1]) != -1) { - drawText(screen, tempString[1], DEFAULT_FONT_SIZE, speedDataPosition[0], speedDataPosition[1], SDL_ColourBackground); + drawText(screen, tempString[1], DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], speedDataPosition[0], speedDataPosition[1], SDL_ColourBackground); } sprintf(tempString[1], "%d", (*gameParameters)[SnakeSpeed]); - drawText(screen, tempString[1], DEFAULT_FONT_SIZE, speedDataPosition[0], speedDataPosition[1], SDL_ColourTextData); + drawText(screen, tempString[1], DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], speedDataPosition[0], speedDataPosition[1], SDL_ColourTextData); } if (gameEventPoll(screen, ppTiles, ppSprites, gameParameters, event) == false) { @@ -290,10 +290,10 @@ void gameLoop(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*ga // DISPLAY GAME OVER MESSAGE AND WAIT FOR INPUT if ((*gameParameters)[QuitGame] == 0) { // DISPLAY GAMEOVER MESSAGES - drawText(screen, gameOverMsg[0], DEFAULT_FONT_SIZE - 7, gameOverMsgPosition[0], gameOverMsgPosition[4], SDL_ColourTextGameOver); - drawText(screen, gameOverMsg[1], DEFAULT_FONT_SIZE - 9, gameOverMsgPosition[1], gameOverMsgPosition[4], SDL_ColourTextData); - drawText(screen, gameOverMsg[2], DEFAULT_FONT_SIZE - 9, gameOverMsgPosition[2], gameOverMsgPosition[4], SDL_ColourTextGameOver); - drawText(screen, gameOverMsg[3], DEFAULT_FONT_SIZE - 9, gameOverMsgPosition[3], gameOverMsgPosition[4], SDL_ColourTextData); + drawText(screen, gameOverMsg[0], (DEFAULT_FONT_SIZE - 7) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[0], gameOverMsgPosition[4], SDL_ColourTextGameOver); + drawText(screen, gameOverMsg[1], (DEFAULT_FONT_SIZE - 9) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[1], gameOverMsgPosition[4], SDL_ColourTextData); + drawText(screen, gameOverMsg[2], (DEFAULT_FONT_SIZE - 9) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[2], gameOverMsgPosition[4], SDL_ColourTextGameOver); + drawText(screen, gameOverMsg[3], (DEFAULT_FONT_SIZE - 9) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[3], gameOverMsgPosition[4], SDL_ColourTextData); SDL_Flip(screen); // WAIT A MOMENT TO ENSURE INPUT FROM THE GAME ISN'T CAUGHT @@ -316,27 +316,27 @@ void gameLoop(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*ga } } - drawText(screen, gameOverMsg[0], DEFAULT_FONT_SIZE - 7, gameOverMsgPosition[0], gameOverMsgPosition[4], SDL_ColourBackground); - drawText(screen, gameOverMsg[1], DEFAULT_FONT_SIZE - 9, gameOverMsgPosition[1], gameOverMsgPosition[4], SDL_ColourBackground); - drawText(screen, gameOverMsg[2], DEFAULT_FONT_SIZE - 9, gameOverMsgPosition[2], gameOverMsgPosition[4], SDL_ColourBackground); - drawText(screen, gameOverMsg[3], DEFAULT_FONT_SIZE - 9, gameOverMsgPosition[3], gameOverMsgPosition[4], SDL_ColourBackground); + drawText(screen, gameOverMsg[0], (DEFAULT_FONT_SIZE - 7) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[0], gameOverMsgPosition[4], SDL_ColourBackground); + drawText(screen, gameOverMsg[1], (DEFAULT_FONT_SIZE - 9) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[1], gameOverMsgPosition[4], SDL_ColourBackground); + drawText(screen, gameOverMsg[2], (DEFAULT_FONT_SIZE - 9) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[2], gameOverMsgPosition[4], SDL_ColourBackground); + drawText(screen, gameOverMsg[3], (DEFAULT_FONT_SIZE - 9) * (*gameParameters)[RenderSizeMultiplier], gameOverMsgPosition[3], gameOverMsgPosition[4], SDL_ColourBackground); SDL_Flip(screen); } - drawText(screen, "SCORE", DEFAULT_FONT_SIZE, scoreLabelPosition[0], scoreLabelPosition[1], SDL_ColourBackground); - drawText(screen, "SPEED", DEFAULT_FONT_SIZE, speedLabelPosition[0], speedLabelPosition[1], SDL_ColourBackground); + drawText(screen, "SCORE", DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], scoreLabelPosition[0], scoreLabelPosition[1], SDL_ColourBackground); + drawText(screen, "SPEED", DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], speedLabelPosition[0], speedLabelPosition[1], SDL_ColourBackground); if (atoi(tempString[0]) != -1) { - drawText(screen, tempString[0], DEFAULT_FONT_SIZE, scoreDataPosition[0], scoreDataPosition[1], SDL_ColourBackground); + drawText(screen, tempString[0], DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], scoreDataPosition[0], scoreDataPosition[1], SDL_ColourBackground); } if (atoi(tempString[1]) != -1) { - drawText(screen, tempString[1], DEFAULT_FONT_SIZE, speedDataPosition[0], speedDataPosition[1], SDL_ColourBackground); + drawText(screen, tempString[1], DEFAULT_FONT_SIZE * (*gameParameters)[RenderSizeMultiplier], speedDataPosition[0], speedDataPosition[1], SDL_ColourBackground); } } // MOVES THE SNAKE IN THE DESIRED DIRECTION -void moveSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], enum direction newDirection) { +void moveSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], enum direction newDirection) { int x; // MOVEMENT @@ -373,7 +373,7 @@ void moveSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*g } // DETECT+HANDLE WHEN THE SNAKE COLLIDES WITH WALLS, BLOCKS, ITSELF OR FOOD -bool collisionDetect(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], enum direction newDirection) { +bool collisionDetect(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], enum direction newDirection) { int x; switch (newDirection) { @@ -454,7 +454,7 @@ bool collisionDetect(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, i } // HANDLES COLLISION WITH FOOD -void collisionDetectFood(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]) { +void collisionDetectFood(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]) { // INCREASE THE SNAKE'S SIZE IF IT'S NOT ALREADY THE MAXIMUM if ((*gameParameters)[SnakeLength] < MAX_SNAKELENGTH) { (*gameParameters)[SnakeLength]++; @@ -476,7 +476,7 @@ void collisionDetectFood(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprite } // CAPTURES INPUT AND GENERATES APPROPRIATE RESPONSE -bool gameEventPoll(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8], SDL_Event* event) { +bool gameEventPoll(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9], SDL_Event* event) { bool playerAlive = true; if (SDL_PollEvent(event)) { @@ -546,7 +546,7 @@ bool gameEventPoll(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int } // MOVES SNAKE AUTOMATICALLY IN WHICHEVER DIRECTION IT WENT LAST -bool scrollSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]) { +bool scrollSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]) { bool playerAlive = true; switch ((*gameParameters)[SnakeDirection]) { @@ -574,7 +574,7 @@ bool scrollSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int ( } // REDRAW THE SNAKE BASED ON CURRENT VALUES -void updateSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]) { +void updateSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]) { int x; for (x = (*gameParameters)[NPCCount]; x < (*gameParameters)[NPCCount] + (*gameParameters)[SnakeLength]; x++) { @@ -591,7 +591,7 @@ void updateSnake(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int ( } // DRAW NPCs BASED ON ON CURRENT VALUES -void loadNPCs(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[8]) { +void loadNPCs(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*gameParameters)[9]) { int x, startNPCs = 0; for (x = startNPCs; x < (*gameParameters)[NPCCount]; x++) { @@ -604,7 +604,7 @@ void loadNPCs(SDL_Surface* screen, SDL_Rect** ppTiles, int** ppSprites, int (*ga } // A HELPER FUNCTION TO RANDOMLY PLACE NPCs WITH SOME INTELLIGENCE -void randomLocation(int** ppSprites, int (*gameParameters)[8], int* location[2]) { +void randomLocation(int** ppSprites, int (*gameParameters)[9], int* location[2]) { int x, randLocation[2]; bool isAcceptable = false; @@ -662,7 +662,7 @@ void updateRect(SDL_Surface* screen, SDL_Rect** ppTiles, int position[2], const } // PARSES COMMANDLINE OPTIONS AND GENERATES APPROPRIATE RESPONSE -void configureGame(int argc, char** args, int (*gameParameters)[8]) { +void configureGame(int argc, char** args, int (*gameParameters)[9]) { int parsecount = 1; // SET DEFAULT GAME PARAMETERS @@ -674,6 +674,7 @@ void configureGame(int argc, char** args, int (*gameParameters)[8]) { (*gameParameters)[SnakeLength] = DEFAULT_SNAKELENGTH; (*gameParameters)[SnakeDirection] = -1; (*gameParameters)[SnakeScore] = 0; + (*gameParameters)[RenderSizeMultiplier] = 1; // PARSE COMMANDLINE FOR SETTINGS while (parsecount < argc) { @@ -738,6 +739,10 @@ void configureGame(int argc, char** args, int (*gameParameters)[8]) { printErrorHelp(args[0]); exit(EXIT_FAILURE); } + } else if (strcmp(args[parsecount], "-2") == 0) { + // DOUBLE RESOLUTION + (*gameParameters)[RenderSizeMultiplier] = 2; + parsecount++; } else { // FAIL IF ANYTHING ELSE printErrorHelp(args[0]); @@ -754,6 +759,7 @@ void printHelpMenu(char filename[]) { fprintf(stdout, " -b [blocks]\t\tSet the number of blocks: between [%d] and [%d] (DEFAULT: [%d])\n", MIN_NPCCOUNT - 1, MAX_NPCCOUNT - 1, DEFAULT_NPCCOUNT - 1); fprintf(stdout, " -l [length]\t\tSet the snake's starting length: between [%d] and [%d] (DEFAULT: [%d])\n", MIN_SNAKELENGTH - 1, MAX_SNAKELENGTH - 1, DEFAULT_SNAKELENGTH - 1); fprintf(stdout, " -s [speed]\t\tSet the snake's starting speed: between [%d] and [%d] (DEFAULT: [%d])\n", MIN_SNAKESPEED, MAX_SNAKESPEED, DEFAULT_SNAKESPEED); + fprintf(stdout, " -2\t\t\tDouble the size the game renders at\n"); fprintf(stdout, " -h\t\t\tDisplay help information\n"); }