Changed type stuff

This commit is contained in:
AnnaSnoeijs 2025-06-06 21:32:00 +02:00
parent 355c79bac4
commit c0b357deb2
6 changed files with 65 additions and 50 deletions

View file

@ -122,10 +122,10 @@ int main( int argc, char *argv[] ){
fprintf( stderr, "ERR: AMOUT OF ROWS MUST BE AT LEAST 1\n" ); fprintf( stderr, "ERR: AMOUT OF ROWS MUST BE AT LEAST 1\n" );
return -1; return -1;
} }
#define ROWOVERFLOW ( sizeof(column_t) * CHAR_BIT ) #define ROWOVERFLOW (rowsint_t)( sizeof(column_t) * CHAR_BIT )
if( playboard.rows >= ROWOVERFLOW ){ if( playboard.rows >= ROWOVERFLOW ){
fprintf( stderr, fprintf( stderr,
"ERR: AMOUT OF ROWS MUST BE LESS THAN %d\n", (int)ROWOVERFLOW "ERR: AMOUT OF ROWS MUST BE LESS THAN %d\n", ROWOVERFLOW
); );
return -1; return -1;
} }
@ -164,7 +164,7 @@ int main( int argc, char *argv[] ){
initBoard( playboard ); initBoard( playboard );
// Begin loopin // Begin loopin
for(;; playboard.player = !playboard.player ){ for(;; playboard.player = !playboard.player ){
int column = askColumn( playboard ); columnsint_t column = askColumn( playboard );
playMove( &playboard, column ); playMove( &playboard, column );
calcWins( &wins, playboard, column ); calcWins( &wins, playboard, column );
updateBoard( wins, playboard, column ); updateBoard( wins, playboard, column );

View file

@ -1,10 +1,11 @@
#!/usr/bin/make -f #!/usr/bin/make -f
FLAGS = -std=gnu23 FLAGS = -std=c23
FLAGS += -O3 FLAGS += -O3
FLAGS += -pedantic FLAGS += -pedantic
FLAGS += -Wall FLAGS += -Wall
FLAGS += -Wextra FLAGS += -Wextra
FLAGS += -Werror FLAGS += -Werror
FLAGS += -Wformat-truncation=0
GITFLAG = -D'GITHASH=$(shell git rev-parse --short=1 HEAD)' GITFLAG = -D'GITHASH=$(shell git rev-parse --short=1 HEAD)'

32
types.h
View file

@ -4,14 +4,26 @@
#include <stdint.h> #include <stdint.h>
#include "config.h" #include "config.h"
typedef int column_t; #if INT_FAST16_MAX == INT_FAST64_MAX
typedef int rowsint_t;
typedef int columnsint_t;
typedef unsigned winint_t;
typedef uintmax_t column_t;
#else
typedef int_fast8_t rowsint_t;
typedef int_fast8_t columnsint_t;
typedef uint_fast8_t winint_t;
typedef uint_fast8_t column_t;
#endif
#define WININT_FORMAT "%3d"
typedef struct { typedef struct {
int player; bool player;
column_t *height; rowsint_t *height;
column_t *column; column_t *column;
uint8_t rows; rowsint_t rows;
uint8_t columns; columnsint_t columns;
} board_t; } board_t;
typedef struct { typedef struct {
@ -26,11 +38,11 @@ typedef struct {
} directions_t; } directions_t;
typedef struct { typedef struct {
int total; winint_t total;
int horizontal; winint_t horizontal;
int vertical; winint_t vertical;
int diagonalUp; winint_t diagonalUp;
int diagonalDown; winint_t diagonalDown;
} wincount_t; } wincount_t;
typedef struct { typedef struct {

2
ui.h
View file

@ -11,7 +11,7 @@ extern void initBoard(
extern void updateBoard( extern void updateBoard(
const wins_t wins, const wins_t wins,
const board_t board, const board_t board,
const int column const columnsint_t column
); );
extern int askColumn( extern int askColumn(

View file

@ -71,15 +71,17 @@ void initBoard( const board_t board ){
keypad(stdscr, TRUE); keypad(stdscr, TRUE);
nonl(); nonl();
echo(); echo();
for( int column = 0; column < board.columns; column++ ){ for( columnsint_t column = 0; column < board.columns; column++ ){
char colnum[4]; char colnum[4];
sprintf( colnum, "%2d", column + FIRST_NUMBER ); snprintf(
colnum, sizeof(colnum), "%2d", column + FIRST_NUMBER
);
mvaddstr( mvaddstr(
BOARD_Y, BOARD_Y,
BOARD_X + BOARD_DX * ( column + 1 ), BOARD_X + BOARD_DX * ( column + 1 ),
colnum colnum
); );
for(int row = 0; row < board.rows; row++){ for( rowsint_t row = 0; row < board.rows; row++ ){
mvaddstr( mvaddstr(
BOARD_Y + BOARD_DY * ( row + 1 ), BOARD_Y + BOARD_DY * ( row + 1 ),
BOARD_X + BOARD_DX * ( column + 1 ), BOARD_X + BOARD_DX * ( column + 1 ),
@ -92,9 +94,11 @@ void initBoard( const board_t board ){
colnum colnum
); );
} }
for(int row = 0; row < board.rows; row++ ){ for( rowsint_t row = 0; row < board.rows; row++ ){
char rownum[4]; char rownum[4];
sprintf( rownum, "%2d", board.rows - row + FIRST_NUMBER - 1 ); snprintf(
rownum, sizeof(rownum), "%2d", board.rows - row + FIRST_NUMBER - 1
);
mvaddstr( mvaddstr(
BOARD_Y + BOARD_DY * ( row + 1 ), BOARD_Y + BOARD_DY * ( row + 1 ),
BOARD_X, BOARD_X,
@ -106,7 +110,7 @@ void initBoard( const board_t board ){
rownum rownum
); );
} }
for( int y = 0; y < SCOREBOARD_HEIGHT; y++ ){ for( uint_fast8_t y = 0; y < SCOREBOARD_HEIGHT; y++ ){
char *str; char *str;
switch(y){ switch(y){
case 0: str = "┌───────────────┬────┬────┐"; break; case 0: str = "┌───────────────┬────┬────┐"; break;
@ -132,70 +136,70 @@ void initBoard( const board_t board ){
void updateBoard( void updateBoard(
const wins_t wins, const wins_t wins,
const board_t board, const board_t board,
const int column const columnsint_t column
){ ){
int height = board.height[ column ]; rowsint_t height = board.height[ column ];
mvaddstr( mvaddstr(
BOARD_Y + BOARD_DY * ( board.rows - height + 1 ), BOARD_Y + BOARD_DY * ( board.rows - height + 1 ),
BOARD_X + 1 + BOARD_DX * ( column + 1 ), BOARD_X + 1 + BOARD_DX * ( column + 1 ),
board.column[ column ] & 1 << ( height - 1 ) ? "1" : "0" board.column[ column ] & 1 << ( height - 1 ) ? "1" : "0"
); );
char num[4]; char num[4];
sprintf( num, "%3d", wins.count0.vertical ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.vertical );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 3, SCOREBOARD_Y + 3,
SCOREBOARD_X + 17, SCOREBOARD_X + 17,
num num
); );
sprintf( num, "%3d", wins.count1.vertical ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.vertical );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 3, SCOREBOARD_Y + 3,
SCOREBOARD_X + 22, SCOREBOARD_X + 22,
num num
); );
sprintf( num, "%3d", wins.count0.horizontal ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.horizontal );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 4, SCOREBOARD_Y + 4,
SCOREBOARD_X + 17, SCOREBOARD_X + 17,
num num
); );
sprintf( num, "%3d", wins.count1.horizontal ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.horizontal );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 4, SCOREBOARD_Y + 4,
SCOREBOARD_X + 22, SCOREBOARD_X + 22,
num num
); );
sprintf( num, "%3d", wins.count0.diagonalUp ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.diagonalUp );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 5, SCOREBOARD_Y + 5,
SCOREBOARD_X + 17, SCOREBOARD_X + 17,
num num
); );
sprintf( num, "%3d", wins.count1.diagonalUp ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.diagonalUp );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 5, SCOREBOARD_Y + 5,
SCOREBOARD_X + 22, SCOREBOARD_X + 22,
num num
); );
sprintf( num, "%3d", wins.count0.diagonalDown ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.diagonalDown );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 6, SCOREBOARD_Y + 6,
SCOREBOARD_X + 17, SCOREBOARD_X + 17,
num num
); );
sprintf( num, "%3d", wins.count1.diagonalDown ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.diagonalDown );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 6, SCOREBOARD_Y + 6,
SCOREBOARD_X + 22, SCOREBOARD_X + 22,
num num
); );
sprintf( num, "%3d", wins.count0.total ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.total );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 8, SCOREBOARD_Y + 8,
SCOREBOARD_X + 17, SCOREBOARD_X + 17,
num num
); );
sprintf( num, "%3d", wins.count1.total ); snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.total );
mvaddstr( mvaddstr(
SCOREBOARD_Y + 8, SCOREBOARD_Y + 8,
SCOREBOARD_X + 22, SCOREBOARD_X + 22,
@ -206,7 +210,7 @@ void updateBoard(
int askColumn( int askColumn(
const board_t board const board_t board
){ ){
int column = 0; columnsint_t column = 0;
#ifdef ARROWS #ifdef ARROWS
move( BOARD_Y, BOARD_X ); move( BOARD_Y, BOARD_X );
if( board.player ) addstr( "p1" ); if( board.player ) addstr( "p1" );

View file

@ -27,26 +27,24 @@
#define SCOREBOARD_HEIGHT 9 #define SCOREBOARD_HEIGHT 9
void initBoard( const board_t board ){ void initBoard( const board_t board ){
for( int i = SCOREBOARD_HEIGHT - ( board.rows + 2 ); i > 0; i-- ) for( rowsint_t i = SCOREBOARD_HEIGHT - ( board.rows + 2 ); i > 0; i-- )
putchar( '\n' ); putchar( '\n' );
printf( "\n " ); printf( "\n " );
for( int column = 0; column < board.columns; column++ ) for( columnsint_t column = 0; column < board.columns; column++ )
printf( "%2d ", column + FIRST_NUMBER ); printf( "%2d ", column + FIRST_NUMBER );
putchar( '\n' ); putchar( '\n' );
for( int row = board.rows - 1; row > -1; row-- ){ for( rowsint_t row = board.rows - 1; row > -1; row-- ){
// begin row // begin row
printf( "%2d " , row + FIRST_NUMBER ); printf( "%2d " , row + FIRST_NUMBER );
for( int column = 0; column < board.columns; column++ ) for( columnsint_t column = 0; column < board.columns; column++ )
printf( "[ ]" ); printf( "[ ]" );
// end of row // end of row
printf( "%2d" , row + FIRST_NUMBER ); printf( "%2d" , row + FIRST_NUMBER );
switch( row ){
}
putchar( '\n' ); putchar( '\n' );
} }
// end of board // end of board
printf( " " ); printf( " " );
for( int column = 0; column < board.columns; column++ ) for( columnsint_t column = 0; column < board.columns; column++ )
printf( "%2d ", column + FIRST_NUMBER ); printf( "%2d ", column + FIRST_NUMBER );
#define SCOREBOARD_LINE_END "\033[B\033["XSTR(SCOREBOARD_WIDTH)"D" #define SCOREBOARD_LINE_END "\033[B\033["XSTR(SCOREBOARD_WIDTH)"D"
printf("\033["XSTR(SCOREBOARD_OFFSET)"C\033["XSTR(SCOREBOARD_HEIGHT)"A" printf("\033["XSTR(SCOREBOARD_OFFSET)"C\033["XSTR(SCOREBOARD_HEIGHT)"A"
@ -69,9 +67,9 @@ void initBoard( const board_t board ){
void updateBoard( void updateBoard(
const wins_t wins, const wins_t wins,
const board_t board, const board_t board,
const int column const columnsint_t column
){ ){
int height = board.height [ column ]; rowsint_t height = board.height [ column ];
printf( printf(
"\033[%dA\033[%dC%c\033[%dB", "\033[%dA\033[%dC%c\033[%dB",
height + 3, height + 3,
@ -81,11 +79,11 @@ void updateBoard(
); );
printf( printf(
"\r\033[7A\033[%dC" "\r\033[7A\033[%dC"
"%3d │%3d\033[B\033[8D" "" WININT_FORMAT "" WININT_FORMAT "\033[B\033[8D"
"%3d │%3d\033[B\033[8D" "" WININT_FORMAT "" WININT_FORMAT "\033[B\033[8D"
"%3d │%3d\033[B\033[8D" "" WININT_FORMAT "" WININT_FORMAT "\033[B\033[8D"
"%3d │%3d\033[2B\033[8D" "" WININT_FORMAT "" WININT_FORMAT "\033[2B\033[8D"
"%3d │%3d\033[2B" "" WININT_FORMAT "" WININT_FORMAT "\033[2B"
,( 3 * board.columns + 6 ) + SCOREBOARD_WIDTH - 8 ,( 3 * board.columns + 6 ) + SCOREBOARD_WIDTH - 8
,wins.count0.vertical, wins.count1.vertical ,wins.count0.vertical, wins.count1.vertical
,wins.count0.horizontal, wins.count1.horizontal ,wins.count0.horizontal, wins.count1.horizontal
@ -99,7 +97,7 @@ void updateBoard(
int askColumn( int askColumn(
const board_t board const board_t board
){ ){
int column; columnsint_t column;
for(;;){ for(;;){
printf( "Wher player %d put? ", board.player ); printf( "Wher player %d put? ", board.player );
printf( "\033[K" ); // clear everything after cursor printf( "\033[K" ); // clear everything after cursor
@ -112,7 +110,7 @@ int askColumn(
else else
column *= 10; column *= 10;
if( column >= 0 ) if( column >= 0 )
column += ( int )( ch - '0' ); column += (columnsint_t)( ch - '0' );
} else { } else {
column = -2; column = -2;
} }