Sinisterly
Snake Game in C++ - Printable Version

+- Sinisterly (https://sinister.ly)
+-- Forum: Coding (https://sinister.ly/Forum-Coding)
+--- Forum: C, C++, & Obj-C (https://sinister.ly/Forum-C-C-Obj-C)
+--- Thread: Snake Game in C++ (/Thread-Snake-Game-in-C)



Snake Game in C++ - Oqulous - 02-11-2016

#include <iostream>
#include <conio.h>

void run();
void printMap();
void initMap();
void move(int dx, int dy);
void update();
void changeDirection(char key);
void clearScreen();
void generateFood();

char getMapValue(int value);

// Map dimensions
const int mapwidth = 20;
const int mapheight = 20;

const int size = mapwidth * mapheight;

// The tile values for the map
int map;

// Snake head details
int headxpos;
int headypos;
int direction;

// Amount of food the snake has (How long the body is)
int food = 3;

// Determine if game is running
bool running;

int main()
{
   run();
   return 0;
}

// Main game function
void run()
{
   // Initialize the map
   initMap();
   running = true;
   while (running) {
       // If a key is pressed
       if (kbhit()) {
           // Change to direction determined by key pressed
           changeDirection(getch());
       }
       // Upate the map
       update();

       // Clear the screen
       clearScreen();

       // Print the map
       printMap();

       // wait 0.5 seconds
       _sleep(500);
   }

   // Print out game over text
   std::cout << "\t\t!!!Game over!" << std::endl << "\t\tYour score is: " << food;

   // Stop console from closing instantly
   std::cin.ignore();
}

// Changes snake direction from input
void changeDirection(char key) {
   /*
     W
   A + D
     S

     1
   4 + 2
     3
   */
   switch (key) {
   case 'w':
       if (direction != 2) direction = 0;
       break;
   case 'd':
       if (direction != 3) direction = 1;
       break;
   case 's':
       if (direction != 4) direction = 2;
       break;
   case 'a':
       if (direction != 5) direction = 3;
       break;
   }
}

// Moves snake head to new location
void move(int dx, int dy) {
   // determine new head position
   int newx = headxpos + dx;
   int newy = headypos + dy;

   // Check if there is food at location
   if (map[newx + newy * mapwidth] == -2) {
       // Increase food value (body length)
       food++;

       // Generate new food on map
       generateFood();
   }

   // Check location is free
   else if (map[newx + newy * mapwidth] != 0) {
       running = false;
   }

   // Move head to new location
   headxpos = newx;
   headypos = newy;
   map[headxpos + headypos * mapwidth] = food + 1;

}

// Clears screen
void clearScreen() {
   // Clear the screen
   system("cls");
}

// Generates new food on map
void generateFood() {
   int x = 0;
   int y = 0;
   do {
       // Generate random x and y values within the map
       x = rand() % (mapwidth - 2) + 1;
       y = rand() % (mapheight - 2) + 1;

       // If location is not free try again
   } while (map[x + y * mapwidth] != 0);

   // Place new food
   map[x + y * mapwidth] = -2;
}

// Updates the map
void update() {
   // Move in direction indicated
   switch (direction) {
   case 0: move(-1, 0);
       break;
   case 1: move(0, 1);
       break;
   case 2: move(1, 0);
       break;
   case 3: move(0, -1);
       break;
   }

   // Reduce snake values on map by 1
   for (int i = 0; i < size; i++) {
       if (map[i] > 0) map[i]--;
   }
}

// Initializes map
void initMap()
{
   // Places the initual head location in middle of map
   headxpos = mapwidth / 2;
   headypos = mapheight / 2;
   map[headxpos + headypos * mapwidth] = 1;

   // Places top and bottom walls 
   for (int x = 0; x < mapwidth; ++x) {
       map[x] = -1;
       map[x + (mapheight - 1) * mapwidth] = -1;
   }

   // Places left and right walls
   for (int y = 0; y < mapheight; y++) {
       map[0 + y * mapwidth] = -1;
       map[(mapwidth - 1) + y * mapwidth] = -1;
   }

   // Generates first food
   generateFood();
}

// Prints the map to console
void printMap()
{
   for (int x = 0; x < mapwidth; ++x) {
       for (int y = 0; y < mapheight; ++y) {
           // Prints the value at current x,y location
           std::cout << getMapValue(map[x + y * mapwidth]);
       }
       // Ends the line for next x value
       std::cout << std::endl;
   }
}

// Returns graphical character for display from map value
char getMapValue(int value)
{
   // Returns a part of snake body
   if (value > 0) return 'o';

   switch (value) {
       // Return wall
   case -1: return 'X';
       // Return food
   case -2: return 'O';
   }
}
[color=#aaaaaa][size=small][font=Monaco, Consolas, Courier, monospace]


RE: Snake Game in C++ - Red_SF - 02-11-2016

I would of been more impressed if you hadn't copied this.


RE: Snake Game in C++ - Oqulous - 02-11-2016

(02-11-2016, 05:00 AM)Red Wrote: I would of been more impressed if you hadn't copied this.

I'm not here to impress people.

:fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp:


RE: Snake Game in C++ - Red_SF - 02-11-2016

(02-11-2016, 05:03 AM)Oqulous Wrote: I'm not here to impress people.

:fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp: :fp:

At Least give credit to the person who made it.


RE: Snake Game in C++ - Killpot - 02-13-2016

Should format it with code tags


RE: Snake Game in C++ - Lain - 02-13-2016

I agree with @6496, if you're gonna copy/paste; give credit to the author.


RE: Snake Game in C++ - Oqulous - 03-07-2016

(02-13-2016, 08:10 AM)Senpai Wrote: I agree with @6496, if you're gonna copy/paste; give credit to the author.

Why the hell should I give credit to someone that clearly stated he didn't give a shit what people do with it. It's just code and anyone can do it, so fuck off.


RE: Snake Game in C++ - Sirius - 03-07-2016

Interesting, I may say. It'd be nice to give credits regardless.


RE: Snake Game in C++ - Red_SF - 03-08-2016

(03-07-2016, 01:37 PM)Oqulous Wrote: Why the hell should I give credit to someone that clearly stated he didn't give a shit what people do with it. It's just code and anyone can do it, so fuck off.

He never stated that infact he was asking how he could make the code better.

http://codereview.stackexchange.com/questions/66481/snake-game-in-c