Advertisement
DrAungWinHtut

snake.c

Oct 23rd, 2024
107
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.42 KB | None | 1 0
  1. #include <stdio.h>
  2. #include <conio.h> //_kbhit(), _getch()
  3. #include <stdlib.h> //system()
  4. #include <time.h>
  5. #include <windows.h> //Sleep()
  6.  
  7. const int width = 20, height = 20;
  8. int x, y, foodX, foodY, score;
  9. int gameOver;
  10. int tailX[100], tailY[100];
  11. int nTail;
  12.  
  13. enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; //0,1,2,3,4
  14. enum eDirection dir;
  15.  
  16. void Setup() {
  17.     gameOver = 0; //if 1 , exit
  18.     dir = STOP;
  19.     //finding center point
  20.     x = width / 2;
  21.     y = height / 2;
  22.  
  23.     foodX = rand() % width;
  24.     foodY = rand() % height;
  25.     score = 0;
  26. }
  27.  
  28. void Draw() {
  29.     system("cls"); // Clear screen
  30.    
  31.     for (int i = 0; i < width + 2; i++)
  32.         printf("#"); // Top wall
  33.     printf("\n");
  34.  
  35.     for (int i = 0; i < height; i++) {
  36.         for (int j = 0; j < width; j++) {
  37.             if (j == 0)
  38.                 printf("#"); // Left wall
  39.             if (i == y && j == x)
  40.                 printf("O"); // Snake head
  41.             else if (i == foodY && j == foodX)
  42.                 printf("F"); // Food
  43.             else {
  44.                 int print = 0;
  45.                 for (int k = 0; k < nTail; k++) {
  46.                     if (tailX[k] == j && tailY[k] == i) {
  47.                         printf("o"); // Snake tail
  48.                         print = 1;
  49.                     }
  50.                 }
  51.                 if (!print)
  52.                     printf(" "); // Empty space
  53.             }
  54.  
  55.             if (j == width - 1)
  56.                 printf("#"); // Right wall
  57.         }
  58.         printf("\n");
  59.     }
  60.  
  61.     for (int i = 0; i < width + 2; i++)
  62.         printf("#"); // Bottom wall
  63.     printf("\n");
  64.    
  65.     printf("Score: %d\n", score);
  66. }
  67.  
  68. void Input() {
  69.     if (_kbhit()) {
  70.         switch (_getch()) {
  71.             case 'a':
  72.                 dir = LEFT;
  73.                 break;
  74.             case 'd':
  75.                 dir = RIGHT;
  76.                 break;
  77.             case 'w':
  78.                 dir = UP;
  79.                 break;
  80.             case 's':
  81.                 dir = DOWN;
  82.                 break;
  83.             case 'x':
  84.                 gameOver = 1;
  85.                 break;
  86.         }
  87.     }
  88. }
  89.  
  90. void Logic() {
  91.     int prevX = tailX[0];
  92.     int prevY = tailY[0];
  93.     int prev2X, prev2Y;
  94.     tailX[0] = x;
  95.     tailY[0] = y;
  96.  
  97.     for (int i = 1; i < nTail; i++) {
  98.         prev2X = tailX[i];
  99.         prev2Y = tailY[i];
  100.         tailX[i] = prevX;
  101.         tailY[i] = prevY;
  102.         prevX = prev2X;
  103.         prevY = prev2Y;
  104.     }
  105.  
  106.     switch (dir) {
  107.         case LEFT:
  108.             x--;
  109.             break;
  110.         case RIGHT:
  111.             x++;
  112.             break;
  113.         case UP:
  114.             y--;
  115.             break;
  116.         case DOWN:
  117.             y++;
  118.             break;
  119.         default:
  120.             break;
  121.     }
  122.  
  123.     // Check for collision with walls
  124.     if (x >= width) x = 0; else if (x < 0) x = width - 1;
  125.     if (y >= height) y = 0; else if (y < 0) y = height - 1;
  126.  
  127.     // Check for collision with tail
  128.     for (int i = 0; i < nTail; i++) {
  129.         if (tailX[i] == x && tailY[i] == y)
  130.             gameOver = 1;
  131.     }
  132.  
  133.     // Check if snake eats food
  134.     if (x == foodX && y == foodY) {
  135.         score += 10;
  136.         foodX = rand() % width;
  137.         foodY = rand() % height;
  138.         nTail++;
  139.     }
  140. }
  141.  
  142. int main() {
  143.     Setup();
  144.     while (!gameOver) {
  145.         Draw();
  146.         Input();
  147.         Logic();
  148.         Sleep(100); // Slow down the game loop
  149.     }
  150.     return 0;
  151. }
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement