From 8ad2e994e7ebba5f275b8d258da2fb4f2572f3eb Mon Sep 17 00:00:00 2001 From: Noah Swerhun Date: Fri, 17 Sep 2021 22:35:02 -0500 Subject: [PATCH] movement completed --- Makefile | 4 ++-- config.h | 20 ++++++++++++++++ nsnake | Bin 0 -> 17584 bytes obj/apple.o | Bin 0 -> 1848 bytes obj/main.o | Bin 0 -> 4368 bytes obj/segment.o | Bin 0 -> 2168 bytes obj/snake.o | Bin 0 -> 3616 bytes src/apple.c | 20 ++++++++++++++++ src/include/apple.h | 12 ++++++++++ src/include/snake.h | 10 ++++---- src/main.c | 41 ++++++++++++++++++++++++++++++++- src/segment.c | 3 ++- src/snake.c | 55 ++++++++++++++++++++++++++++++++++++-------- 13 files changed, 147 insertions(+), 18 deletions(-) create mode 100644 config.h create mode 100755 nsnake create mode 100644 obj/apple.o create mode 100644 obj/main.o create mode 100644 obj/segment.o create mode 100644 obj/snake.o diff --git a/Makefile b/Makefile index 34d9f88..4df41cb 100644 --- a/Makefile +++ b/Makefile @@ -11,10 +11,10 @@ INC = $(wildcard $(INCDIR)/*.h) _OBJ = $(SRC:.c=.o) OBJ = $(subst $(SRCDIR),$(OBJDIR),$(_OBJ)) -$(OUTFILE): $(OBJ) +$(OUTFILE): $(OBJ) config.h $(CC) $(CFLAGS) -o $(OUTFILE) $(OBJ) -$(OBJDIR)/%.o: $(SRCDIR)/%.c $(INCDIR)/%.h +$(OBJDIR)/%.o: $(SRCDIR)/%.c $(INCDIR)/%.h config.h @mkdir -p $(@D) $(CC) $(CFLAGS) -o $@ -c $< diff --git a/config.h b/config.h new file mode 100644 index 0000000..6b50bd0 --- /dev/null +++ b/config.h @@ -0,0 +1,20 @@ +#ifndef CONFIG_H +#define CONFIG_H + +// Keybinds +#define up_key 'k' +#define down_key 'j' +#define right_key 'l' +#define left_key 'h' +#define quit_key 'q' + +// The starting legnth of the snake +static const size_t starting_len = 15; + +// Speed of snake (milliseconds between moves) +static const int screen_speed = 150; + +// Character for each snake segment +static const char snake_ch = '#'; + +#endif diff --git a/nsnake b/nsnake new file mode 100755 index 0000000000000000000000000000000000000000..a7ff1bf2687ec2b7c2466ce77d4be3bbeed15ac3 GIT binary patch literal 17584 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 literal 0 HcmV?d00001 diff --git a/obj/main.o b/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..d9c7a06f3e53fd641b076e359cbde4dc962e560d GIT binary patch literal 4368 zcmbuCUuYaf9LHyqv`Mw?rM1z6)TC)dm`1wEQcX}oj;vWKM_4gJ0%R@e*WI7>*KW@N(%mmQ z7Z(?G_w(b-O}xllB@Hg-mh#M1ir`+aI>A6FdO8q#W;_t;KN|==|5+eJtAS8P%@j_%=W@r9DvEjloK^U3W`+p{iF(N6@*Y2)gnL2*a4B zFSdfegmcm>oXy;1F)pc0U|zjk@kalR?kcLKQFAZPuegXU z#LPk5u_Ru}#M9HawrbaI)aF;5N9lzC{J2+j_gk+UH(HyCE@0%=hwxL5-Wj`@9;>Y? zMBS=h*-*j=U&L}tlRl|eHZr8mF3$0W^BqvYMVem+g(fVtL7^E6W)#_OxRD%rrj_VRN? zE4FK!SGTr}gLo70Ej)G?{eiXZZ#4C+S;_fc9@{3zUVz3>55jdEIoNyHv1r>osd)+( zYWRcl7V`UIqhND=7R#f}Y_`i8jzg0;*3t06K`!dJHfWE)g?u%uVcD~t;MUh`gs`;$ z_BdSao@CkY6AB(v@ID1Uq2L1wJ_sDgDaOa{3ouimx4C``pD4Rez={g}X$5~%!QWEw z2?c*w!9P&&j}`o!f`6spUn}@`3jULV|Dxc(DfpiXPO?VE3@3=~7?zVU2jj!kBzD50 z)QsDCN|VGkjUgIOq)9SEL6)SJMdH1&!v_z<;)f3%>WdzYA3bm|7LAis!OA$4yp+mY z8PiFTRDQ%s5L(PQBn1iMHgl{;k})$5bb|@e4bjoOktAl0Cek^Q7_g`@1hpg`HbzNe z#IoZyb%;p|aW))2s8r4>7*>)L62sK6NWr4ekDcaGHVR@I`K(O}gVez(&|&JpKyXTg zn#n>2pI5YZJO}$1Vejf+u&bhdDskN0#Xg4j9Sz@SJT-;>5<)P4o*z8S^!Gwp=zrwg zub-FnxJL;69}>q;6~Wi=_X@{@d%fU0B)(4KyEw;w*Gqh#q`yz%-4e$=T;%VOIPP_V zKds1rOw!*k=?#fLAn~*!kE7rd3jV%=U*jCt4bLDk{yUN$@4Gm+*o}ocuA9vFAppZX z55gt#L^$`avo7g7B>iE9{+OiSEa?*x$MaM4ds30dlJs((S0w(Bl&7S~Q<3x!OZtx_ zzE$F%NIWQUTyr!GEk;&-{s>G&iQ9eJ3GUAvQ&)s z|N0;#z*h{v?_`Vc$_2h&BF0}wQ6>27;=2~96R!~DA6i9xIl*x6#J1x5OFVCna?WK? z^X#s#U%~zTdQ9{`hS!+Kc&j z1H=Bs^A1I35#B%U{j!Pq3*QStQI>Um{srMdzxEjLR=E80KhE3x$0f!u`pQ88bNbt# z;q8k;$i2V)N#Kpv?+h*&nC>~Yet5o%_G0}S_05`KQm{>Y9C$|KJpJwQJEGB2Z9*|v YlW)O%Rf1=EqxQ3W{G%+((vQFW-w3$i=Kufz literal 0 HcmV?d00001 diff --git a/obj/segment.o b/obj/segment.o new file mode 100644 index 0000000000000000000000000000000000000000..c3f0a83a1f4b94a5f4f352bb961492b3a71f3661 GIT binary patch literal 2168 zcmbtU%}Z2K6hAYXPBh9?LV-bVl?wT2sD(+ysEqR#gNivp6uq9~^`quP-n=Ol#6k!j z5=g5y?W4b-T|o=$uV@vxaADwL7J;4LefR3~@g%4p+;`6TosWCxo^xj-UmQ;+5~Pu! zyL4=6mZ;T!tmmYfqi*V=lI8!jHunsFea~<1e$KFK7jDbXx2()edbZmpWtwYFew`zp7m_mcQPD)ADy@neCG* z1zR7eGXw|lr_uqv&nM#Q)DR0*QS;35uu&5)Y-RQj3>$srK4Yn2)S8uwv0PuOdBWvi z7m8P^U9CSCrzRA}#)ggl!bEAn$Y#x~c>`C(z;zqEaCPjZBqhFtTEIODY~8CKjsp^F z)09}rBzn`Gscm*%VGawJ$7iHF^Ex@!)sb{KBJkY-&*;TR`|nG)%zXr&@faWNPd*3& zz{LRPYNua^F)nJ0oiJiv4$6s?b8KA*#mnEo+$CNZwkQUfh~saa!VfWz`ns;X1Lg{+ z#80UBS1bW}Cs2+WPoX&>yHK1Q9VyzAbeXPV#@k;B?G5dJ#rW z89%}#>xc~lbA~(3g-O;wpoxs_KoI61x%^ZmE-Q(?gID2-CAu2jNO__(`iq+XnxExd z)C~8YO)}I*HjEJT`89Q$6@=>lJI!yX{EM1UQqeL8)F>~_sSqjN#*s0x)6C&rM9=?D zKtk2P%@g2 gn$g}fMV2BT!U#c?J7UhW7MK50o!>i(43ud89}0sRmjD0& literal 0 HcmV?d00001 diff --git a/obj/snake.o b/obj/snake.o new file mode 100644 index 0000000000000000000000000000000000000000..0cb51d435a01356ed6328a081c07ca4064e70540 GIT binary patch literal 3616 zcmbtWO=w(I6uxgJHnGiLYY}U^cvxvuG()nHHb|HxzT_=}jZFu;XnCE^y!_bt z3Zde};A05MLc3Gq!lgUGBBG6gi7rYgMFVaIsW2sib~g(lo^$WHGdH*MMDW0U_nhzi z-gAFuZdsG#5yN1T3^vS~l0+F>KiK5soQ<Wu3 zrd7qTy8{(#du3`5s(`={{2)wKd*ipLy>jAkCGjBmA^3%2NA0pzH5z%(SyfM@t6Zu7 z_&u%*mSw`SYWAj8=h0sf)>uxR7ivHnSS6KPw(4rUx(8ZVA*t8)2MtOO|D`qM#fQ09{mJ>s1PPriMK%~6q$OAy5OFy>d{9}I?*C{ zkd{unDJASwno88S~7Pn+{aGgr!F%tC%X z=er&{0fpK359eCCH0(L!%;dd=q?ZoOF)=naWcE$Go;YI;4#oy!10pM9ZNQi?unnMQ z5oX*)Op-yed~1%9!g%KbGj8-6$2;3Q)<9_jeu8v6IFEGqE=R_?4p`-A8Azp{Q~U65c^Nb{(b})AijSve-5M7y1od(zY4+S1!6@% z>G|`yStsM>STW_fZq6wdTsJK&oYWj^TuJ6kOr9SdnRL#Nk55|{or@!*la|A>$xJ4n zV(EETn7XrBH|Mjon{j6${C9 z8j2!1Ml+rtJZpdN33`ceY+n?HJWpo{M|=F~m-d$wT#ZvAT*i5oWc;~8(&OMhAR> zhK%1%`;K^*f}c|GZUrAFT;|Py4ryAkSL^>;!SQ^^ypKchlNcBX>rw3!A^4Xe`19CY zAXFcLA@jaSIL3cQ!Ow=+k1F=~X397w@JJY+O5pNq{M*Fk{Y-1Pyl+byF7FkK6>nz! z83n7)y@?##$<$X5>zXknpl~UK4kY{tH zSi#E|T+hD=J{ZZJb7s6`)}>1R-(-S2ZtVdrOq}E^)K96VV<1I#95~#YcmokktzFDj za=^n&yVjp#?;OKtN$S7SI-2dTBm@YprDYfUqa`A!I}mn zK=Uv*1qjcqO0s@AkAhP2s@)spuVTpSwif`yR_pa&B7eOuz5cf-rtbd%`LBasCEXuS zA)3ZjBjC62@dLWbzv2x;NczkD$MxvB(WQ_7KV*#m#RVDPU0kQ`k1_SV2Z)(;{x(oh WNblca(6#dK!$%Rw7gOV_`~L%|I<8~@ literal 0 HcmV?d00001 diff --git a/src/apple.c b/src/apple.c index e69de29..ae5951e 100644 --- a/src/apple.c +++ b/src/apple.c @@ -0,0 +1,20 @@ +#include + +#include "include/main.h" +#include "include/apple.h" + +Apple *new_apple(int x, int y) { + Apple *a; + a = (Apple *)malloc(sizeof(Apple)); + if (!a) + die("apple.c: new_apple(): 'a' is null pointer"); + + a->x = x; + a->y = y; + + return a; +} + +void delete_apple(Apple *a) { + free_s(a); +} diff --git a/src/include/apple.h b/src/include/apple.h index e69de29..d1333a5 100644 --- a/src/include/apple.h +++ b/src/include/apple.h @@ -0,0 +1,12 @@ +#ifndef APPLE_H +#define APPLE_H + +typedef struct apple_T { + int x; + int y; +} Apple; + +Apple *new_apple(int, int); +void delete_apple(Apple *); + +#endif diff --git a/src/include/snake.h b/src/include/snake.h index 85100a6..0fee9d6 100644 --- a/src/include/snake.h +++ b/src/include/snake.h @@ -1,6 +1,8 @@ #ifndef SNAKE_H #define SNAKE_H +#include "segment.h" + enum dirn { UP = 0, DOWN, @@ -9,15 +11,15 @@ enum dirn { }; typedef struct snake_T { - Segments **n; + Segment **n; size_t len; - int head_dirn; } Snake; -Snake *new_snake(size_t, int, int, int); -void *delete_snake(Snake *); +Snake *new_snake(size_t, int, int); +void delete_snake(Snake *); void snake_forward(Snake *, int); +void snake_print(Snake *); int snake_eat(Snake *); #endif diff --git a/src/main.c b/src/main.c index 0fb6ee0..4473b48 100644 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,11 @@ #include #include #include +#include #include "include/main.h" +#include "include/snake.h" +#include "../config.h" void die(char *fmt, ...) { va_list args; @@ -12,7 +15,7 @@ void die(char *fmt, ...) { vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - va_end(args) + va_end(args); exit(1); } @@ -20,3 +23,39 @@ void free_s(void *p) { free(p); p = NULL; } + +int main(void) { + int c, dirn; + Snake *s; + + // init ncurses + initscr(); + keypad(stdscr, true); + noecho(); + cbreak(); + nodelay(stdscr, true); + curs_set(0); + + s = new_snake(starting_len, getmaxx(stdscr) / 2, getmaxy(stdscr) / 2); + dirn = UP; + + while ((c = getch())) { + switch (c) { + case up_key: dirn = UP; break; + case down_key: dirn = DOWN; break; + case right_key: dirn = RIGHT; break; + case left_key: dirn = LEFT; break; + case quit_key: goto quit; + } + snake_forward(s, dirn); + clear(); + refresh(); + snake_print(s); + refresh(); + napms(screen_speed); + } + +quit: + delete_snake(s); + endwin(); +} diff --git a/src/segment.c b/src/segment.c index 366bcc0..2b6b857 100644 --- a/src/segment.c +++ b/src/segment.c @@ -1,10 +1,11 @@ #include +#include #include "include/main.h" #include "include/segment.h" Segment *new_segment(int x, int y) { - Segment c; + Segment *c; c = (Segment *)malloc(sizeof(Segment)); if (!c) die("segment.c: new_segment(): 'c' is null pointer"); diff --git a/src/snake.c b/src/snake.c index 8084b61..ad7c5f5 100644 --- a/src/snake.c +++ b/src/snake.c @@ -1,23 +1,58 @@ #include +#include #include "include/main.h" #include "include/segment.h" #include "include/snake.h" +#include "../config.h" -Snake *new_snake(size_t len, int head_dirn, int x, int y) { +Snake *new_snake(size_t len, int x, int y) { Snake *s; - s = (Snake *)malloc(sizeof(Snake)); - if (!s) + s = (Snake *)malloc(sizeof(Snake)); if (!s) die("snake.c: new_snake(): 's' is null pointer"); - s->n = (Segment **)malloc(sizeof(Segment *) * len); + s->len = len; + s->n = (Segment **)malloc(sizeof(Segment *) * s->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 *); + for (size_t i = 0; i < s->len; i++) + s->n[i] = new_segment(x, y--); + + return s; +} + +void delete_snake(Snake *s) { + for (size_t i = 0; i < s->len; i++) + delete_segment(s->n[i]); + free_s(s); +} + +void snake_forward(Snake *s , int dirn) { + if (!s) + die("snake.c: snake_forward(): 's' is null pointer"); + switch (dirn) { + case UP: + segment_move(s->n[0], s->n[0]->x, s->n[0]->y - 1); + break; + case DOWN: + segment_move(s->n[0], s->n[0]->x, s->n[0]->y + 1); + break; + case RIGHT: + segment_move(s->n[0], s->n[0]->x + 1, s->n[0]->y); + break; + case LEFT: + segment_move(s->n[0], s->n[0]->x - 1, s->n[0]->y); + break; + } + for (size_t i = 1; i < s->len; i++) + segment_move(s->n[i], s->n[i - 1]->prev_x, + s->n[i - 1]->prev_y); + +} + +void snake_print(Snake *s) { + for (size_t i = 0; i < s->len; i++) + mvaddch(s->n[i]->y, s->n[i]->x, snake_ch); +} -void snake_forward(Snake *, int); int snake_eat(Snake *);