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" );
|
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 );
|
||||||
|
|
|
||||||
3
makefile
3
makefile
|
|
@ -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
32
types.h
|
|
@ -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
2
ui.h
|
|
@ -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(
|
||||||
|
|
|
||||||
42
ui_ncurses.c
42
ui_ncurses.c
|
|
@ -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" );
|
||||||
|
|
|
||||||
30
ui_vt100.c
30
ui_vt100.c
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue