Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <conio.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define WIDTH 100
- #define HEIGHT 50
- #define SIZE WIDTH*HEIGHT
- #define INIT_SIZE 3
- typedef struct bo {
- int pos;
- struct bo *next;
- } body;
- typedef enum d{up = -50, down = +50, left = -1, right = +1} direction;
- typedef enum b{false = 0, true = 1} bool;
- void init_map();
- void print_map();
- void update_map();
- void init_snake();
- void generate_food();
- void move();
- int map[SIZE];
- body *snake;
- int snake_size;
- direction dir;
- bool status;
- int main(void) {
- dir = right;
- status = true;
- init_map();
- init_snake();
- while(status) {
- print_map();
- printf("%d", status);
- update_map();
- _sleep(1);
- }
- return 0;
- }
- void init_map() {
- // places top and bottom walls
- for(int i = 0; i < WIDTH; i++) {
- map[i] = -1;
- map[i + (SIZE - WIDTH)] = -1;
- }
- // places open space
- for(int i = WIDTH; i < SIZE - WIDTH; i++) {
- map[i] = 0;
- }
- // places left and right walls
- for(int i = 0; i < HEIGHT; i++) {
- map[i * WIDTH] = -1;
- map[(i + 1) * WIDTH - 1] = -1;
- }
- }
- void print_map() {
- system("cls");
- for(int i = 0; i < SIZE; i++) {
- if(i % WIDTH == 0 && i != 0) {
- printf("\n");
- }
- switch(map[i]) {
- case -2:
- printf("%c", 0245);
- break;
- case -1:
- printf("%c", 987);
- break;
- case 0:
- printf(" ");
- break;
- default:
- printf("O");
- break;
- }
- }
- }
- void update_map() {
- body *p;
- move();
- int new_pos = snake->pos + dir;
- if(map[new_pos] == -2) { // snek ate food
- snake_size++;
- p = (body *) malloc(sizeof(body));
- p->pos = new_pos;
- p->next = snake;
- map[p->pos] = snake_size;
- snake = p;
- generate_food();
- } else if(map[new_pos] == -1 || map[new_pos] > 0) { // snek is kill
- status = false;
- } else { // snek is moving
- p = snake;
- for(int i = 0; i < snake_size; i++) {
- printf("%d: %d", p->pos, map[p->pos]);
- map[p->pos]--;
- p->next;
- }
- }
- }
- void init_snake() {
- int aux = snake_size = INIT_SIZE;
- body *p;
- int pos = (HEIGHT / 2) * WIDTH + WIDTH / 2; // snek's head is at the central position
- for(int i = snake_size; i > 0; i--) {
- p = (body *) malloc(sizeof(body));
- p->pos = pos;
- pos--;
- snake = p;
- map[p->pos] = aux;
- aux--;
- p = p->next;
- }
- }
- void generate_food() {
- }
- void move() {
- if(kbhit()) {
- char c = getch();
- switch(c) {
- case 119:
- if(dir != down)
- dir = up;
- break;
- case 115:
- if(dir != up)
- dir = down;
- break;
- case 97:
- if(dir != right)
- dir = left;
- break;
- case 100:
- if(dir != left)
- dir = right;
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement