Compare commits
5 Commits
9d6264d100
...
3ce869657a
Author | SHA1 | Date |
---|---|---|
Nakidai | 3ce869657a | |
Nakidai | 0168c89155 | |
Nakidai | ba0fc142d4 | |
Nakidai | 837dbabac0 | |
Nakidai | d995de9116 |
|
@ -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)")
|
||||||
|
|
8
Makefile
8
Makefile
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -3,14 +3,14 @@
|
||||||
usage()
|
usage()
|
||||||
{
|
{
|
||||||
echo "Use environment variables to pass values:
|
echo "Use environment variables to pass values:
|
||||||
CC - compiler (default: cc)
|
CC - compiler (default: cc)
|
||||||
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)"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
10
src/main.c
10
src/main.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue