Adding source files

This commit is contained in:
Valentin Moguerou 2021-10-11 18:45:03 +02:00
parent ffcbb893de
commit 0305d80f7e
10 changed files with 909 additions and 0 deletions

54
.gitignore vendored Normal file
View File

@ -0,0 +1,54 @@
# ---> C
# Prerequisites
*.d
# Object files
*.o
*.ko
*.obj
*.elf
# Linker output
*.ilk
*.map
*.exp
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf

28
Makefile Normal file
View File

@ -0,0 +1,28 @@
CC = gcc
FLAGS = -Wall -g
LFLAGS = -lcatwalk
all: bin/catwalk
bin/catwalk: obj/main.o obj/interact.o obj/print.o obj/simplegen.o
@mkdir -p $(@D)
$(CC) $(FLAGS) -o $@ $(LFLAGS) $^
obj/%.o: src/%.c
@mkdir -p $(@D)
$(CC) $(FLAGS) -o $@ -c $<
obj/main.o: src/main.c
obj/interact.o: src/interact.c
obj/print.o: src/print.c
obj/simplegen.o: src/simplegen.c
.PHONY: clean mrproper install
clean:
rm -rf obj
mrproper: clean
rm -rf bin
install: bin/catwalk
@mkdir -p /usr/local/bin/
cp bin/catwalk /usr/local/bin/

BIN
bin/catwalk Executable file

Binary file not shown.

307
src/interact.c Normal file
View File

@ -0,0 +1,307 @@
/* CATWALK - Test your logic
Copyright (C) 2021 Valentin Moguerou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/> */
#include <stdio.h>
#include <string.h>
#include <catwalk/grid.h>
#include <catwalk/route.h>
#include "print.h"
#include "interact.h"
#define COMMAND_MAX_SIZE 100
#define STR_STARTS_WITH(s1, s2) (strncmp(s1, s2, strlen(s2)) == 0)
void print_help()
{
printf(" | [l]eft, [r]ight - move towards the specified direction\n");
printf(" | [u]p, [d]own - move towards the specified direction\n");
printf(" | undo, z - undo the last move\n");
printf(" | [r]eset - reset the grid\n");
printf(" | help, ? - show this help\n");
printf(" | [s]how - show the current grid\n");
printf(" | exit, [q]uit - exit the program\n");
}
void clear_buffer()
{
int c = 0;
while (c != '\n' && c != EOF)
{
c = getchar();
}
}
int is_whitespace(char *str)
{
if (*str == '\0')
{
return 1;
}
for (char *chr=str; *chr; chr++)
{
if (*chr != ' ' && *chr != '\t')
{
return 0;
}
}
return 1;
}
void ltrim(char *dest, char *src)
{
char *ch = src;
while (*ch)
{
if (*ch != ' ' && *ch != '\t')
{
break;
}
ch++;
}
strcpy(dest, ch);
}
int read_from_stdin(char *str, int length)
{
char *entry_position = NULL;
if (fgets(str, length, stdin) != NULL)
{
entry_position = strchr(str, '\n');
if (entry_position != NULL)
{
*entry_position = '\0';
}
else
{
clear_buffer();
}
return 1;
}
else
{
clear_buffer();
return 0;
}
}
void interact(int width)
{
grid *gd = init_grid(width);
printf("Welcome to Catwalk CLI. Type 'help' or '?' to see all available commands.\n");
char prompt[COMMAND_MAX_SIZE] = "";
char buffer[COMMAND_MAX_SIZE] = "";
refresh_grid(gd);
init_player_route(gd);
for(;;)
{
if (is_whitespace(prompt))
{
printf("catwalk> ");
read_from_stdin(prompt, COMMAND_MAX_SIZE);
ltrim(buffer, prompt);
strcpy(prompt, buffer);
}
else
{
if STR_STARTS_WITH(prompt, "help")
{
print_help();
strcpy(buffer, prompt+strlen("help"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "?")
{
print_help();
strcpy(buffer, prompt+strlen("?"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "show")
{
print_interactive_grid(gd);
strcpy(buffer, prompt+strlen("show"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "reset")
{
if (gd->player_route->first->next == NULL)
{
printf("Play first!\n");
}
else
{
delete_element(gd->player_route->first->next);
gd->player_route->first->next = NULL;
gd->player_route->last = gd->player_route->first;
}
strcpy(buffer, prompt+strlen("reset"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "route")
{
print_route(gd->player_route);
strcpy(buffer, prompt+strlen("route"));
ltrim(prompt, buffer);
}
else if (STR_STARTS_WITH(prompt, "exit") || STR_STARTS_WITH(prompt, "quit") || STR_STARTS_WITH(prompt, "q"))
{
break;
}
else if STR_STARTS_WITH(prompt, "undo")
{
if (gd->player_route->first->next == NULL)
{
printf("Can't undo! (single element)\n");
}
else
{
pop_back(gd->player_route);
}
strcpy(buffer, prompt+strlen("z"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "left")
{
switch (move_left(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("left"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "right")
{
switch (move_right(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("right"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "up")
{
switch (move_up(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("up"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "down")
{
switch (move_down(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("down"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "s")
{
print_interactive_grid(gd);
strcpy(buffer, prompt+strlen("s"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "l")
{
switch (move_left(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("l"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "r")
{
switch (move_right(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("r"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "u")
{
switch (move_up(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("u"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "d")
{
if (gd->player_route->first->next == NULL)
{
printf("Can't undo! (single element)\n");
}
else
{
pop_back(gd->player_route);
}
strcpy(buffer, prompt+strlen("undo"));
ltrim(prompt, buffer);
}
else if STR_STARTS_WITH(prompt, "z")
{
switch (move_down(gd->player_route))
{
case 1: puts("Cannot move: border of the grid"); break;
case 2: puts("Cannot move: already went there"); break;
}
strcpy(buffer, prompt+strlen("d"));
ltrim(prompt, buffer);
}
else
{
printf("Unrecognized command : '%s'!\n", prompt);
prompt[0] = '\0';
}
}
if (gd->player_route->last->x == gd->end[0] && gd->player_route->last->y == gd->end[1])
{
print_interactive_grid(gd);
if (verify(gd))
{
printf("You won!\n");
}
else
{
printf("You lost!\n");
}
random_start(gd);
refresh_grid(gd);
reset_player_route(gd);
}
}
delete_grid(gd);
}

32
src/interact.h Normal file
View File

@ -0,0 +1,32 @@
/* CATWALK - Test your logic
Copyright (C) 2021 Valentin Moguerou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/> */
#ifndef INTERACT_H_INCLUDED
#define INTERACT_H_INCLUDED
#include <catwalk/grid.h>
void print_help();
void clear_buffer();
int is_whitespace(char *str);
int read_from_stdin(char *str, int length);
void interact(int width);
#endif /* INTERACT_H_INCLUDED */

100
src/main.c Normal file
View File

@ -0,0 +1,100 @@
/* CATWALK - Test your logic
Copyright (C) 2021 Valentin Moguerou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/> */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <catwalk/grid.h>
#include "interact.h"
#include "simplegen.h"
#define PROGRAM_VERSION "1.0"
void help(char *program_name)
{
printf("\
Usage : %s [parameters]\n",
program_name);
puts("\n\
-h, --help Print this help.\n\
-v, --version Print version info.\n\
-i, --interactive Launch catwalk-cli in interactive mode (default\n\
-s, --simple Create a grid, without permitting to play.\n\
-w, --width <width> Create a grid with the given width.\n\
--interactive, --simple, --help and --version are mutually exclusive: the last argument is kept.\n\n\
This program was made with love by Valentin Moguerou <valentin@moguerou.net>.");
}
void version()
{
printf("Catwalk CLI version 1.0\n");
}
int main(int argc, char **argv)
{
int width = 4;
char mode = 'i';
for (int i=1; i<argc; i++)
{
if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0)
{
mode = 'h';
}
else if (strcmp(argv[i], "-i") == 0 || strcmp(argv[i], "--interactive") == 0)
{
mode = 'i';
}
else if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--simple") == 0)
{
mode = 's';
}
else if (strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0)
{
mode = 'v';
}
else if (strcmp(argv[i], "-w") == 0 || strcmp(argv[i], "--width") == 0)
{
if (i+1==argc)
{
fprintf(stderr, "Please do specify a width.\n");
exit(EXIT_FAILURE);
}
else
{
width = strtol(argv[i+1], NULL, 10); // base 10
if (width<2)
{
fprintf(stderr, "Width is too low (<2).\n");
exit(EXIT_FAILURE);
}
}
}
}
srand(time(NULL));
switch (mode)
{
case 'i': interact(width); break;
case 'h': help(argv[0]); break;
case 's': simple_generation(width); break;
case 'v': version(); break;
}
return 0;
}

299
src/print.c Normal file
View File

@ -0,0 +1,299 @@
/* CATWALK - Test your logic
Copyright (C) 2021 Valentin Moguerou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/> */
#include <stdio.h>
#include <catwalk/grid.h>
#include <catwalk/route.h>
#include "print.h"
//#define COLORED_PATH
#ifdef COLORED_PATH
# define KNRM "\e[0m"
# define KRED "\e[31m"
#endif
const char ASCII_START[GRID_CELL_H][GRID_CELL_W]
= {
{' ', ' ', '/', '\\', ' ', ' ', ' '},
{' ', '/', '\\', ' ', '\\', '/', ' '},
{' ', ' ', ' ', '\\', '/', ' ', ' '}
};
const char ASCII_CAT[GRID_CELL_H][GRID_CELL_W]
= {
{' ', '/', '\\', '_', '/', '\\', ' '},
{'(', ' ', 'o', '.', 'o', ' ', ')'},
{' ', '>', ' ', '^', ' ', '<', ' '}
};
const char ASCII_MILK[GRID_CELL_H][GRID_CELL_W]
= {
{' ', ' ', '=', '=', ' ', ' ', ' '},
{' ', '/', 'm', 'i', '\\', ' ', ' '},
{' ', '\\', 'l', 'k', '/', ' ', ' '}
};
void print_interactive_grid(grid *gd)
{
element *pos = gd->player_route->last; // define pointer to last element of player route
element *el;
for (int y=0; y<(gd->width+1)*(GRID_CELL_H+1); y++) // for each line
{
for (int x=0; x<(gd->width+1)*(GRID_CELL_W+1); x++) // for each column
{
if (x<GRID_CELL_W || y<GRID_CELL_H) // if header (indicators)
{
if (x == GRID_CELL_W/2 && y == GRID_CELL_H/2) // top left blank space
{
putchar(CELL_FILL_CHAR);
}
else if (x%(GRID_CELL_W+1) == GRID_CELL_W/2 && y == GRID_CELL_H/2) // top indicators
{
printf("%d", gd->hints->x[x/(GRID_CELL_W+1)-1]);
}
else if (x == GRID_CELL_W/2 && y%(GRID_CELL_H+1) == GRID_CELL_H/2) // left indicators
{
printf("%d", gd->hints->y[y/(GRID_CELL_H+1)-1]);
}
else
{
putchar(CELL_FILL_CHAR); // blank space around numbers
}
}
else // else if body (cells)
{
if ((x+1)%(GRID_CELL_W+1) == 0 && (y+1)%(GRID_CELL_H+1) == 0)
{
putchar(CELL_NODE_CHAR); // cell border intersections
}
else if ((y+1)%(GRID_CELL_H+1) == 0)
{
putchar(HO_BORDER_CHAR); // cell horizontal borders
}
else if ((x+1)%(GRID_CELL_W+1) == 0)
{
putchar(VE_BORDER_CHAR); // cell vertical borders
}
else // if inside cells
{
if (x/(GRID_CELL_W+1)-1 == pos->x && y/(GRID_CELL_H+1)-1 == pos->y) // if cursor position corresponds to the player position
{
putchar(ASCII_CAT[y%(GRID_CELL_H+1)][x%(GRID_CELL_W+1)]);
}
else if (x/(GRID_CELL_W+1)-1 == gd->start[0] && y/(GRID_CELL_H+1)-1 == gd->start[1]) // if the player has moved, if cursor position corresponds to the cat position
{
putchar(ASCII_START[y%(GRID_CELL_H+1)][x%(GRID_CELL_W+1)]);
}
else if (x/(GRID_CELL_W+1)-1 == gd->end[0] && y/(GRID_CELL_H+1)-1 == gd->end[1]) // if corresponds to the milk position
{
putchar(ASCII_MILK[y%(GRID_CELL_H+1)][x%(GRID_CELL_W+1)]);
}
else if (!is_free(gd->player_route, x/(GRID_CELL_W+1)-1, y/(GRID_CELL_H+1)-1))
{
if (!el)
{
el = find_coordinates(gd->player_route, x/(GRID_CELL_W+1)-1, y/(GRID_CELL_H+1)-1);
}
else if (el->x!=x/(GRID_CELL_W+1)-1 || el->y!=y/(GRID_CELL_H+1)-1)
{
el = find_coordinates(gd->player_route, x/(GRID_CELL_W+1)-1, y/(GRID_CELL_H+1)-1);
}
if (x%(GRID_CELL_W+1) == GRID_CELL_W/2 && y%(GRID_CELL_H+1) == GRID_CELL_H/2)
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, CELL_NODE_CHAR, KNRM);
#else
putchar(CELL_NODE_CHAR);
#endif
}
else if (x%(GRID_CELL_W+1) == GRID_CELL_W/2 || y%(GRID_CELL_H+1) == GRID_CELL_H/2)
{
if (x%(GRID_CELL_W+1) < GRID_CELL_W/2 && is_left(el, el->previous))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, HO_BORDER_CHAR, KNRM);
#else
putchar(HO_BORDER_CHAR);
#endif
}
else if (x%(GRID_CELL_W+1) > GRID_CELL_W/2 && is_right(el, el->previous))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, HO_BORDER_CHAR, KNRM);
#else
putchar(HO_BORDER_CHAR);
#endif
}
else if (y%(GRID_CELL_H+1) < GRID_CELL_H/2 && is_up(el, el->previous))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, VE_BORDER_CHAR, KNRM);
#else
putchar(VE_BORDER_CHAR);
#endif
}
else if (y%(GRID_CELL_H+1) > GRID_CELL_H/2 && is_down(el, el->previous))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, VE_BORDER_CHAR, KNRM);
#else
putchar(VE_BORDER_CHAR);
#endif
}
else if (x%(GRID_CELL_W+1) < GRID_CELL_W/2 && is_left(el, el->next))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, HO_BORDER_CHAR, KNRM);
#else
putchar(HO_BORDER_CHAR);
#endif
}
else if (x%(GRID_CELL_W+1) > GRID_CELL_W/2 && is_right(el, el->next))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, HO_BORDER_CHAR, KNRM);
#else
putchar(HO_BORDER_CHAR);
#endif
}
else if (y%(GRID_CELL_H+1) < GRID_CELL_H/2 && is_up(el, el->next))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, VE_BORDER_CHAR, KNRM);
#else
putchar(VE_BORDER_CHAR);
#endif
}
else if (y%(GRID_CELL_H+1) > GRID_CELL_H/2 && is_down(el, el->next))
{
#ifdef COLORED_PATH
printf("%s%c%s", KRED, VE_BORDER_CHAR, KNRM);
#else
putchar(VE_BORDER_CHAR);
#endif
}
else
{
putchar(CELL_FILL_CHAR);
}
}
else
{
putchar(CELL_FILL_CHAR);
}
}
else // if cursor position corresponds to nothing
{
putchar(CELL_FILL_CHAR);
}
}
}
}
putchar('\n'); // newline
}
}
void print_simple_grid(grid *gd)
{
for (int y=0; y<(gd->width+1)*(GRID_CELL_H+1); y++) // for each line
{
for (int x=0; x<(gd->width+1)*(GRID_CELL_W+1); x++) // for each column
{
if (x<GRID_CELL_W || y<GRID_CELL_H) // if header (indicators)
{
if (x == GRID_CELL_W/2 && y == GRID_CELL_H/2) // top left blank space
{
putchar(CELL_FILL_CHAR);
}
else if (x%(GRID_CELL_W+1) == GRID_CELL_W/2 && y == GRID_CELL_H/2) // top indicators
{
printf("%d", gd->hints->x[x/(GRID_CELL_W+1)-1]);
}
else if (x == GRID_CELL_W/2 && y%(GRID_CELL_H+1) == GRID_CELL_H/2) // left indicators
{
printf("%d", gd->hints->y[y/(GRID_CELL_H+1)-1]);
}
else
{
putchar(CELL_FILL_CHAR); // blank space around numbers
}
}
else // else if body (cells)
{
if ((x+1)%(GRID_CELL_W+1) == 0 && (y+1)%(GRID_CELL_H+1) == 0)
{
putchar(CELL_NODE_CHAR); // cell border intersections
}
else if ((y+1)%(GRID_CELL_H+1) == 0)
{
putchar(HO_BORDER_CHAR); // cell horizontal borders
}
else if ((x+1)%(GRID_CELL_W+1) == 0)
{
putchar(VE_BORDER_CHAR); // cell vertical borders
}
else // if inside cells
{
if (x/(GRID_CELL_W+1)-1 == gd->start[0] && y/(GRID_CELL_H+1)-1 == gd->start[1])
{
putchar(ASCII_CAT[y%(GRID_CELL_H+1)][x%(GRID_CELL_W+1)]);
}
else if (x/(GRID_CELL_W+1)-1 == gd->end[0] && y/(GRID_CELL_H+1)-1 == gd->end[1])
{
putchar(ASCII_MILK[y%(GRID_CELL_H+1)][x%(GRID_CELL_W+1)]);
}
else
{
putchar(CELL_FILL_CHAR);
}
}
}
}
putchar('\n'); // newline
}
}
void print_indicators(grid *gd)
{
printf("Indicators :\nX: ");
int i;
for (i=0; i<gd->width; i++)
{
printf("%d ", gd->hints->x[i]);
}
printf("\nY: ");
for (i=0; i<gd->width; i++)
{
printf("%d ", gd->hints->y[i]);
}
printf("\n");
}
void print_route(route *rt)
{
element *el = rt->first;
printf("[(%d, %d)", el->x, el->y);
el = el->next;
while (el)
{
printf(", (%d, %d)", el->x, el->y);
el = el->next;
}
printf("]\n");
}

36
src/print.h Normal file
View File

@ -0,0 +1,36 @@
/* CATWALK - Test your logic
Copyright (C) 2021 Valentin Moguerou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/> */
#ifndef PRINT_H_INCLUDED
#define PRINT_H_INCLUDED
#include <catwalk/grid.h>
#include <catwalk/route.h>
void print_interactive_grid(grid *gd);
void print_simple_grid(grid *gd);
void print_indicators(grid *gd);
void print_route(route *rt);
#define GRID_CELL_H 3
#define GRID_CELL_W 7
#define CELL_FILL_CHAR ' '
#define CELL_NODE_CHAR '+'
#define HO_BORDER_CHAR '-'
#define VE_BORDER_CHAR '|'
#endif /* PRINT_H_INCLUDED */

31
src/simplegen.c Normal file
View File

@ -0,0 +1,31 @@
/* CATWALK - Test your logic
Copyright (C) 2021 Valentin Moguerou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/> */
#include <stdio.h>
#include <catwalk/grid.h>
#include "print.h"
void simple_generation(int width)
{
grid *gd = init_grid(width);
refresh_grid(gd);
print_simple_grid(gd);
delete_grid(gd);
}

22
src/simplegen.h Normal file
View File

@ -0,0 +1,22 @@
/* CATWALK - Test your logic
Copyright (C) 2021 Valentin Moguerou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULIAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/> */
#ifndef SIMPLEGEN_H_INCLUDED
#define SIMPLEGEN_H_INCLUDED
void simple_generation(int width);
#endif /* SIMPLEGEN_H_INCLUDED */