diff --git a/Snake game.cpp b/Snake game.cpp new file mode 100644 index 0000000..2443649 --- /dev/null +++ b/Snake game.cpp @@ -0,0 +1,140 @@ +#include +#include // For _kbhit() and _getch() +#include // For Sleep() +using namespace std; + +const int width = 20; +const int height = 20; +int x, y, fruitX, fruitY, score; +int tailX[100], tailY[100]; // Snake's tail coordinates +int nTail; // Length of the snake's tail +enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; +eDirection dir; + +void setup() { + dir = STOP; + x = width / 2; + y = height / 2; + fruitX = rand() % width; + fruitY = rand() % height; + score = 0; + nTail = 0; +} + +void draw() { + system("cls"); // Clear the console + for (int i = 0; i < width + 2; i++) + cout << "#"; + cout << endl; + + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + if (j == 0) + cout << "#"; // Walls + if (i == y && j == x) + cout << "O"; // Snake head + else if (i == fruitY && j == fruitX) + cout << "F"; // Fruit + else { + bool print = false; + for (int k = 0; k < nTail; k++) { + if (tailX[k] == j && tailY[k] == i) { + cout << "o"; // Snake tail + print = true; + } + } + if (!print) + cout << " "; + } + if (j == width - 1) + cout << "#"; + } + cout << endl; + } + + for (int i = 0; i < width + 2; i++) + cout << "#"; + cout << endl; + cout << "Score: " << score << endl; +} + +void input() { + if (_kbhit()) { + switch (_getch()) { + case 'a': + dir = LEFT; + break; + case 'd': + dir = RIGHT; + break; + case 'w': + dir = UP; + break; + case 's': + dir = DOWN; + break; + case 'x': + exit(0); // Exit the game + } + } +} + +void logic() { + int prevX = tailX[0]; + int prevY = tailY[0]; + int prev2X, prev2Y; + tailX[0] = x; + tailY[0] = y; + + for (int i = 1; i < nTail; i++) { + prev2X = tailX[i]; + prev2Y = tailY[i]; + tailX[i] = prevX; + tailY[i] = prevY; + prevX = prev2X; + prevY = prev2Y; + } + + switch (dir) { + case LEFT: + x--; + break; + case RIGHT: + x++; + break; + case UP: + y--; + break; + case DOWN: + y++; + break; + default: + break; + } + + if (x >= width) x = 0; else if (x < 0) x = width - 1; + if (y >= height) y = 0; else if (y < 0) y = height - 1; + + for (int i = 0; i < nTail; i++) { + if (tailX[i] == x && tailY[i] == y) + exit(0); // Collision with self + } + + if (x == fruitX && y == fruitY) { + score += 10; + fruitX = rand() % width; + fruitY = rand() % height; + nTail++; + } +} + +int main() { + setup(); + while (true) { + draw(); + input(); + logic(); + Sleep(100); // Control the speed of the game + } + return 0; +}