1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#include <stdio.h>
#include <curses.h>
#include "board.h"
void draw_board(char* board, WINDOW* win) {
wmove(win, 0, 0);
for (int row = 0; row < BOARD_ROW_BYTES; row++) {
for (int i = 0; i < BOARD_ROW_BYTES; i++) {
int index = BOARD_ROW_BYTES * row + i;
if (board[index] == EMPTY && is_center_index(index)) waddch(win, '*');
else waddch(win, board[index]);
}
}
}
int main() {
/* initialize curses */
initscr();
cbreak();
/* create board window */
WINDOW* board_box = newwin(BOARD_ROW_BYTES + 2, BOARD_ROW_BYTES + 2, 0, 0);
WINDOW* board_win = derwin(board_box, BOARD_ROW_BYTES, BOARD_ROW_BYTES, 1, 1);
box(board_box, 0, 0);
wrefresh(board_box);
/* create structures window */
WINDOW* structures_box = newwin(BOARD_ROW_BYTES + 2, BOARD_ROW_BYTES + 2, 0, BOARD_ROW_BYTES + 3);
WINDOW* structures_win = derwin(structures_box, BOARD_ROW_BYTES, BOARD_ROW_BYTES, 1, 1);
box(structures_box, 0, 0);
wrefresh(structures_box);
/* create input window */
WINDOW* input_box = newwin(3, 22, BOARD_ROW_BYTES + 3, 0);
WINDOW* input_win = derwin(input_box, 1, 20, 1, 1);
box(input_box, 0, 0);
wrefresh(input_box);
/* create messages window */
WINDOW* messages_box = newwin(40, 60, BOARD_ROW_BYTES + 6, 0);
WINDOW* messages_win = derwin(messages_box, 40 - 2, 60 - 2, 1, 1);
box(messages_box, 0, 0);
wrefresh(messages_box);
char board[BOARD_BYTES];
char structures[BOARD_BYTES];
initialize_board(board);
place_tile("RFRCR", translate_coordinate(24), board, 1);
/* main loop */
char tile[5];
char position[3];
while (1) {
/* prepare */
initialize_board(structures);
create_structure_mask(board, structures);
wclear(input_win);
/* draw onto the screen */
draw_board(board, board_win);
draw_board(structures, structures_win);
wrefresh(board_win);
wrefresh(structures_win);
/* user input */
box(input_box, 0, 0);
mvwaddstr(input_box, 0, 0, "Enter tile:");
wrefresh(input_box);
wgetstr(input_win, tile);
wclear(input_win);
if (tile[0] == 'q') break;
box(input_box, 0, 0);
mvwaddstr(input_box, 0, 0, "Enter position:");
wrefresh(input_box);
wgetstr(input_win, position);
int result = place_tile(tile, translate_coordinate(atoi(position)), board, 0);
if (result) wprintw(messages_win, "Placed tile %s at position %i\n", tile, atoi(position));
else wprintw(messages_win, "Could not place tile %s at position %i\n", tile, atoi(position));
wrefresh(messages_win);
}
endwin();
return 0;
}
|