Compare commits

...

5 Commits

Author SHA1 Message Date
Nakidai 3ce869657a
Remove MinGW, because it can't compile project now 2024-03-07 00:12:16 +03:00
Nakidai 0168c89155
Add flag about c standard 2024-03-07 00:12:13 +03:00
Nakidai ba0fc142d4
Also register troubles between MinGW and MSVC 2024-03-06 23:56:20 +03:00
Nakidai 837dbabac0
Completely fix #3 2024-03-06 23:50:27 +03:00
Nakidai d995de9116 Probably fix #3 2024-02-23 17:11:50 +03:00
7 changed files with 36 additions and 21 deletions

View File

@ -17,12 +17,17 @@ add_executable(csnake
set_target_properties(csnake PROPERTIES C_STANDARD 11) set_target_properties(csnake PROPERTIES C_STANDARD 11)
set_target_properties(csnake PROPERTIES C_EXTENSIONS FALSE) set_target_properties(csnake PROPERTIES C_EXTENSIONS FALSE)
if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
target_link_libraries(csnake pthread) target_link_libraries(csnake pthread)
elseif(${MINGW})
set(CMAKE_C_FLAGS "-D_UCRT")
target_link_libraries(csnake ucrt)
endif() endif()
target_include_directories(csnake PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) target_include_directories(csnake PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(SIZE 10 CACHE STRING "Size of game field") set(FIELD_SIZE 10 CACHE STRING "Size of game field")
set(DEFX 0 CACHE STRING "Start x") set(DEFX 0 CACHE STRING "Start x")
set(DEFY 0 CACHE STRING "Start y") set(DEFY 0 CACHE STRING "Start y")
set(SLEEP 1000 CACHE STRING "Sleep between frames (ms)") set(SLEEP 1000 CACHE STRING "Sleep between frames (ms)")

View File

@ -7,7 +7,11 @@ OBJDIR = obj
SRC = main.c screen.c input.c player.c sleep.c platform/getch.c platform/game.c SRC = main.c screen.c input.c player.c sleep.c platform/getch.c platform/game.c
OBJ = $(addprefix $(OBJDIR)/,$(SRC:.c=.o)) OBJ = $(addprefix $(OBJDIR)/,$(SRC:.c=.o))
DEFLDFLAGS = $(shell if echo "" | cc -E -dM -xc - | grep __FreeBSD__ > /dev/null 2>&1; then echo "-lpthread"; fi) # Link pthread on FreeBSD
DEFLDFLAGS += $(shell if echo "" | cc -E -dM -xc - | grep __FreeBSD__ > /dev/null 2>&1; then echo "-lpthread"; fi)
# Use ucrt on MinGW
DEFLDFLAGS += $(shell if echo "" | cc -E -dM -xc - | grep __MINGW32__ > /dev/null 2>&1; then echo "-lucrt"; fi)
DEFCFLAGS += $(shell if echo "" | cc -E -dM -xc - | grep __MINGW32__ > /dev/null 2>&1; then echo "-D_UCRT"; fi)
all: $(OUT) all: $(OUT)
@ -15,7 +19,7 @@ $(OBJDIR)/platform:
mkdir -p $(OBJDIR)/platform mkdir -p $(OBJDIR)/platform
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(OBJDIR)/%.o: $(SRCDIR)/%.c
$(CC) -c -o $@ $< $(CFLAGS) $(INCLUDE) $(CC) -c -std=c11 -o $@ $< $(CFLAGS) $(DEFCFLAGS) $(INCLUDE)
$(OUT): $(OBJDIR)/platform $(OBJ) $(OUT): $(OBJDIR)/platform $(OBJ)
$(CC) -o $@ $(OBJ) $(LDFLAGS) $(DEFLDFLAGS) $(CC) -o $@ $(OBJ) $(LDFLAGS) $(DEFLDFLAGS)

View File

@ -10,7 +10,7 @@ Supported platforms
-- --
Was tested on: Was tested on:
- FreeBSD 13.2 - FreeBSD 13.2
- Windows 11 (both MinGW and MSVC) - Windows 11 (MSVC)
- Linux 6.5.8 (glibc 2.38-7) - Linux 6.5.8 (glibc 2.38-7)
Building Building

8
configure vendored
View File

@ -7,7 +7,7 @@ usage()
CFLAGS - flags for compiler CFLAGS - flags for compiler
LDFLAGS - flags for linker LDFLAGS - flags for linker
OUT - out file (default: csnake OUT - out file (default: csnake
SIZE - size of game field FIELD_SIZE - size of game field
DEFX - start x DEFX - start x
DEFY - start y DEFY - start y
SLEEP - sleep between frames (ms)" SLEEP - sleep between frames (ms)"
@ -28,7 +28,7 @@ CC=${CC:-cc}
CFLAGS=${CFLAGS:-} CFLAGS=${CFLAGS:-}
LDFLAGS=${LDFLAGS:-} LDFLAGS=${LDFLAGS:-}
OUT=${OUT:-csnake} OUT=${OUT:-csnake}
SIZE=${SIZE:-10} FIELD_SIZE=${FIELD_SIZE:-10}
DEFX=${DEFX:-0} DEFX=${DEFX:-0}
DEFY=${DEFY:-0} DEFY=${DEFY:-0}
SLEEP=${SLEEP:-1000} SLEEP=${SLEEP:-1000}
@ -40,7 +40,7 @@ echo "LDFLAGS: $LDFLAGS"
echo "Out file: $OUT" echo "Out file: $OUT"
echo echo
echo "Code configuration:" echo "Code configuration:"
echo "Size: $SIZE" echo "Field size: $FIELD_SIZE"
echo "Start x: $DEFX" echo "Start x: $DEFX"
echo "Start y: $DEFY" echo "Start y: $DEFY"
echo "Sleep: $SLEEP" echo "Sleep: $SLEEP"
@ -50,7 +50,7 @@ CFLAGS = $CFLAGS
LDFLAGS = $LDFLAGS LDFLAGS = $LDFLAGS
OUT = $OUT" > config.mk OUT = $OUT" > config.mk
echo "#define SIZE $SIZE echo "#define FIELD_SIZE $FIELD_SIZE
#define DEFX $DEFX #define DEFX $DEFX
#define DEFY $DEFY #define DEFY $DEFY
#define SLEEP $SLEEP" > include/config.h #define SLEEP $SLEEP" > include/config.h

View File

@ -1,4 +1,4 @@
#define SIZE ${SIZE} #define FIELD_SIZE ${FIELD_SIZE}
#define DEFX ${DEFX} #define DEFX ${DEFX}
#define DEFY ${DEFY} #define DEFY ${DEFY}
#define SLEEP ${SLEEP} #define SLEEP ${SLEEP}

View File

@ -2,7 +2,13 @@
#define __PLATFORM_SCREEN_H__ #define __PLATFORM_SCREEN_H__
#ifdef _WIN32 #ifdef _WIN32
#ifdef __MINGW32__
#include <windows.h>
#else
#include <Windows.h> #include <Windows.h>
#endif /* __MINGW32__ */
#else #else
#include <stdio.h> #include <stdio.h>
#endif /* _WIN32 */ #endif /* _WIN32 */

View File

@ -25,7 +25,7 @@ Food generateFood(Player player)
Food food; Food food;
do do
{ {
food = (Food){rand() % SIZE, rand() % SIZE}; food = (Food){rand() % FIELD_SIZE, rand() % FIELD_SIZE};
} while (playerCheckFoodCollision(player, food)); } while (playerCheckFoodCollision(player, food));
return food; return food;
} }
@ -36,7 +36,7 @@ int main(int argc, char **argv)
platformGameInit(); platformGameInit();
Player player; playerCreate(&player, DOWN, DEFX, DEFY, 0); Player player; playerCreate(&player, DOWN, DEFX, DEFY, 0);
Screen screen; screenCreate(&screen, SIZE, SIZE, ' '); Screen screen; screenCreate(&screen, FIELD_SIZE, FIELD_SIZE, ' ');
Food food = generateFood(player); Food food = generateFood(player);
int key = 0; int key = 0;
@ -53,7 +53,7 @@ int main(int argc, char **argv)
resetCoordinates(); resetCoordinates();
screenShow(screen); screenShow(screen);
for (int i = 0; i < SIZE*2; ++i) putchar('-'); for (int i = 0; i < FIELD_SIZE*2; ++i) putchar('-');
printf("\nScore: %d\n", player.score); printf("\nScore: %d\n", player.score);
sleepMS(SLEEP); sleepMS(SLEEP);
@ -79,12 +79,12 @@ int main(int argc, char **argv)
} key = 0; } key = 0;
if (stopped) continue; if (stopped) continue;
if (playerDoTick(&player, food) && player.score < SIZE*SIZE - 1) if (playerDoTick(&player, food) && player.score < FIELD_SIZE*FIELD_SIZE - 1)
food = generateFood(player); food = generateFood(player);
head_x = player.head->x; head_x = player.head->x;
head_y = player.head->y; head_y = player.head->y;
if (head_x >= SIZE || head_x < 0 || head_y >= SIZE || head_y < 0 || playerCheckSelfCollision(player)) if (head_x >= FIELD_SIZE || head_x < 0 || head_y >= FIELD_SIZE || head_y < 0 || playerCheckSelfCollision(player))
{ {
running = false; running = false;
break; break;