Added command-line option for setting size of board

This commit is contained in:
AnnaSnoeijs 2025-06-06 21:31:59 +02:00
parent e47d63b430
commit 72b6290798
6 changed files with 101 additions and 74 deletions

View file

@ -65,13 +65,13 @@
#define SCOREBOARD_HEIGHT 10
#endif
void initBoard( void ){
void initBoard( const board_t board ){
setlocale(LC_ALL, "");
initscr();
keypad(stdscr, TRUE);
nonl();
echo();
for( int column = 0; column < BOARD_WIDTH; column++ ){
for( int column = 0; column < board.columns; column++ ){
char colnum[4];
sprintf( colnum, "%2d", column + FIRST_NUMBER );
mvaddstr(
@ -79,7 +79,7 @@ void initBoard( void ){
BOARD_X + BOARD_DX * ( column + 1 ),
colnum
);
for(int row = 0; row < BOARD_HEIGHT; row++){
for(int row = 0; row < board.rows; row++){
mvaddstr(
BOARD_Y + BOARD_DY * ( row + 1 ),
BOARD_X + BOARD_DX * ( column + 1 ),
@ -87,14 +87,14 @@ void initBoard( void ){
);
}
mvaddstr(
BOARD_Y + BOARD_DY * ( BOARD_HEIGHT + 1 ),
BOARD_Y + BOARD_DY * ( board.rows + 1 ),
BOARD_X + BOARD_DX * ( column + 1 ),
colnum
);
}
for(int row = 0; row < BOARD_HEIGHT; row++ ){
for(int row = 0; row < board.rows; row++ ){
char rownum[4];
sprintf( rownum, "%2d", row + FIRST_NUMBER );
sprintf( rownum, "%2d", board.rows - row + FIRST_NUMBER - 1 );
mvaddstr(
BOARD_Y + BOARD_DY * ( row + 1 ),
BOARD_X,
@ -102,7 +102,7 @@ void initBoard( void ){
);
mvaddstr(
BOARD_Y + BOARD_DY * ( row + 1 ),
BOARD_X + BOARD_DX * ( BOARD_WIDTH + 1 ),
BOARD_X + BOARD_DX * ( board.columns + 1 ),
rownum
);
}
@ -139,7 +139,7 @@ void updateBoard(
switch( move ){
case PUT:
mvaddstr(
BOARD_Y + BOARD_DY * ( BOARD_HEIGHT - height + 1 ),
BOARD_Y + BOARD_DY * ( board.rows - height + 1 ),
BOARD_X + 1 + BOARD_DX * ( column + 1 ),
board.column[ column ] & 1 << ( height - 1 ) ? "1" : "0"
);
@ -147,7 +147,7 @@ void updateBoard(
default:
for( int row = 0; row < height; row++ ){
mvaddstr(
BOARD_Y + BOARD_DY * ( BOARD_HEIGHT - row ),
BOARD_Y + BOARD_DY * ( board.rows - row ),
BOARD_X + 1 + BOARD_DX * ( column + 1 ),
board.column[ column ] & 1 << row ? "1" : "0"
);
@ -227,16 +227,16 @@ int askColumn(
if( board.player ) addstr( "p1" );
else addstr( "p0" );
refresh();
for(; board.height[ column ] >= BOARD_HEIGHT; )
column += ( column < BOARD_WIDTH - 1 );
for(; board.height[ column ] >= board.rows; )
column += ( column < board.columns - 1 );
for(;;){
int ch = mvgetch(
BOARD_Y + BOARD_DY * ( BOARD_HEIGHT - board.height[ column ] ),
BOARD_Y + BOARD_DY * ( board.rows - board.height[ column ] ),
BOARD_X + 1 + BOARD_DX * ( column + 1 )
);
switch( ch ){
case KEY_RIGHT:
column += ( column < BOARD_WIDTH - 1 );
column += ( column < board.columns - 1 );
break;
case KEY_LEFT:
column -= ( column > 0 );
@ -246,9 +246,9 @@ int askColumn(
}
switch( move ){
case PUT:
for(; board.height[ column ] >= BOARD_HEIGHT; ) switch( ch ){
for(; board.height[ column ] >= board.rows; ) switch( ch ){
case KEY_RIGHT:
if( column >= BOARD_WIDTH ) ch = KEY_LEFT;
if( column >= board.columns ) ch = KEY_LEFT;
else column++;
break;
case KEY_LEFT:
@ -260,7 +260,7 @@ int askColumn(
case POP:
for(; board.height[ column ] <= 0; ) switch( ch ){
case KEY_RIGHT:
if( column >= BOARD_WIDTH ) ch = KEY_LEFT;
if( column >= board.columns ) ch = KEY_LEFT;
else column++;
break;
case KEY_LEFT:
@ -296,10 +296,10 @@ int askColumn(
INPUT_X
);
clrtoeol();
if( column >= 0 && column < BOARD_WIDTH )
if( column >= 0 && column < board.columns )
switch( move ){
case PUT:
if( board.height [ column ] < BOARD_HEIGHT )
if( board.height [ column ] < board.columns )
return column;
else addstr( "Pls enter a column that ain't full" );
break;