From 7820aa9a5fc0578ecb139d99c68861b90b5f2aa5 Mon Sep 17 00:00:00 2001 From: KosmX <kosmx.mc@gmail.com> Date: Tue, 24 Nov 2020 15:23:26 +0100 Subject: [PATCH] bit rework --- snake.c | 179 +++++++++++++++++++++------------------------- structs.h | 12 +++- tests/getchtest | Bin 0 -> 20184 bytes tests/getchtest.c | 29 ++++++++ xperiments.exe | Bin 75830 -> 0 bytes 5 files changed, 120 insertions(+), 100 deletions(-) create mode 100755 tests/getchtest create mode 100644 tests/getchtest.c delete mode 100644 xperiments.exe diff --git a/snake.c b/snake.c index 334a88e..31802d4 100644 --- a/snake.c +++ b/snake.c @@ -3,6 +3,7 @@ #include<string.h> #include<locale.h> #include<ctype.h> +#include<time.h> #include "structs.h" #include "multiplatformLib.h" @@ -125,8 +126,9 @@ int readFile(FILE *file, Matrix *matrix){ return EOF-1; } for(int n = 0; n < lineCount; n++){ + matrix->matrix[i][n].isFood = 0; //That is NOT food for(int a = 0; a < 2; a++){ - matrix->matrix[i][n].chars[a].bytes.c[0] = ' '; + matrix->matrix[i][n].data.chars[a].bytes.c[0] = ' '; } } } @@ -143,7 +145,7 @@ int readFile(FILE *file, Matrix *matrix){ } else{ for(int charPos = 0; charPos < 4; charPos++){ - matrix->matrix[pos.x/2][pos.y].chars[pos.x%2].bytes.c[charPos] = current->value.bytes.c[charPos]; + matrix->matrix[pos.x/2][pos.y].data.chars[pos.x%2].bytes.c[charPos] = current->value.bytes.c[charPos]; } pos.x++; } @@ -170,12 +172,20 @@ void printChunk(chunk ch, Pos pos, screenData *scrDat){ if(pos.x < 0 || pos.y < 0 || pos.x >= scrDat->size.x || pos.y >= scrDat->size.y){ return; //if pos is not on the screen, just do nothing. } - printf("\e[%d;%dH", pos.y, pos.x *2); + printf("\e[%d;%dH", pos.y+1, pos.x *2+1); for(int i = 0; i < 2; i++){ - printChar(ch.chars[i]); + printChar(ch.data.chars[i]); } + #ifdef DEBUG + printf("\e[0;0H\n"); //to update terminal after EVERY print but drasticlally slowing it down + #endif } +/**Print characters to a map pos + * + * It will check if the character is on the screen + * + */ void print(chunk ch, Pos pos, screenData *scrDat, int width, int height){ pos.x = pos.x - scrDat->pos.x; if(pos.x < 0){ @@ -198,6 +208,10 @@ void print(chunk ch, Pos pos, screenData *scrDat, int width, int height){ printChunk(ch, pos, scrDat); } +void printSnakeChunk(snakeChain *snake){ + //TODO +} + int updateScreenSize(Matrix *map, screenData *scrDat){ struct Vec2i size = getWindowSize(); size.x = size.x / 2; @@ -215,7 +229,7 @@ int updateScreenSize(Matrix *map, screenData *scrDat){ } //Update screen if required -void updateScreen(Matrix *map, screenData *scrDat, snakeChain *head, Direction d, Food *food){ +void updateScreen(Matrix *map, screenData *scrDat, snakeChain *head, Direction d){ int do_update; do_update = updateScreenSize(map, scrDat); @@ -271,25 +285,15 @@ void updateScreen(Matrix *map, screenData *scrDat, snakeChain *head, Direction d if(do_update){ Pos pos; for (pos.y = scrDat->pos.y; pos.y < scrDat->pos.y + scrDat->size.y; pos.y++){ - printf("\e[0;%dH\e[K", pos.y - scrDat->pos.y); //Clear the screen line + printf("\e[%d;0H\e[K", pos.y - scrDat->pos.y + 1); //Clear the screen line + if(pos.y >= map->height && !scrDat->isYRepeat){ + break; + } for (pos.x = scrDat->pos.x; pos.x < scrDat->pos.x + scrDat->size.x; pos.x++){ if(pos.x < map->width || scrDat->isXRepeat){ print(map->matrix[pos.x%map->width][pos.y%map->height], pos, scrDat, map->width, map->height); } } - if(pos.y >= map->height && !scrDat->isYRepeat){ - break; - } - } - while(food->next->next != NULL){ - chunk c; - food = food->next; - //c.chars[0].bytes.c[0] = 'X'; - c.chars[0].bytes.c[0] = 'X'; - c.chars[0].bytes.c[0] = 'X'; - printf(green); - printChunk(c, food->pos, scrDat); - printf("\e[0m"); } } } @@ -341,68 +345,54 @@ void getControl(screenData *scrDat, Direction *direction){ } } +int isNotWall(chunk c){ + return c.isFood || (c.data.chars[0].bytes.c[0] == ' ' && c.data.chars[1].bytes.c[0] == ' '); +} + int isAir(chunk c){ - return c.chars[0].bytes.c[0] == ' ' && c.chars[1].bytes.c[0] == ' '; + return !c.isFood && isNotWall(c); } -void updateFood(Matrix *map, int *foodTick, int feedAmount, Food *firstFood, snakeChain *firstSnake, screenData *scrDat){ +void updateFood(Matrix *map, int *foodTick, int feedAmount, snakeChain *firstSnake, screenData *scrDat){ if((*foodTick)++ > feedAmount){ for(int i = 0; i < 128; i++){ Pos pos; int isFree = 1; - Food *food = firstFood; snakeChain *snake = firstSnake; pos.x = rand()%map->width; pos.y = rand()%map->height; - if(!isAir(map->matrix[pos.x][pos.y])){ - continue; - } - while (food->next->next != NULL) - { - food = food->next; - if(food->pos.x == pos.x && food->pos.y == pos.y){ - isFree = false; - break; + if(isAir(map->matrix[pos.x][pos.y])){ + while(snake != NULL){ + if(snake->pos.x == pos.x && snake->pos.y == pos.y){ + isFree = false; + break; + } + snake = snake->next; } - } - if(!isFree){ - continue; - } - while(snake != NULL){ - if(snake->pos.x == pos.x && snake->pos.y == pos.y){ - isFree = false; - break; + if(!isFree){ + continue; } - snake = snake->next; - } - if(!isFree){ - continue; - } - //pos is available - { - - *foodTick = 0; - Food *new = malloc(sizeof(Food)); - if(new != NULL){ + //pos is available + { + *foodTick = 0; chunk c; - new->next = food->next; - food->next = new; - new->pos = pos; - c.chars[0].bytes.c[0] = 'X'; - c.chars[0].bytes.c[0] = 'X'; + map->matrix[pos.x][pos.y].isFood = 1; + map->matrix[pos.x][pos.y].data.FRand = rand(); + c.data.chars[0].bytes.c[0] = 'X'; + c.data.chars[0].bytes.c[0] = 'X'; printf(green); print(c, pos, scrDat, map->width, map->height); printf("\e[0m"); + break; } - break; } } } } //EOF fatal error, 1 game over -int updateSnake(Matrix *map, screenData *scrDat, Direction d, snakeChain *head, Food *food, int canBite){ +int updateSnake(Matrix *map, screenData *scrDat, Direction d, snakeChain *head, int canBite){ Pos pos = head->pos; switch (d) { @@ -441,20 +431,10 @@ int updateSnake(Matrix *map, screenData *scrDat, Direction d, snakeChain *head, } } - if(isAir(map->matrix[pos.x][pos.y])){ - int isFood = 0; + if(isNotWall(map->matrix[pos.x][pos.y])){ + int isFood = map->matrix[pos.x][pos.y].isFood; snakeChain *snake = head; Pos tmp_pos1 = head->pos, tmp_pos2; - while(food->next->next != NULL){ - if(food->next->pos.x == pos.x && food->next->pos.y == pos.y){ - Food *current = food->next; - isFood = true; - food->next = food->next->next; - free(current); //Snake ate this food. It is safe to free; - break; - } - food = food->next; - } while (snake->next != 0) { snake = snake->next; @@ -487,8 +467,8 @@ int updateSnake(Matrix *map, screenData *scrDat, Direction d, snakeChain *head, snake->pos = tmp_pos1; tmp_pos1 = tmp_pos2; - c.chars[0].bytes.c[0] = '>'; - c.chars[0].bytes.c[0] = '<'; + c.data.chars[0].bytes.c[0] = '>'; + c.data.chars[0].bytes.c[0] = '<'; if(snake->next == NULL && isFood){ isFood = false; snake->next = malloc(sizeof(snake)); @@ -509,13 +489,13 @@ int updateSnake(Matrix *map, screenData *scrDat, Direction d, snakeChain *head, } if(tmp_pos2.x != -1){ chunk c; - c.chars[0].bytes.c[0] = ' '; - c.chars[0].bytes.c[0] = ' '; + c.data.chars[0].bytes.c[0] = ' '; + c.data.chars[0].bytes.c[0] = ' '; print(c, tmp_pos2, scrDat, map->width, map->height); //set this to air. } chunk c; - c.chars[0].bytes.c[0] = '('; - c.chars[0].bytes.c[0] = ')'; + c.data.chars[0].bytes.c[0] = '('; + c.data.chars[0].bytes.c[0] = ')'; printf(blue); print(c, head->pos, scrDat, map->width, map->height); //TODO direction snake printf("\e[0m"); @@ -587,44 +567,40 @@ int loadConfig(int *tickSpeed, int *repeatMap, int *feedAmount, int *canBite){ //update display //update food state //step snake -int tick(Matrix *map, screenData *scrDat, snakeChain *snake, Direction *d, Food *food, int feedAmount, int canBite){ +int tick(Matrix *map, screenData *scrDat, snakeChain *snake, Direction *d, int feedAmount, int canBite){ static int foodTick = 0; getControl(scrDat, d); if(scrDat->commands[0] != NONE){ *d = scrDat->commands[0]; } - updateScreen(map, scrDat, snake, *d, food); - if(d == NONE){ + updateScreen(map, scrDat, snake, *d); + if(*d == NONE){ chunk c; - c.chars[0].bytes.c[0] = '('; - c.chars[0].bytes.c[0] = ')'; + c.data.chars[0].bytes.c[0] = '('; + c.data.chars[0].bytes.c[0] = ')'; printf(blue); print(c, snake->pos, scrDat, map->width, map->height); printf("\e[0m"); return 0; // waiting for user input. } - updateFood(map, &foodTick, feedAmount, food, snake, scrDat); - updateSnake(map, scrDat, *d, snake, food, canBite); + updateFood(map, &foodTick, feedAmount, snake, scrDat); + updateSnake(map, scrDat, *d, snake, canBite); + //printf("\e[0;0H\n"); //Update the terminal (mostly on Unix based systems) + fflush(stdout); return 0; } int loop(Matrix *matrix, int tickspeed, int repeatMap, int feedAmount, int canBite){ - Direction d = DOWN; + Direction d = NONE; //Init with none screenData scrDat; snakeChain snake, *chain; - Food food; - food.next = malloc(sizeof(Food)); - if(food.next == NULL){ - return -1; - } - food.next->next = NULL; //Create food guards. while(true){ Pos p; p.x = rand()%matrix->width; p.y = rand()&matrix->height; - if(isAir(matrix->matrix[p.x][p.y])){ + if(isNotWall(matrix->matrix[p.x][p.y])){ snake.pos = p; break; } @@ -646,8 +622,10 @@ int loop(Matrix *matrix, int tickspeed, int repeatMap, int feedAmount, int canBi scrDat.size.x = 0; scrDat.size.y = 0; scrDat.repeatMap = repeatMap; + scrDat.commands[0] = NONE; + scrDat.commands[1] = NONE; while(42){ - if(tick(matrix, &scrDat, &snake, &d, &food, feedAmount, canBite)){ + if(tick(matrix, &scrDat, &snake, &d, feedAmount, canBite)){ break; } unisleep(tickspeed); //Special sleep to work both in windows and unix environment @@ -661,7 +639,8 @@ void _testprint(Matrix *map){ for(int x = 0; x < map->width; x++){ for(int i = 0; i < 2; i++){ //printf("%c", map->matrix[x][y].chars->bytes.c[i * 4]); //WTF... I didn't indexed correctly, but accidentaly I've got the right value... - printChar(map->matrix[x][y].chars[i]); + printChar(map->matrix[x][y].data.chars[i]); + //unisleep(1000); } //printf("|"); } @@ -675,12 +654,12 @@ void _print1char(Matrix *map){ if(x >= 0 && y >= 0 && x < map->width && y < map->height){ for(int i = 0;i < 2; i++){ printf("\nvalue: %hx, %hx, %hx, %hx\n", - (unsigned)map->matrix[x][y].chars[i].bytes.c[0], - (unsigned)map->matrix[x][y].chars[i].bytes.c[1], - (unsigned)map->matrix[x][y].chars[i].bytes.c[2], - (unsigned)map->matrix[x][y].chars[i].bytes.c[3]); + (unsigned)map->matrix[x][y].data.chars[i].bytes.c[0], + (unsigned)map->matrix[x][y].data.chars[i].bytes.c[1], + (unsigned)map->matrix[x][y].data.chars[i].bytes.c[2], + (unsigned)map->matrix[x][y].data.chars[i].bytes.c[3]); printf("as character: \""); - printChar(map->matrix[x][y].chars[i]); + printChar(map->matrix[x][y].data.chars[i]); printf("\"\n"); } } @@ -697,6 +676,8 @@ int core(int argc, char const *argv[]) initMultiplatform(); // init stuff. + srand(time(0)); // bee a bit more random + int tickspeed = 100, repeatMap = 0, feedAmount = 20, canBite = true; // if no config, default value //----load config---- @@ -759,6 +740,7 @@ int main(int argc, char const *argv[]) int main(int argc, char const *argv[]) { //2 + 3; //... this does nothing... + #ifdef DEBUG int ret; char const *array[] = {argv[0], "map1.txt"}; ret = core(2, array); @@ -767,4 +749,7 @@ int main(int argc, char const *argv[]) //return 0, ret; //Miért van ez a függvény tele szeméttel??? pl 0, smt... return ret; // így szép. + #else + return core(argc, argv); + #endif } \ No newline at end of file diff --git a/structs.h b/structs.h index 261bc1b..ce24712 100644 --- a/structs.h +++ b/structs.h @@ -31,7 +31,13 @@ typedef union unichar{ }unichar; typedef struct chunk //struct stores 2 chars and it's color :D { - unichar chars[2]; + int isFood :1; + union + { + unichar chars[2]; + int FRand; + }data; + /* struct{ int fg : 3; //3 bit color codes. @@ -56,11 +62,11 @@ typedef struct chunkMatrix{ int height; }Matrix; -typedef struct Food{ +/*typedef struct Food{ Pos pos; int rand; struct Food *next; -}Food; +}Food;*/ typedef struct screenData{ Pos pos; diff --git a/tests/getchtest b/tests/getchtest new file mode 100755 index 0000000000000000000000000000000000000000..8847179621ab0587769a6822d90a5daa8013cea4 GIT binary patch literal 20184 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 literal 0 HcmV?d00001 diff --git a/tests/getchtest.c b/tests/getchtest.c new file mode 100644 index 0000000..44c0403 --- /dev/null +++ b/tests/getchtest.c @@ -0,0 +1,29 @@ + +#include<stdio.h> +#include<termios.h> +#include<unistd.h> + +int main(int argc, char const *argv[]) +{ + + struct termios info; // This is from stackoverflow + tcgetattr(0, &info); /* get current terminal attirbutes; 0 is the file descriptor for stdin */ + info.c_lflag &= ~ICANON; /* disable canonical mode */ + info.c_cc[VMIN] = 0; /* don't wait for keypress, return EOF instead */ + info.c_cc[VTIME] = 0; /* no timeout */ + tcsetattr(0, TCSANOW, &info); /* set immediately */ + + int c = 0; + + sleep(1); + c = getchar(); + printf("\nint: %d\nchar: %c\n", c, c); + + sleep(5); + c = 0; + while(c != -1){ + c = getchar(); + printf("\nint: %d\nchar: %c\n", c, c); + } + return 0; +} diff --git a/xperiments.exe b/xperiments.exe deleted file mode 100644 index f0fdab5db041fca0420a901d4f88436f2935bb97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75830 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 N1X@die2<d*7yvDC`6vJY -- GitLab