![]() |
|
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. 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 |