fixing input and curses board - still broken

このコミットが含まれているのは:
woosh 2023-11-15 08:05:29 +00:00 committed by ninya9k
コミット b011990b5c
1個のファイルの変更8行の追加47行の削除

55
uttt.c
ファイルの表示

@ -183,17 +183,17 @@ void ut_drawBoard(void (*mvch)(void*, int, int, char), void *arg, const char *ti
*/
for(int r = 0; r < 3; r++) // tiles
for(int c = 0; c < 3; c++)
mvch(arg, iy + 2 * r, ix + 2 * c, T(r, c) != '\0' ? T(r, c) : ' ');
mvch(arg, iy + 2 * r + 1, ix + 2 * c + 1, T(r, c) != '\0' ? T(r, c) : ' ');
//char info = winner != '\0' ? winner : highlight ? '*' : ' ';
for(int r = 0; r < 3; r++) // |
for(int c = 0; c < 2; c++)
mvch(arg, iy + 2 * r, ix + 2 * c + 1, winner != '\0' ? winner : '|');
mvch(arg, iy + 2 * r + 1, ix + 2 * c + 1 + 1, winner != '\0' ? winner : '|');
for(int r = 0; r < 2; r++) // -
for(int c = 0; c < 3; c++)
mvch(arg, iy + 2 * r + 1, ix + 2 * c, winner != '\0' ? winner : '-');
mvch(arg, iy + 2 * r + 1 + 1, ix + 2 * c + 1, winner != '\0' ? winner : '-');
for(int r = 0; r < 2; r++) // +
for(int c = 0; c < 2; c++)
mvch(arg, iy + 2 * r + 1, ix + 2 * c + 1, winner != '\0' ? winner : highlight ? '*' : '+');
mvch(arg, iy + 2 * r + 1 + 1, ix + 2 * c + 1 + 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, ' ');
@ -209,7 +209,7 @@ void ut_drawTiles(void (*mvch)(void*, int, int, char), void *arg, const struct u
for(int c = 0; c < 3; c++)
ut_drawBoard(mvch, arg, (char *)state->tiles,
27 * r + 3 * c, 9,
7 * r + 1, 7 * c + 1,
7 * r, 7 * c,
state->boards[r][c],
state->playBoard == -1 || state->playBoard == 3 * r + c);
if(numbers)
@ -245,6 +245,7 @@ void ut_bmvch(void *arg, int y, int x, char c)
((char (*)[DBOARDS_X])arg)[y][x] = c;
}
#define DTILES_LINE 1
void ut_cursdraw(const struct ut_state *state)
{
ut_cursprintf("Turn: %c Play board: %d\n", (int)state->player, state->playBoard);
@ -354,7 +355,7 @@ int ut_cursgetpos(const struct ut_state *state, int *r, int *c)
*r = 3 * (*r / 3) + 1;
*c = 3 * (*c / 3) + 1;
}*/
move((7 * (*r / 3) + 1) + (2 * (*r % 3)),
move(DTILES_LINE + (7 * (*r / 3) + 1) + (2 * (*r % 3)),
(7 * (*c / 3) + 1) + (2 * (*c % 3)));
refresh();
switch(getch())
@ -362,6 +363,7 @@ int ut_cursgetpos(const struct ut_state *state, int *r, int *c)
case KEY_MOUSE:
if(getmouse(&event) == OK && (event.bstate & BUTTON1_CLICKED))
{
event.y -= DTILES_LINE;
if(event.y < 0 || event.y >= 21) {break;}
if(event.x < 0 || event.x >= 21) {break;}
*r = (event.y % 7 - 1) / 2 + 3 * (event.y / 7);
@ -695,47 +697,6 @@ void begin(void)
mousemask(BUTTON1_CLICKED, NULL);
}
/*int main(int argc, char *argv[]) {
signal(SIGINT, finish);
initscr();
keypad(stdscr, TRUE);
nonl(); // \r instead of \r\n
cbreak();
noecho();
mousemask(BUTTON1_CLICKED, NULL);
struct ut_state state = ut_initial;
while (true) {
int r, c, err;
erase();
ut_draw(&state);
char w = ut_winner((char *)state.boards, 0, 3);
if(w)
{
if(w == ' ')
{
mvaddstr(21, 0, "Draw!");
}
else
{
mvaddch(21, 0, w);
mvaddstr(21, 1, " Wins!");
}
mvaddstr(22, 0, "Press any key to exit.");
refresh();
mousemask(0, NULL);
getch();
break;
}
err = ut_click(&state, &r, &c);
if (err) {continue;}
err = ut_move(&state, &state, r, c);
if (err) {continue;}
}
finish(0);
return 0;
}*/
int main(int argc, char **argv) {
struct ut_state state = ut_initial;