From eb14c451e1031b95824724117b8cceba1f556d6f Mon Sep 17 00:00:00 2001 From: ov075wu Date: Thu, 1 May 2025 22:45:15 +0200 Subject: [PATCH] refresh --- Makefile | 2 +- a3/Makefile | 19 +++++++++ a3/main.c | 42 +++++++++++++++++++ a3/main.o | Bin 0 -> 1380 bytes a3/snake.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++ a3/snake.exe | Bin 0 -> 92779 bytes a3/snake.h | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++ a3/snake.o | Bin 0 -> 1763 bytes a3/world.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++ a3/world.h | 11 +++++ a3/world.o | Bin 0 -> 3021 bytes 11 files changed, 403 insertions(+), 1 deletion(-) create mode 100644 a3/Makefile create mode 100644 a3/main.c create mode 100644 a3/main.o create mode 100644 a3/snake.c create mode 100644 a3/snake.exe create mode 100644 a3/snake.h create mode 100644 a3/snake.o create mode 100644 a3/world.c create mode 100644 a3/world.h create mode 100644 a3/world.o diff --git a/Makefile b/Makefile index 8e61469..060358d 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC = gcc CFLAGS = -Wall -Wextra -std=c99 -dIRS = a1 du1 du2 du3 du4 du5 +dIRS = a1 du1 du2 du3 du4 du5 a3 all: @for %%d in ($(dIRS)) do \ $(CC) $(CFLAGS) %%d\program.c -o %%d\program.exe diff --git a/a3/Makefile b/a3/Makefile new file mode 100644 index 0000000..f15718e --- /dev/null +++ b/a3/Makefile @@ -0,0 +1,19 @@ +CC = gcc +CFLAGS = -Wall -Wextra -std=c99 + +OBJS = main.o snake.o world.o + +snake: $(OBJS) + $(CC) $(CFLAGS) -o snake $(OBJS) + +main.o: main.c snake.h world.h + $(CC) $(CFLAGS) -c main.c + +snake.o: snake.c snake.h + $(CC) $(CFLAGS) -c snake.c + +world.o: world.c world.h snake.h + $(CC) $(CFLAGS) -c world.c + +clean: + del *.o *.exe \ No newline at end of file diff --git a/a3/main.c b/a3/main.c new file mode 100644 index 0000000..7ee1a4d --- /dev/null +++ b/a3/main.c @@ -0,0 +1,42 @@ +#include +#include + +#ifdef _WIN32 +#include +#else +#include +#endif + +#include "snake.h" +#include "world.h" + +int main(void) { + struct state game_state; + + setup_world(&game_state, 20, 10); + draw_world(&game_state); + + while (1) { + char command = read_input(); + + change_direction(&game_state, command); + + int outcome = step_state(&game_state); + draw_world(&game_state); + + if (outcome != END_CONTINUE) { + break; + } + +#ifdef _WIN32 + Sleep(1000); +#else + sleep(1); +#endif + } + + free_snake(game_state.snake); + printf("\n--- KONIEC HRY ---\n"); + + return 0; +} diff --git a/a3/main.o b/a3/main.o new file mode 100644 index 0000000000000000000000000000000000000000..79356d2fbdafec2ac9928596033dab65c0e21879 GIT binary patch literal 1380 zcmZ`(&ubGw6n>lCmQbs;TD4ja3+|ykWNq;Wq6brxrHZX$i@y+=uH9*}*ly!y(@LmN zT*QVD$;E?zfftVoo>YjX_y-6*cvL7@q=!N;#rWQALN_LTFyDOdn>RD>&Ccwo)DC13 z8Q_Fqillq|sV8^ zKXBi$;d=4YXTu7BhVE9YxS?|mfob%5v4%gjI;f-dZWn${_#0Zu=qwmpMPsXw)RdwT zEhySL%`a36YyMa5!NW>vR8#z)o7E>fIOUeVVTtk8q!#VKIP8@k>`TV``qU5=q07d0 z*C%6}HV6%cXu;SFdH%Ca$aSw`9{6>{0{({b`$M_7y8{kVj_Vhy)#^uL#j%}lC3B}z zE|)uEv6y=O=8bDcLcKbEUqzSlgpowzqS`-ZJ0o}XIX9)EA3Lv~(FbEg1F9eZR0x@r z9|vhMD)n_L$}*m@irPtR3bp}kFnl2TB64MaThf;&E5j=o2K^|mgkvAv|uOu+I4~Gw7>w!y%-GbdgJS>0KzYUS|z!Hdv3CiHgb+sG1~RCYfbX++9w*BGnUN*Yy4rVAvfE0>#;(I(|ylVUX~^9>4{nBhDVul)n+ zdp&Q6d4*o^H_`I>Jm@^lrd@NEw-%`$+et03`Pye@S?=XBY+=rwv4B~wxlrdWH!Ws6 lnVbh~Ds4I`&Me#IQ=UEN0LywjgJ60ba6isj)-fM*_y?d7(^CKd literal 0 HcmV?d00001 diff --git a/a3/snake.c b/a3/snake.c new file mode 100644 index 0000000..8ab3ecb --- /dev/null +++ b/a3/snake.c @@ -0,0 +1,110 @@ +#include +#include "snake.h" +#include + +struct snake* add_snake (struct snake* snake, int x, int y) { + struct snake* head = NULL; + + head = malloc(sizeof(struct snake)); + + if (!head) { + return snake; + } + head->x = x; + head->y = y; + + head->next = NULL; + + if (snake !=NULL) { + head->next = snake; + } + return head; +} + +struct snake* remove_snake(struct snake* snake) { + if (snake == NULL) { + return NULL; + } + + if (snake->next == NULL) { + free(snake); + return NULL; + } + + struct snake* temp = snake; + while (temp->next->next != NULL) { + temp = temp->next; + } + + free(temp->next); + temp->next = NULL; + + return snake; +} + +void free_snake(struct snake* sn) { + struct snake* walker = sn; + struct snake* next_part = NULL; + while (walker !=NULL) { + next_part = walker->next; + free(walker); + walker = next_part; + } +} + +int is_snake(struct snake* snake, int x, int y) { + struct snake* current = snake; + + while (current !=NULL) { + if ((current->x==x) && (current->y==y)) { + return 1; + } + current = current->next; + } + return 0; +} + +int step_state(struct state* state) { + int x = state->snake->x + state->sx; + int y = state->snake->y + state->sy; + + if (x < 0) return END_WALL; + if (x >= state->width) return END_WALL; + if (y < 0) return END_WALL; + if (y >= state->height) return END_WALL; + + if (is_snake(state->snake, x, y)) { + return END_SNAKE; + } + + int food_found = -1; + for (int idx = 0; idx < FOOD_COUNT; idx++) { + if (state->foodx[idx] == x && state->foody[idx] == y) { + food_found = idx; + break; + } + } + + if (food_found != -1) { + state->foodx[food_found] = -1; + state->foody[food_found] = -1; + state->snake = add_snake(state->snake, x, y); + + int remaining = 0; + for (int k = 0; k < FOOD_COUNT; ++k) { + remaining += (state->foodx[k] >= 0 && state->foody[k] >= 0); + } + + if (remaining == 0) { + return END_FOOD; + } + return END_CONTINUE; + } + + state->snake = add_snake(state->snake, x, y); + state->snake = remove_snake(state->snake); + + return END_CONTINUE; +} + + diff --git a/a3/snake.exe b/a3/snake.exe new file mode 100644 index 0000000000000000000000000000000000000000..594e1702222dda9ea04ce1cad549be26b22e8c26 GIT binary patch literal 92779 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

