Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h> //_kbhit(), _getch()
- #include <stdlib.h> //system()
- #include <time.h>
- #include <windows.h> //Sleep()
- const int width = 20, height = 20;
- int x, y, foodX, foodY, score;
- int gameOver;
- int tailX[100], tailY[100];
- int nTail;
- enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; //0,1,2,3,4
- enum eDirection dir;
- void Setup() {
- gameOver = 0; //if 1 , exit
- dir = STOP;
- //finding center point
- x = width / 2;
- y = height / 2;
- foodX = rand() % width;
- foodY = rand() % height;
- score = 0;
- }
- void Draw() {
- system("cls"); // Clear screen
- for (int i = 0; i < width + 2; i++)
- printf("#"); // Top wall
- printf("\n");
- for (int i = 0; i < height; i++) {
- for (int j = 0; j < width; j++) {
- if (j == 0)
- printf("#"); // Left wall
- if (i == y && j == x)
- printf("O"); // Snake head
- else if (i == foodY && j == foodX)
- printf("F"); // Food
- else {
- int print = 0;
- for (int k = 0; k < nTail; k++) {
- if (tailX[k] == j && tailY[k] == i) {
- printf("o"); // Snake tail
- print = 1;
- }
- }
- if (!print)
- printf(" "); // Empty space
- }
- if (j == width - 1)
- printf("#"); // Right wall
- }
- printf("\n");
- }
- for (int i = 0; i < width + 2; i++)
- printf("#"); // Bottom wall
- printf("\n");
- printf("Score: %d\n", score);
- }
- 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':
- gameOver = 1;
- break;
- }
- }
- }
- 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;
- }
- // Check for collision with walls
- if (x >= width) x = 0; else if (x < 0) x = width - 1;
- if (y >= height) y = 0; else if (y < 0) y = height - 1;
- // Check for collision with tail
- for (int i = 0; i < nTail; i++) {
- if (tailX[i] == x && tailY[i] == y)
- gameOver = 1;
- }
- // Check if snake eats food
- if (x == foodX && y == foodY) {
- score += 10;
- foodX = rand() % width;
- foodY = rand() % height;
- nTail++;
- }
- }
- int main() {
- Setup();
- while (!gameOver) {
- Draw();
- Input();
- Logic();
- Sleep(100); // Slow down the game loop
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement