unifying board drawing WIP
このコミットが含まれているのは:
コミット
bc7c229792
90
uttt.c
90
uttt.c
|
@ -135,9 +135,10 @@ int ut_move(struct ut_state *new_state, const struct ut_state *old_state, int ro
|
|||
return 0;
|
||||
}
|
||||
|
||||
void ut_drawBoard(const char *tiles, int offset, int stride, int iy, int ix, char winner, bool highlight)
|
||||
// TODO highlight last placed
|
||||
void ut_drawBoard(void (*mvch)(void*, int, int, char), void *arg, const char *tiles, int offset, int stride, int iy, int ix, char winner, bool highlight)
|
||||
{
|
||||
// 5x5 board display
|
||||
// 7x7 board display
|
||||
/*
|
||||
* X|X|X
|
||||
* -+-+-
|
||||
|
@ -145,32 +146,79 @@ void ut_drawBoard(const char *tiles, int offset, int stride, int iy, int ix, cha
|
|||
* -+-+-
|
||||
* X|X|X
|
||||
*/
|
||||
for(int r = 0; r < 3; r++)
|
||||
for(int r = 0; r < 3; r++) // tiles
|
||||
for(int c = 0; c < 3; c++)
|
||||
mvaddch(iy + 2 * r, ix + 2 * c, T(r, c) != '\0' ? T(r, c) : ' ');
|
||||
mvch(arg, iy + 2 * r, ix + 2 * c, T(r, c) != '\0' ? T(r, c) : ' ');
|
||||
//char info = winner != '\0' ? winner : highlight ? '*' : ' ';
|
||||
for(int r = 0; r < 3; r++)
|
||||
for(int r = 0; r < 3; r++) // |
|
||||
for(int c = 0; c < 2; c++)
|
||||
mvaddch(iy + 2 * r, ix + 2 * c + 1, winner != '\0' ? winner : '|');
|
||||
for(int r = 0; r < 2; r++)
|
||||
mvch(arg, iy + 2 * r, ix + 2 * c + 1, winner != '\0' ? winner : '|');
|
||||
for(int r = 0; r < 2; r++) // -
|
||||
for(int c = 0; c < 3; c++)
|
||||
mvaddch(iy + 2 * r + 1, ix + 2 * c, winner != '\0' ? winner : '-');
|
||||
for(int r = 0; r < 2; r++)
|
||||
mvch(arg, iy + 2 * r + 1, ix + 2 * c, winner != '\0' ? winner : '-');
|
||||
for(int r = 0; r < 2; r++) // +
|
||||
for(int c = 0; c < 2; c++)
|
||||
mvaddch(iy + 2 * r + 1, ix + 2 * c + 1, winner != '\0' ? winner : highlight ? '*' : '+');
|
||||
mvch(arg, iy + 2 * r + 1, ix + 2 * c + 1, winner != '\0' ? winner : highlight ? '*' : '+');
|
||||
for(int r = 0; r < 7; r++) // | boundary
|
||||
for(int c = 0; c < 2; c++)
|
||||
mvch(arg, iy + r, ix + 6 * c, ' ');
|
||||
for(int r = 0; r < 2; r++) // - boundary
|
||||
for(int c = 0; c < 7; c++)
|
||||
mvch(arg, iy + 6 * r, ix + c, ' ');
|
||||
}
|
||||
|
||||
void ut_draw(const struct ut_state *state)
|
||||
void ut_drawTiles(void (*mvch)(void*, int, int, char), void *arg, const struct ut_state *state)
|
||||
{
|
||||
for(int r = 0; r < 3; r++)
|
||||
for(int c = 0; c < 3; c++)
|
||||
ut_drawBoard((char *)state->tiles,
|
||||
27 * r + 3 * c, 9,
|
||||
7 * r + 1, 7 * c + 1,
|
||||
state->boards[r][c],
|
||||
state->playBoard == -1 || state->playBoard == 3 * r + c);
|
||||
//refresh();
|
||||
ut_drawBoard(mvch, arg, (char *)state->tiles,
|
||||
27 * r + 3 * c, 9,
|
||||
7 * r + 1, 7 * c + 1,
|
||||
state->boards[r][c],
|
||||
state->playBoard == -1 || state->playBoard == 3 * r + c);
|
||||
}
|
||||
void ut_drawBoards(void (*mvch)(void*, int, int, char), void *arg, const struct ut_state *state)
|
||||
{
|
||||
ut_drawBoard(mvch, arg, (char *)state->boards,
|
||||
0, 3,
|
||||
0, 0,
|
||||
'\0', false);
|
||||
}
|
||||
|
||||
void ut_cursmvch(void *arg, int y, int x, char c)
|
||||
{
|
||||
mvaddch(/*curs_line + */y, x, c);
|
||||
}
|
||||
#define DTILES_Y 21
|
||||
#define DTILES_X 21
|
||||
void ut_tmvch(void *arg, int y, int x, char c)
|
||||
{
|
||||
((char (*)[DTILES_X])arg)[y][x] = c;
|
||||
}
|
||||
#define DBOARDS_Y 7
|
||||
#define DBOARDS_X 7
|
||||
void ut_bmvch(void *arg, int y, int x, char c)
|
||||
{
|
||||
((char (*)[DBOARDS_X])arg)[y][x] = c;
|
||||
}
|
||||
|
||||
void ut_cursdraw(const struct ut_state *state)
|
||||
{
|
||||
ut_cursprintf(fd, "Turn: %c Play board: %d\n", (int)state->player, state->playBoard);
|
||||
ut_drawTiles(ut_cursmvch, NULL, state);
|
||||
//ut_drawBoards(ut_cursmvch, NULL, state);
|
||||
|
||||
}
|
||||
void ut_sockdraw(const struct ut_state *state, int fd)
|
||||
{
|
||||
ut_dprintf(fd, "| Turn: %c Play board: %d\n", (int)state->player, state->playBoard);
|
||||
char dtiles[DTILES_Y][DTILES_X];
|
||||
ut_drawTiles(ut_tmvch, dtiles, state);
|
||||
for(int r = 0; r < DTILES_Y; r++)
|
||||
{
|
||||
ut_dprintf(fd, "| %.*s\n", DTILES_X, dtiles[r]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int ut_click(const struct ut_state *state, int *r, int *c)
|
||||
{
|
||||
|
@ -264,8 +312,8 @@ int ut_click(const struct ut_state *state, int *r, int *c)
|
|||
#undef P
|
||||
}
|
||||
|
||||
int info_line; // set this to 21 and reset it on erase TODO
|
||||
void ut_info(const char *str, int n)
|
||||
int curs_line; // set this to 21 and reset it on erase TODO - use this as an offset rather
|
||||
void ut_cursprint(const char *str, int n)
|
||||
{
|
||||
mvaddnstr(info_line, 0, str, n);
|
||||
// info_line++; // depends on str not containing newlines
|
||||
|
@ -389,7 +437,7 @@ int ut_cursprintf(const char *restrict format, ...)
|
|||
int n = vsnprintf(line, MAX_LINE, format, ap);
|
||||
va_end(ap);
|
||||
if(n < 0 || n > MAX_LINE - 1) {return -1;}
|
||||
ut_info(line, n);
|
||||
ut_cursprint(line, n);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
|
読み込み中…
新しいイシューから参照