y#)7Xir6~1Rt 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 literal 0 HcmV?d00001 diff --git a/a3/world.c b/a3/world.c new file mode 100644 index 0000000..38fe0d8 --- /dev/null +++ b/a3/world.c @@ -0,0 +1,109 @@ +#include +#include +#include + +#include "world.h" +#include "snake.h" + +static void place_food(struct state* s) { + int placed = 0; + + while (placed < FOOD_COUNT) { + int fx = rand() % s->width; + int fy = rand() % s->height; + + if (!is_snake(s->snake, fx, fy)) { + s->foodx[placed] = fx; + s->foody[placed] = fy; + placed++; + } + } +} + +void setup_world(struct state* s, int w, int h) { + if (!s) return; + + srand((unsigned int)time(NULL)); + s->width = w; + s->height = h; + + s->sx = 1; + s->sy = 0; + + s->snake = NULL; + int start_x = w / 2; + int start_y = h / 2; + + s->snake = add_snake(s->snake, start_x, start_y); + + place_food(s); +} + +void draw_world(const struct state* s) { + if (!s) return; + + system("clear"); // или "cls" на Windows + + for (int row = 0; row < s->height; row++) { + for (int col = 0; col < s->width; col++) { + int drawn = 0; + + if (is_snake(s->snake, col, row)) { + putchar('O'); + drawn = 1; + } else { + for (int i = 0; i < FOOD_COUNT; ++i) { + if (s->foodx[i] == col && s->foody[i] == row) { + putchar('*'); + drawn = 1; + break; + } + } + } + + if (!drawn) { + putchar('.'); + } + } + putchar('\n'); + } +} + +char read_input(void) { + char key = 0; + + printf("Zadaj smer (WASD): "); + scanf(" %c", &key); + + return key; +} + +void change_direction(struct state* s, char key) { + if (!s) return; + + switch (key) { + case 'w': + case 'W': + s->sx = 0; + s->sy = -1; + break; + case 's': + case 'S': + s->sx = 0; + s->sy = 1; + break; + case 'a': + case 'A': + s->sx = -1; + s->sy = 0; + break; + case 'd': + case 'D': + s->sx = 1; + s->sy = 0; + break; + default: + // ничего не делаем при некорректном вводе + break; + } +} diff --git a/a3/world.h b/a3/world.h new file mode 100644 index 0000000..3dbfc40 --- /dev/null +++ b/a3/world.h @@ -0,0 +1,11 @@ +#ifndef WORLD_MODULE_H +#define WORLD_MODULE_H + +#include "snake.h" + +void setup_world(struct state* s, int w, int h); +void draw_world(const struct state* s); +char read_input(void); +void change_direction(struct state* s, char key); + +#endif diff --git a/a3/world.o b/a3/world.o new file mode 100644 index 0000000000000000000000000000000000000000..e53900198186f159b11e2051a9573414118e56fd GIT binary patch literal 3021 zcmcJRU2GIp6vyv$2eOiCiCO$8evEO6t%0T3iWQ96N=J|sXebRvG1GBpTNc`F-JM!! zph1=1;uVaV z;P*?=l_@Ow^*X=xWQyVAdcC8UvwGR-469i^=&0d5IXbh><;?l;tFO(%F;i@s)5|0m z_PN#>xMsJsITzoX|J&&;`NeimERu`J_7zFV?luX_o$hwPTy!-~ zP)KT_DMZu*>YbTy|9Dincov}9VAf8`E6xwD)aWWIWm^Em?S08bVlNqG`S&*2D-dZ1yyU~q=|y^;!b@|y92YjwB(*oich!p)k=lL~J;*yHcsZ zyzI8Q?3&vVzTw1bn0*`Yojy;GPIoN-!OcqLxIRz!3Q}V=K*N{%ymzEH_4+CO1|6(D z)bI@`-;ue#e$2|MlN$UhSFsSBAyA%Nv<2BJg%=m9a!*=Zl{_TL^DZ>HYV9p3s5!aj zTx>9Iro=0zW$x3`L-CZ>w7a9Hvw4Fiv{f-Ay;O$={{vKi_inE}PjIsCg}aw@W&(Y)9T(sx?NON4pdLkKpSlUQ_d)&~^&`~V_ET&>0(mF$ zDRh3-9CbI@ej0KQ_Hr$Hw(pl_nSUDcQP?N__PV#E!%Ao?P($KbwD(Ec&U6rTztm>Y zJ|O8wv=2&Z#d_#MhlB}g04){$Ac`3hr$O%Avmn~1kob!!g!Q;uE7Km38)cZu20bk2 zo?=bI7_Tg3qd!2GnwaQ!;%apFU80wUOYKb0F-4g=nYJ)>F?BQTVtScr4^tnL#k7}c zkZFX;W;(!hi0KH^F{UY|x0!NG?=YQY`jF`~(;22um_B1V%k%})Ii|0frkTz&eb4k0 z(?zDAnJzP3VYqYVw<Jq4E<5Y*=GZr`chled;q~rGJ zh#_x{Fszh0R^?ROw2VX&iG+bv$$_|GB~tO2ofuBuA+BKzC6WVU#+%-aGZJYdoiz6& JrD<6n{sYW_^PvC$ literal 0 HcmV?d00001