collision added, game over message
This commit is contained in:
parent
2805dff95f
commit
bfd45695f3
7 changed files with 42 additions and 6 deletions
BIN
nsnake
BIN
nsnake
Binary file not shown.
BIN
obj/main.o
BIN
obj/main.o
Binary file not shown.
BIN
obj/snake.o
BIN
obj/snake.o
Binary file not shown.
|
@ -1,8 +1,12 @@
|
||||||
#ifndef MAIN_H
|
#ifndef MAIN_H
|
||||||
#define MAIN_H
|
#define MAIN_H
|
||||||
|
|
||||||
|
#include "snake.h"
|
||||||
|
#include "field.h"
|
||||||
|
|
||||||
void die(char *, ...);
|
void die(char *, ...);
|
||||||
void free_s(void *);
|
void free_s(void *);
|
||||||
int irandom(int, int);
|
int irandom(int, int);
|
||||||
|
void game_over(Snake *, Field *, char *, ...);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -22,5 +22,6 @@ void delete_snake(Snake *);
|
||||||
void snake_forward(Snake *, int);
|
void snake_forward(Snake *, int);
|
||||||
void snake_print(Snake *);
|
void snake_print(Snake *);
|
||||||
int snake_eat(Snake *, Field *);
|
int snake_eat(Snake *, Field *);
|
||||||
|
int snake_collide(Snake *, int, int);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
24
src/main.c
24
src/main.c
|
@ -32,6 +32,21 @@ int irandom(int lower, int upper) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void game_over(Snake *s, Field *f, char *fmt, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
|
||||||
|
delete_snake(s);
|
||||||
|
delete_field(f);
|
||||||
|
endwin();
|
||||||
|
|
||||||
|
vprintf(fmt, args);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
va_end(args);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
int c, dirn, score;
|
int c, dirn, score;
|
||||||
Snake *s;
|
Snake *s;
|
||||||
|
@ -74,11 +89,13 @@ int main(void) {
|
||||||
dirn = LEFT;
|
dirn = LEFT;
|
||||||
break;
|
break;
|
||||||
case quit_key:
|
case quit_key:
|
||||||
goto quit;
|
game_over(s, f, "SEE YOU LATER! SCORE: %d", score);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
snake_forward(s, dirn);
|
snake_forward(s, dirn);
|
||||||
|
if (snake_collide(s, getmaxx(stdscr), getmaxy(stdscr) - 1))
|
||||||
|
game_over(s, f, "!! GAME OVER !! COLLISION !! SCORE: %d", score);
|
||||||
score += snake_eat(s, f);
|
score += snake_eat(s, f);
|
||||||
|
|
||||||
box(stdscr, 0, 0);
|
box(stdscr, 0, 0);
|
||||||
|
@ -89,9 +106,4 @@ int main(void) {
|
||||||
refresh();
|
refresh();
|
||||||
napms(screen_speed);
|
napms(screen_speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
quit:
|
|
||||||
delete_snake(s);
|
|
||||||
delete_field(f);
|
|
||||||
endwin();
|
|
||||||
}
|
}
|
||||||
|
|
19
src/snake.c
19
src/snake.c
|
@ -83,3 +83,22 @@ int snake_eat(Snake *s, Field *f) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int snake_collide(Snake *s, int x_max, int y_max) {
|
||||||
|
if (s->n[0]->x == x_max)
|
||||||
|
return 1;
|
||||||
|
if (s->n[0]->y == y_max)
|
||||||
|
return 1;
|
||||||
|
if (s->n[0]->x == 0)
|
||||||
|
return 1;
|
||||||
|
if (s->n[0]->y == 0)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
for (size_t i = 1; i < s->len; i++) {
|
||||||
|
if (s->n[0]->x == s->n[i]->x)
|
||||||
|
if (s->n[0]->y == s->n[i]->y)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue