segment finsihed, snake and main started
This commit is contained in:
parent
c479b42b33
commit
2229fcd888
6 changed files with 118 additions and 0 deletions
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef MAIN_H
|
||||||
|
#define MAIN_H
|
||||||
|
|
||||||
|
void die(char *, ...);
|
||||||
|
void free_s(void *);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef SEGMENT_H
|
||||||
|
#define SEGMENT_H
|
||||||
|
|
||||||
|
typedef struct segment_T {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int prev_x;
|
||||||
|
int prev_y;
|
||||||
|
} Segment;
|
||||||
|
|
||||||
|
Segment *new_segment(int, int);
|
||||||
|
void delete_segment(Segment *);
|
||||||
|
|
||||||
|
void segment_move(Segment *, int, int);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef SNAKE_H
|
||||||
|
#define SNAKE_H
|
||||||
|
|
||||||
|
enum dirn {
|
||||||
|
UP = 0,
|
||||||
|
DOWN,
|
||||||
|
RIGHT,
|
||||||
|
LEFT
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct snake_T {
|
||||||
|
Segments **n;
|
||||||
|
size_t len;
|
||||||
|
int head_dirn;
|
||||||
|
} Snake;
|
||||||
|
|
||||||
|
Snake *new_snake(size_t, int, int, int);
|
||||||
|
void *delete_snake(Snake *);
|
||||||
|
|
||||||
|
void snake_forward(Snake *, int);
|
||||||
|
int snake_eat(Snake *);
|
||||||
|
|
||||||
|
#endif
|
18
src/main.c
18
src/main.c
|
@ -1,4 +1,22 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "include/main.h"
|
#include "include/main.h"
|
||||||
|
|
||||||
|
void die(char *fmt, ...) {
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
|
||||||
|
fprintf(stderr, "fatal: ");
|
||||||
|
vfprintf(stderr, fmt, args);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
|
||||||
|
va_end(args)
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void free_s(void *p) {
|
||||||
|
free(p);
|
||||||
|
p = NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "include/main.h"
|
||||||
|
#include "include/segment.h"
|
||||||
|
|
||||||
|
Segment *new_segment(int x, int y) {
|
||||||
|
Segment c;
|
||||||
|
c = (Segment *)malloc(sizeof(Segment));
|
||||||
|
if (!c)
|
||||||
|
die("segment.c: new_segment(): 'c' is null pointer");
|
||||||
|
|
||||||
|
c->x = x;
|
||||||
|
c->y = y;
|
||||||
|
c->prev_x = EOF;
|
||||||
|
c->prev_y = EOF;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
void delete_segment(Segment *c) {
|
||||||
|
free_s(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void segment_move(Segment *c, int x, int y) {
|
||||||
|
if (!c)
|
||||||
|
die("segment.c: segment_move(): 'c' is null pointer");
|
||||||
|
|
||||||
|
c->prev_x = c->x;
|
||||||
|
c->x = x;
|
||||||
|
c->prev_y = c->y;
|
||||||
|
c->y = y;
|
||||||
|
}
|
23
src/snake.c
23
src/snake.c
|
@ -0,0 +1,23 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "include/main.h"
|
||||||
|
#include "include/segment.h"
|
||||||
|
#include "include/snake.h"
|
||||||
|
|
||||||
|
Snake *new_snake(size_t len, int head_dirn, int x, int y) {
|
||||||
|
Snake *s;
|
||||||
|
s = (Snake *)malloc(sizeof(Snake));
|
||||||
|
if (!s)
|
||||||
|
die("snake.c: new_snake(): 's' is null pointer");
|
||||||
|
|
||||||
|
s->n = (Segment **)malloc(sizeof(Segment *) * len);
|
||||||
|
if (!s->n)
|
||||||
|
die("snake.c: new_snake(): 's->n' is null pointer");
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
s->*n[i] = new_segment(x, y--);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void *delete_snake(Snake *);
|
||||||
|
|
||||||
|
void snake_forward(Snake *, int);
|
||||||
|
int snake_eat(Snake *);
|
Loading…
Reference in a new issue