diff options
| author | tslil <tslil@posteo.de> | 2021-01-03 17:39:10 -0500 |
|---|---|---|
| committer | tslil <tslil@posteo.de> | 2026-08-28 19:37:41 +0100 |
| commit | 9e1bec11e01d56578a9d174e1ff5d689c8437a8a (patch) | |
| tree | e44fb15fddab462d1cd224f2f73e758c5d6fc348 /src | |
| parent | 01def5d990fafd2aa610c8452595a7717b25400b (diff) | |
| parent | 93bb0f481e9709e3aa737c889ce9df0ad9de1585 (diff) | |
Merge branch 'master' of git.sr.ht:~tslil/ctak
Diffstat (limited to 'src')
| -rw-r--r-- | src/ctaklm.c | 113 |
1 files changed, 58 insertions, 55 deletions
diff --git a/src/ctaklm.c b/src/ctaklm.c index e2d8cc1..72c0ae2 100644 --- a/src/ctaklm.c +++ b/src/ctaklm.c @@ -17,7 +17,7 @@ const char *rev = "\033[7m", *und = "\033[4m", *rst = "\033[0m"; static void put_stone(const enum STONE_VARIANT stone, const enum COLOUR colour, - const uint8_t top, const uint8_t beyond_carry_limit) { + const uint8_t top, const uint8_t beyond_carry_limit) { if (beyond_carry_limit) { fputs(und,stdout); } else { @@ -38,7 +38,7 @@ put_stone(const enum STONE_VARIANT stone, const enum COLOUR colour, static void print_cell_line(const uint8_t line, - const uint8_t col, const uint8_t row) { + const uint8_t col, const uint8_t row) { const uint8_t location = THE_COORDS(col, row), stack_size = COUNT_AT(location); @@ -51,16 +51,16 @@ print_cell_line(const uint8_t line, // If so, then if we can't fill it offset the starting line so // that it fills from the bottom up instead of the top down if (line < (k+1)*SQUARE_H - stack_size ) { - // skip these lines - idx = 0xFF; + // skip these lines + idx = 0xFF; } else { - // offset back - idx -= (k+1)*SQUARE_H - stack_size; + // offset back + idx -= (k+1)*SQUARE_H - stack_size; } } if (idx < stack_size) { put_stone(STONE_AT(location), colours[location] & (1 << idx), - idx == 0, idx >= board_size); + idx == 0, idx >= board_size); } else { putchar(' '); } @@ -82,24 +82,24 @@ print_board_line(const uint8_t line) { // Top and bottom of squares receive borders if (mod == 0) { for (uint8_t x = 0; x < board_size; x++) { - putchar('+'); - for (uint8_t k = 0; k < SQUARE_W; k++) putchar('-'); + putchar('+'); + for (uint8_t k = 0; k < SQUARE_W; k++) putchar('-'); } puts("+"); } else { // Interior of board should be filled by borders and pieces if (line < board_size*(SQUARE_H+1)) { for (uint8_t x = 0; x < board_size; x++) { - putchar('|'); - print_cell_line(mod - 1 , x, row); + putchar('|'); + print_cell_line(mod - 1 , x, row); } puts("|"); } else { // Bottom of board has column markers for (uint8_t x = 0; x < board_size; x++) { - for (uint8_t k = 0; k <= SQUARE_W/2; k++) putchar(' '); - printf("%c.",x+'a'); - for (uint8_t k = 0; k < SQUARE_W-SQUARE_W/2-2; k++) putchar(' '); + for (uint8_t k = 0; k <= SQUARE_W/2; k++) putchar(' '); + printf("%c.",x+'a'); + for (uint8_t k = 0; k < SQUARE_W-SQUARE_W/2-2; k++) putchar(' '); } putchar('\n'); } @@ -123,10 +123,10 @@ print_square(const uint8_t col, const uint8_t row) { if (stack_size > 0) { uint8_t mask = 1 << (stack_size - 1); for (uint8_t k = 0; k < stack_size; k++, mask >>= 1) { - put_stone(STONE_AT(THE_COORDS(col, row)), - colours[THE_COORDS(col, row)] & mask, - k+1 == stack_size, - stack_size-k >= board_size); + put_stone(STONE_AT(THE_COORDS(col, row)), + colours[THE_COORDS(col, row)] & mask, + k+1 == stack_size, + stack_size-k >= board_size); } puts("<-- top"); } else { @@ -140,17 +140,17 @@ print_square(const uint8_t col, const uint8_t row) { static void print_info(void) { printf("Turn: %2d, %s%s%s%s\n", - ply/2 + 1, - (ply & 1) ? blk : wht, - (ply & 1) ? "Black" : "White", - rst, - (ply < 2) ? " (counter-play start)" : ""); + ply/2 + 1, + (ply & 1) ? blk : wht, + (ply & 1) ? "Black" : "White", + rst, + (ply < 2) ? " (counter-play start)" : ""); printf("Flats remaining: %s%02d%s, %s%02d%s\n", - wht,white_count & 127,rst, - blk,black_count & 127,rst); + wht,white_count & 127,rst, + blk,black_count & 127,rst); printf("Caps remaining: %s%d%s, %s%d%s\n", - wht,white_count >> 7,rst, - blk,black_count >> 7,rst); + wht,white_count >> 7,rst, + blk,black_count >> 7,rst); } char *gamelog = 0; @@ -167,15 +167,15 @@ append_to_gamelog(const char *line, const uint8_t win_line) { prepend[1] = 0; } else if (ply & 1) { snprintf(prepend, 7, "%s%d. ", - (ply == 1) ? "" : "\n", ply/2+1); + (ply == 1) ? "" : "\n", ply/2+1); } else { strcpy(prepend, " "); } // Make room for this line gamelog = realloc(gamelog, - strlen(gamelog) - + strlen(prepend) - + strlen(line) + 1); + strlen(gamelog) + + strlen(prepend) + + strlen(line) + 1); strcat(gamelog,prepend); strcat(gamelog,line); } @@ -193,7 +193,7 @@ end_game(char *line, char *win) { static void handle_turn(char *line) { // Track win state - uint8_t new_win = (won == -1); + uint8_t new_win = (won == 0xFF); switch (do_ptn(line)) { // Errors case PTN_INVALID: { puts("Invalid PTN."); break; } @@ -206,14 +206,14 @@ handle_turn(char *line) { case GAME_END: { // Did it end this turn? if (new_win) { - switch (won) { - case WIN_DRAGON: { end_game(line,"R-R"); break; } - case WIN_DRAW: { end_game(line,"1/2-1/2"); break; } - case WIN_FLAT_BLACK: { end_game(line,"0-F"); break; } - case WIN_FLAT_WHITE: { end_game(line,"F-0"); break; } - case WIN_ROAD_BLACK: { end_game(line,"0-R"); break; } - case WIN_ROAD_WHITE: { end_game(line,"R-0"); break; } - } + switch (won) { + case WIN_DRAGON: { end_game(line,"R-R"); break; } + case WIN_DRAW: { end_game(line,"1/2-1/2"); break; } + case WIN_FLAT_BLACK: { end_game(line,"0-F"); break; } + case WIN_FLAT_WHITE: { end_game(line,"F-0"); break; } + case WIN_ROAD_BLACK: { end_game(line,"0-R"); break; } + case WIN_ROAD_WHITE: { end_game(line,"R-0"); break; } + } } puts("Game over, enter `new' to play again."); break; @@ -240,12 +240,15 @@ new_game(uint8_t size) { int main(int argc, char **argv) { + (void)(argc); + (void)(argv); new_game(5); char *line; while((line = linenoise("ctaklm> ")) != NULL) { if (!strncmp(line,"help",5)) { - puts("Valid commands: auto (board|info), board, help, info, log, square, new [56], <PTN>."); + puts("Valid commands: auto (board|info), board, help, info, log,\ + square, new [56], <PTN>."); } else if (!strncmp(line,"board",6)) { print_board(); } else if (!strncmp(line,"info",5)) { @@ -254,31 +257,31 @@ main(int argc, char **argv) { puts(gamelog); } else if (!strncmp(line,"auto",4)) { if (!strncmp(line,"auto board",10)) { - auto_board = ~auto_board; - printf("Automatic board display %s.\n", - (auto_board) ? "Enabled" : "Disabled"); + auto_board = ~auto_board; + printf("Automatic board display %s.\n", + (auto_board) ? "Enabled" : "Disabled"); } else if (!strncmp(line,"auto info",9)) { - auto_info = ~auto_info; - printf("Automatic info display %s.\n", - (auto_info) ? "Enabled" : "Disabled"); + auto_info = ~auto_info; + printf("Automatic info display %s.\n", + (auto_info) ? "Enabled" : "Disabled"); } else { - puts("Usage: auto (board|info)."); + puts("Usage: auto (board|info)."); } } else if (!strncmp(line,"square",6)) { if (strnlen(line, 9) >= 9 - && line[7] >= 'a' && line[7] <= '`'+board_size - && line[8] >= '1' && line[8] <= '0'+board_size) { - print_square(line[7]-'a', line[8]-'1'); + && line[7] >= 'a' && line[7] <= '`'+board_size + && line[8] >= '1' && line[8] <= '0'+board_size) { + print_square(line[7]-'a', line[8]-'1'); } else { - printf("Usage: square [a-%c][1-%c]\n",'`'+board_size,'0'+board_size); + printf("Usage: square [a-%c][1-%c]\n",'`'+board_size,'0'+board_size); } } else if (!strncmp(line,"new",3)) { if (line[3] == 0) { - new_game(5); + new_game(5); } else if (strnlen(line,5) >= 5 && line[4] >= '5' && line[4] <= '6') { - new_game(line[4]-'0'); + new_game(line[4]-'0'); } else { - puts("Usage: new [56]."); + puts("Usage: new [56]."); } } else { handle_turn(line); |
