Changed type stuff
This commit is contained in:
parent
355c79bac4
commit
c0b357deb2
6 changed files with 65 additions and 50 deletions
|
|
@ -122,10 +122,10 @@ int main( int argc, char *argv[] ){
|
|||
fprintf( stderr, "ERR: AMOUT OF ROWS MUST BE AT LEAST 1\n" );
|
||||
return -1;
|
||||
}
|
||||
#define ROWOVERFLOW ( sizeof(column_t) * CHAR_BIT )
|
||||
#define ROWOVERFLOW (rowsint_t)( sizeof(column_t) * CHAR_BIT )
|
||||
if( playboard.rows >= ROWOVERFLOW ){
|
||||
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;
|
||||
}
|
||||
|
|
@ -164,7 +164,7 @@ int main( int argc, char *argv[] ){
|
|||
initBoard( playboard );
|
||||
// Begin loopin
|
||||
for(;; playboard.player = !playboard.player ){
|
||||
int column = askColumn( playboard );
|
||||
columnsint_t column = askColumn( playboard );
|
||||
playMove( &playboard, column );
|
||||
calcWins( &wins, playboard, column );
|
||||
updateBoard( wins, playboard, column );
|
||||
|
|
|
|||
3
makefile
3
makefile
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/make -f
|
||||
FLAGS = -std=gnu23
|
||||
FLAGS = -std=c23
|
||||
FLAGS += -O3
|
||||
FLAGS += -pedantic
|
||||
FLAGS += -Wall
|
||||
FLAGS += -Wextra
|
||||
FLAGS += -Werror
|
||||
FLAGS += -Wformat-truncation=0
|
||||
|
||||
GITFLAG = -D'GITHASH=$(shell git rev-parse --short=1 HEAD)'
|
||||
|
||||
|
|
|
|||
32
types.h
32
types.h
|
|
@ -4,14 +4,26 @@
|
|||
#include <stdint.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 {
|
||||
int player;
|
||||
column_t *height;
|
||||
bool player;
|
||||
rowsint_t *height;
|
||||
column_t *column;
|
||||
uint8_t rows;
|
||||
uint8_t columns;
|
||||
rowsint_t rows;
|
||||
columnsint_t columns;
|
||||
} board_t;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -26,11 +38,11 @@ typedef struct {
|
|||
} directions_t;
|
||||
|
||||
typedef struct {
|
||||
int total;
|
||||
int horizontal;
|
||||
int vertical;
|
||||
int diagonalUp;
|
||||
int diagonalDown;
|
||||
winint_t total;
|
||||
winint_t horizontal;
|
||||
winint_t vertical;
|
||||
winint_t diagonalUp;
|
||||
winint_t diagonalDown;
|
||||
} wincount_t;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
2
ui.h
2
ui.h
|
|
@ -11,7 +11,7 @@ extern void initBoard(
|
|||
extern void updateBoard(
|
||||
const wins_t wins,
|
||||
const board_t board,
|
||||
const int column
|
||||
const columnsint_t column
|
||||
);
|
||||
|
||||
extern int askColumn(
|
||||
|
|
|
|||
42
ui_ncurses.c
42
ui_ncurses.c
|
|
@ -71,15 +71,17 @@ void initBoard( const board_t board ){
|
|||
keypad(stdscr, TRUE);
|
||||
nonl();
|
||||
echo();
|
||||
for( int column = 0; column < board.columns; column++ ){
|
||||
for( columnsint_t column = 0; column < board.columns; column++ ){
|
||||
char colnum[4];
|
||||
sprintf( colnum, "%2d", column + FIRST_NUMBER );
|
||||
snprintf(
|
||||
colnum, sizeof(colnum), "%2d", column + FIRST_NUMBER
|
||||
);
|
||||
mvaddstr(
|
||||
BOARD_Y,
|
||||
BOARD_X + BOARD_DX * ( column + 1 ),
|
||||
colnum
|
||||
);
|
||||
for(int row = 0; row < board.rows; row++){
|
||||
for( rowsint_t row = 0; row < board.rows; row++ ){
|
||||
mvaddstr(
|
||||
BOARD_Y + BOARD_DY * ( row + 1 ),
|
||||
BOARD_X + BOARD_DX * ( column + 1 ),
|
||||
|
|
@ -92,9 +94,11 @@ void initBoard( const board_t board ){
|
|||
colnum
|
||||
);
|
||||
}
|
||||
for(int row = 0; row < board.rows; row++ ){
|
||||
for( rowsint_t row = 0; row < board.rows; row++ ){
|
||||
char rownum[4];
|
||||
sprintf( rownum, "%2d", board.rows - row + FIRST_NUMBER - 1 );
|
||||
snprintf(
|
||||
rownum, sizeof(rownum), "%2d", board.rows - row + FIRST_NUMBER - 1
|
||||
);
|
||||
mvaddstr(
|
||||
BOARD_Y + BOARD_DY * ( row + 1 ),
|
||||
BOARD_X,
|
||||
|
|
@ -106,7 +110,7 @@ void initBoard( const board_t board ){
|
|||
rownum
|
||||
);
|
||||
}
|
||||
for( int y = 0; y < SCOREBOARD_HEIGHT; y++ ){
|
||||
for( uint_fast8_t y = 0; y < SCOREBOARD_HEIGHT; y++ ){
|
||||
char *str;
|
||||
switch(y){
|
||||
case 0: str = "┌───────────────┬────┬────┐"; break;
|
||||
|
|
@ -132,70 +136,70 @@ void initBoard( const board_t board ){
|
|||
void updateBoard(
|
||||
const wins_t wins,
|
||||
const board_t board,
|
||||
const int column
|
||||
const columnsint_t column
|
||||
){
|
||||
int height = board.height[ column ];
|
||||
rowsint_t height = board.height[ column ];
|
||||
mvaddstr(
|
||||
BOARD_Y + BOARD_DY * ( board.rows - height + 1 ),
|
||||
BOARD_X + 1 + BOARD_DX * ( column + 1 ),
|
||||
board.column[ column ] & 1 << ( height - 1 ) ? "1" : "0"
|
||||
);
|
||||
char num[4];
|
||||
sprintf( num, "%3d", wins.count0.vertical );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.vertical );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 3,
|
||||
SCOREBOARD_X + 17,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count1.vertical );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.vertical );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 3,
|
||||
SCOREBOARD_X + 22,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count0.horizontal );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.horizontal );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 4,
|
||||
SCOREBOARD_X + 17,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count1.horizontal );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.horizontal );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 4,
|
||||
SCOREBOARD_X + 22,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count0.diagonalUp );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.diagonalUp );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 5,
|
||||
SCOREBOARD_X + 17,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count1.diagonalUp );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.diagonalUp );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 5,
|
||||
SCOREBOARD_X + 22,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count0.diagonalDown );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.diagonalDown );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 6,
|
||||
SCOREBOARD_X + 17,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count1.diagonalDown );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.diagonalDown );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 6,
|
||||
SCOREBOARD_X + 22,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count0.total );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count0.total );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 8,
|
||||
SCOREBOARD_X + 17,
|
||||
num
|
||||
);
|
||||
sprintf( num, "%3d", wins.count1.total );
|
||||
snprintf( num, sizeof(num), WININT_FORMAT, wins.count1.total );
|
||||
mvaddstr(
|
||||
SCOREBOARD_Y + 8,
|
||||
SCOREBOARD_X + 22,
|
||||
|
|
@ -206,7 +210,7 @@ void updateBoard(
|
|||
int askColumn(
|
||||
const board_t board
|
||||
){
|
||||
int column = 0;
|
||||
columnsint_t column = 0;
|
||||
#ifdef ARROWS
|
||||
move( BOARD_Y, BOARD_X );
|
||||
if( board.player ) addstr( "p1" );
|
||||
|
|
|
|||
30
ui_vt100.c
30
ui_vt100.c
|
|
@ -27,26 +27,24 @@
|
|||
#define SCOREBOARD_HEIGHT 9
|
||||
|
||||
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' );
|
||||
printf( "\n " );
|
||||
for( int column = 0; column < board.columns; column++ )
|
||||
for( columnsint_t column = 0; column < board.columns; column++ )
|
||||
printf( "%2d ", column + FIRST_NUMBER );
|
||||
putchar( '\n' );
|
||||
for( int row = board.rows - 1; row > -1; row-- ){
|
||||
for( rowsint_t row = board.rows - 1; row > -1; row-- ){
|
||||
// begin row
|
||||
printf( "%2d " , row + FIRST_NUMBER );
|
||||
for( int column = 0; column < board.columns; column++ )
|
||||
for( columnsint_t column = 0; column < board.columns; column++ )
|
||||
printf( "[ ]" );
|
||||
// end of row
|
||||
printf( "%2d" , row + FIRST_NUMBER );
|
||||
switch( row ){
|
||||
}
|
||||
putchar( '\n' );
|
||||
}
|
||||
// end of board
|
||||
printf( " " );
|
||||
for( int column = 0; column < board.columns; column++ )
|
||||
for( columnsint_t column = 0; column < board.columns; column++ )
|
||||
printf( "%2d ", column + FIRST_NUMBER );
|
||||
#define SCOREBOARD_LINE_END "\033[B\033["XSTR(SCOREBOARD_WIDTH)"D"
|
||||
printf("\033["XSTR(SCOREBOARD_OFFSET)"C\033["XSTR(SCOREBOARD_HEIGHT)"A"
|
||||
|
|
@ -69,9 +67,9 @@ void initBoard( const board_t board ){
|
|||
void updateBoard(
|
||||
const wins_t wins,
|
||||
const board_t board,
|
||||
const int column
|
||||
const columnsint_t column
|
||||
){
|
||||
int height = board.height [ column ];
|
||||
rowsint_t height = board.height [ column ];
|
||||
printf(
|
||||
"\033[%dA\033[%dC%c\033[%dB",
|
||||
height + 3,
|
||||
|
|
@ -81,11 +79,11 @@ void updateBoard(
|
|||
);
|
||||
printf(
|
||||
"\r\033[7A\033[%dC"
|
||||
"%3d │%3d\033[B\033[8D"
|
||||
"%3d │%3d\033[B\033[8D"
|
||||
"%3d │%3d\033[B\033[8D"
|
||||
"%3d │%3d\033[2B\033[8D"
|
||||
"%3d │%3d\033[2B"
|
||||
"" WININT_FORMAT " │" WININT_FORMAT "\033[B\033[8D"
|
||||
"" WININT_FORMAT " │" WININT_FORMAT "\033[B\033[8D"
|
||||
"" WININT_FORMAT " │" WININT_FORMAT "\033[B\033[8D"
|
||||
"" WININT_FORMAT " │" WININT_FORMAT "\033[2B\033[8D"
|
||||
"" WININT_FORMAT " │" WININT_FORMAT "\033[2B"
|
||||
,( 3 * board.columns + 6 ) + SCOREBOARD_WIDTH - 8
|
||||
,wins.count0.vertical, wins.count1.vertical
|
||||
,wins.count0.horizontal, wins.count1.horizontal
|
||||
|
|
@ -99,7 +97,7 @@ void updateBoard(
|
|||
int askColumn(
|
||||
const board_t board
|
||||
){
|
||||
int column;
|
||||
columnsint_t column;
|
||||
for(;;){
|
||||
printf( "Wher player %d put? ", board.player );
|
||||
printf( "\033[K" ); // clear everything after cursor
|
||||
|
|
@ -112,7 +110,7 @@ int askColumn(
|
|||
else
|
||||
column *= 10;
|
||||
if( column >= 0 )
|
||||
column += ( int )( ch - '0' );
|
||||
column += (columnsint_t)( ch - '0' );
|
||||
} else {
|
||||
column = -2;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue