Added command-line option for setting size of board
This commit is contained in:
parent
e47d63b430
commit
72b6290798
6 changed files with 101 additions and 74 deletions
36
ui_ncurses.c
36
ui_ncurses.c
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue