回答編集履歴
3
mm_func を直接埋め込み等
answer
CHANGED
@@ -19,12 +19,11 @@
|
|
19
19
|
#include <ncurses.h>
|
20
20
|
#endif
|
21
21
|
|
22
|
-
|
22
|
+
#define BOARD_XOFF 2
|
23
|
-
|
23
|
+
#define BOARD_YOFF 1
|
24
|
-
const char *SPACE_MARK = " ";
|
25
|
-
const char *MOVABLE_MARK = "〇";
|
26
24
|
|
27
|
-
#define
|
25
|
+
#define lengthof(array) (sizeof(array)/sizeof((array)[0]))
|
26
|
+
#define dirsign(side) ((side)==1?-1:(side)==2?1:0)
|
28
27
|
|
29
28
|
void init() {
|
30
29
|
setlocale(LC_ALL, ""); //日本語の化け対策
|
@@ -40,11 +39,11 @@
|
|
40
39
|
|
41
40
|
start_color();
|
42
41
|
init_pair(1, COLOR_BLUE, COLOR_BLACK);
|
43
|
-
init_pair(2, COLOR_RED, COLOR_BLACK);
|
42
|
+
//init_pair(2, COLOR_RED, COLOR_BLACK);
|
44
43
|
init_pair(3, COLOR_MAGENTA, COLOR_BLACK);
|
45
|
-
init_pair(4, COLOR_GREEN, COLOR_BLACK);
|
44
|
+
//init_pair(4, COLOR_GREEN, COLOR_BLACK);
|
46
45
|
init_pair(5, COLOR_CYAN, COLOR_BLACK);
|
47
|
-
init_pair(6, COLOR_YELLOW, COLOR_BLACK);
|
46
|
+
//init_pair(6, COLOR_YELLOW, COLOR_BLACK);
|
48
47
|
init_pair(7, COLOR_WHITE, COLOR_BLACK);
|
49
48
|
bkgd(COLOR_PAIR(7));
|
50
49
|
}
|
@@ -66,19 +65,21 @@
|
|
66
65
|
for(int j=0; j<9; ++j) addstr("--+");
|
67
66
|
if(i >= 9) break;
|
68
67
|
mvaddstr(y++, BOARD_XOFF, "|");
|
69
|
-
for(int j=0; j<9; ++j) addstr("
|
68
|
+
for(int j=0; j<9; ++j) addstr(" |");
|
70
69
|
addstr(r[i]);
|
71
70
|
}
|
72
71
|
}
|
73
72
|
|
73
|
+
struct _game;
|
74
|
+
|
74
75
|
typedef struct {
|
75
76
|
char *face;
|
76
|
-
int
|
77
|
+
int (*mm_func)(struct _game*,int,int);
|
77
78
|
int promoted;
|
78
79
|
int original;
|
79
80
|
} PIECE;
|
80
81
|
|
81
|
-
typedef struct {
|
82
|
+
typedef struct _game {
|
82
83
|
const PIECE *piece[9][9];
|
83
84
|
int side[9][9];
|
84
85
|
int movable[9][9];
|
@@ -88,7 +89,7 @@
|
|
88
89
|
|
89
90
|
const char *get_face(GAME *game, int y, int x) {
|
90
91
|
if(game->piece[y][x]) return game->piece[y][x]->face;
|
91
|
-
return game->movable[y][x] ?
|
92
|
+
return game->movable[y][x] ? "〇" : " ";
|
92
93
|
}
|
93
94
|
|
94
95
|
const int COLOR[] = { 7, 5, 3 };
|
@@ -99,15 +100,11 @@
|
|
99
100
|
COLOR_PAIR(COLOR[game->side[y][x]]); //陣営別色
|
100
101
|
}
|
101
102
|
|
102
|
-
void print_piece(GAME *game, int y, int x) {
|
103
|
-
attrset(get_attr(game,y,x));
|
104
|
-
mvaddstr(BOARD_YOFF+y*2+2, BOARD_XOFF+x*3+1, get_face(game,y,x));
|
105
|
-
}
|
106
|
-
|
107
103
|
void print_game(GAME *game) {
|
108
|
-
for(int
|
104
|
+
for(int y=0, yy=BOARD_YOFF+2; y<9; ++y, yy+=2) {
|
109
|
-
for(int
|
105
|
+
for(int x=0, xx=BOARD_XOFF+1; x<9; ++x, xx+=3) {
|
110
|
-
|
106
|
+
attrset(get_attr(game,y,x));
|
107
|
+
mvaddstr(yy, xx, get_face(game,y,x));
|
111
108
|
}
|
112
109
|
}
|
113
110
|
}
|
@@ -118,12 +115,12 @@
|
|
118
115
|
|
119
116
|
int mm_pattern(GAME *game, int y, int x, const int *d, int size) {
|
120
117
|
int side = game->side[y][x];
|
121
|
-
int ds = side
|
118
|
+
int ds = dirsign(side);
|
122
119
|
int count = 0;
|
123
120
|
for(int i=0; i<size; i+=2) {
|
124
121
|
int yy = y + d[i] * ds;
|
125
122
|
int xx = x + d[i+1] * ds;
|
126
|
-
if(!on_board(yy,
|
123
|
+
if(!on_board(yy,xx) || game->side[yy][xx]==side) continue;
|
127
124
|
game->movable[yy][xx] = 1;
|
128
125
|
++count;
|
129
126
|
}
|
@@ -132,12 +129,12 @@
|
|
132
129
|
|
133
130
|
int mm_line(GAME *game, int y, int x, int dy, int dx) {
|
134
131
|
int side = game->side[y][x];
|
135
|
-
int ds = side
|
132
|
+
int ds = dirsign(side);
|
136
133
|
int count = 0;
|
137
134
|
while(1) {
|
138
135
|
y += dy * ds;
|
139
136
|
x += dx * ds;
|
140
|
-
if(!on_board(y,
|
137
|
+
if(!on_board(y,x) || game->side[y][x]==side) break;
|
141
138
|
game->movable[y][x] = 1;
|
142
139
|
++count;
|
143
140
|
if(game->side[y][x]) break;
|
@@ -149,31 +146,31 @@
|
|
149
146
|
//王/玉
|
150
147
|
int mm_0(GAME *game, int y, int x) {
|
151
148
|
const int d[] = { 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,-1, -1,0, -1,1 }; //8方向
|
152
|
-
return mm_pattern(game, y, x, d,
|
149
|
+
return mm_pattern(game, y, x, d, lengthof(d));
|
153
150
|
}
|
154
151
|
//金
|
155
152
|
int mm_1(GAME *game, int y, int x) {
|
156
153
|
const int d[] = { 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,0 }; //斜め後ろ以外
|
157
|
-
return mm_pattern(game, y, x, d,
|
154
|
+
return mm_pattern(game, y, x, d, lengthof(d));
|
158
155
|
}
|
159
156
|
//銀
|
160
157
|
int mm_2(GAME *game, int y, int x) {
|
161
158
|
const int d[] = { 1,1, 1,0, 1,-1, -1,-1, -1,1 }; //横後ろ以外
|
162
|
-
return mm_pattern(game, y, x, d,
|
159
|
+
return mm_pattern(game, y, x, d, lengthof(d));
|
163
160
|
}
|
164
161
|
//桂
|
165
162
|
int mm_3(GAME *game, int y, int x) {
|
166
163
|
const int d[] = { 2,1, 2,-1 }; //二つ前の左右
|
167
|
-
return mm_pattern(game, y, x, d,
|
164
|
+
return mm_pattern(game, y, x, d, lengthof(d));
|
168
165
|
}
|
169
166
|
//香
|
170
167
|
int mm_4(GAME *game, int y, int x) {
|
171
168
|
return mm_line(game, y, x, 1, 0);
|
172
169
|
}
|
173
170
|
const int DIR_STRAIGHT[] = { 0,1, 1,0, 0,-1, -1,0 }; //前後左右
|
174
|
-
const int DIR_STRAIGHT_SIZE =
|
171
|
+
const int DIR_STRAIGHT_SIZE = lengthof(DIR_STRAIGHT);
|
175
172
|
const int DIR_DIAGONAL[] = { 1,1, 1,-1, -1,-1, -1,1 }; //斜め
|
176
|
-
const int DIR_DIAGONAL_SIZE =
|
173
|
+
const int DIR_DIAGONAL_SIZE = lengthof(DIR_DIAGONAL);
|
177
174
|
//角
|
178
175
|
int mm_5(GAME *game, int y, int x) {
|
179
176
|
int count = 0;
|
@@ -193,8 +190,8 @@
|
|
193
190
|
//歩
|
194
191
|
int mm_7(GAME *game, int y, int x) {
|
195
192
|
int side = game->side[y][x];
|
196
|
-
y += side
|
193
|
+
y += dirsign(side);
|
197
|
-
if(!on_board(y, x) || game->side[y][x]
|
194
|
+
if(!on_board(y, x) || game->side[y][x]==side) return 0;
|
198
195
|
game->movable[y][x] = 1;
|
199
196
|
return 1;
|
200
197
|
}
|
@@ -209,27 +206,22 @@
|
|
209
206
|
mm_pattern(game, y, x, DIR_DIAGONAL, DIR_DIAGONAL_SIZE);
|
210
207
|
}
|
211
208
|
|
212
|
-
//marking_movable functions Array
|
213
|
-
const int (*mm_func[])(GAME*,int,int) = {
|
214
|
-
mm_0, mm_1, mm_2, mm_3, mm_4, mm_5, mm_6, mm_7, mm_8, mm_9
|
215
|
-
};
|
216
|
-
|
217
209
|
const PIECE PIECES[] = {
|
218
|
-
{ "王",
|
210
|
+
{ "王", mm_0, -1, -1 },
|
219
|
-
{ "玉",
|
211
|
+
{ "玉", mm_0, -1, -1 },
|
220
|
-
{ "金",
|
212
|
+
{ "金", mm_1, -1, 2 },
|
221
|
-
{ "銀",
|
213
|
+
{ "銀", mm_2, 9, 3 },
|
222
|
-
{ "桂",
|
214
|
+
{ "桂", mm_3, 10, 4 },
|
223
|
-
{ "香",
|
215
|
+
{ "香", mm_4, 11, 5 },
|
224
|
-
{ "角",
|
216
|
+
{ "角", mm_5, 12, 6 },
|
225
|
-
{ "飛",
|
217
|
+
{ "飛", mm_6, 13, 7 },
|
226
|
-
{ "歩",
|
218
|
+
{ "歩", mm_7, 14, 8 },
|
227
|
-
{ "き",
|
219
|
+
{ "き", mm_1, -1, 3 },
|
228
|
-
{ "き",
|
220
|
+
{ "き", mm_1, -1, 4 },
|
229
|
-
{ "き",
|
221
|
+
{ "き", mm_1, -1, 5 },
|
230
|
-
{ "馬",
|
222
|
+
{ "馬", mm_8, -1, 6 },
|
231
|
-
{ "龍",
|
223
|
+
{ "龍", mm_9, -1, 7 },
|
232
|
-
{ "と",
|
224
|
+
{ "と", mm_1, -1, 8 },
|
233
225
|
};
|
234
226
|
|
235
227
|
const int INIT_PIECES[] = {
|
@@ -242,19 +234,24 @@
|
|
242
234
|
8,0,5, 8,1,4, 8,2,3, 8,3,2, 8,4,0, 8,5,2, 8,6,3, 8,7,4, 8,8,5,
|
243
235
|
};
|
244
236
|
|
237
|
+
void clear_select(GAME *game) {
|
238
|
+
memset(game->movable, 0, sizeof(game->movable));
|
239
|
+
game->sy = -1;
|
240
|
+
game->sx = -1;
|
241
|
+
}
|
242
|
+
|
245
243
|
void init_game(GAME *game) {
|
246
244
|
memset(game, 0, sizeof(GAME));
|
247
|
-
for(int i=0; i<
|
245
|
+
for(int i=0; i<lengthof(INIT_PIECES); ) {
|
248
246
|
int y = INIT_PIECES[i++];
|
249
247
|
int x = INIT_PIECES[i++];
|
250
248
|
int j = INIT_PIECES[i++];
|
251
249
|
game->piece[y][x] = &PIECES[j];
|
252
250
|
game->side[y][x] = y<=2 ? 2 : 1;
|
253
251
|
}
|
252
|
+
clear_select(game);
|
254
253
|
game->cx = 4;
|
255
254
|
game->cy = 8;
|
256
|
-
game->sx = -1; //未選択
|
257
|
-
game->sy = -1;
|
258
255
|
}
|
259
256
|
|
260
257
|
void move_cursor(GAME *game, int y, int x) {
|
@@ -263,19 +260,12 @@
|
|
263
260
|
print_game(game);
|
264
261
|
}
|
265
262
|
|
266
|
-
void clear_select(GAME *game) {
|
267
|
-
memset(game->movable, 0, sizeof(game->movable));
|
268
|
-
game->sy = -1;
|
269
|
-
game->sx = -1;
|
270
|
-
}
|
271
|
-
|
272
263
|
void select_piece(GAME *game) {
|
273
|
-
int cancel = game->cy
|
264
|
+
int cancel = game->cy==game->sy && game->cx==game->sx;
|
274
265
|
clear_select(game);
|
275
266
|
if(!cancel) {
|
276
|
-
int y = game->cy;
|
267
|
+
int y = game->cy, x = game->cx;
|
277
|
-
int x = game->cx;
|
278
|
-
if((*
|
268
|
+
if((*game->piece[y][x]->mm_func)(game,y,x) > 0) {
|
279
269
|
game->sy = y;
|
280
270
|
game->sx = x;
|
281
271
|
}
|
@@ -305,7 +295,7 @@
|
|
305
295
|
refresh();
|
306
296
|
|
307
297
|
int turn = 1;
|
308
|
-
for(int key; (key=getch())
|
298
|
+
for(int key; (key=getch())!='q'; usleep(200)) {
|
309
299
|
int y = game.cy, x = game.cx;
|
310
300
|
switch(key) {
|
311
301
|
case KEY_UP: if(y > 0) move_cursor(&game, y-1, x); break;
|
2
インデントとか…
answer
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
void init() {
|
30
30
|
setlocale(LC_ALL, ""); //日本語の化け対策
|
31
31
|
#ifdef PDCURSES
|
32
|
-
|
32
|
+
SetConsoleOutputCP(CP_UTF8);
|
33
33
|
#endif
|
34
34
|
initscr();
|
35
35
|
noecho();
|
@@ -64,14 +64,14 @@
|
|
64
64
|
for(int i=0; ; ++i) {
|
65
65
|
mvaddstr(y++, BOARD_XOFF, "+");
|
66
66
|
for(int j=0; j<9; ++j) addstr("--+");
|
67
|
-
|
67
|
+
if(i >= 9) break;
|
68
68
|
mvaddstr(y++, BOARD_XOFF, "|");
|
69
69
|
for(int j=0; j<9; ++j) addstr(" |");
|
70
70
|
addstr(r[i]);
|
71
71
|
}
|
72
72
|
}
|
73
73
|
|
74
|
-
typedef struct
|
74
|
+
typedef struct {
|
75
75
|
char *face;
|
76
76
|
int mm_no; //marking_movable functions array index
|
77
77
|
int promoted;
|
@@ -258,10 +258,9 @@
|
|
258
258
|
}
|
259
259
|
|
260
260
|
void move_cursor(GAME *game, int y, int x) {
|
261
|
-
if(game->
|
261
|
+
if(game->cy == y && game->cx == x) return;
|
262
|
-
|
262
|
+
game->cy = y; game->cx = x;
|
263
|
-
|
263
|
+
print_game(game);
|
264
|
-
}
|
265
264
|
}
|
266
265
|
|
267
266
|
void clear_select(GAME *game) {
|
@@ -272,11 +271,11 @@
|
|
272
271
|
|
273
272
|
void select_piece(GAME *game) {
|
274
273
|
int cancel = game->cy == game->sy && game->cx == game->sx;
|
275
|
-
|
274
|
+
clear_select(game);
|
276
275
|
if(!cancel) {
|
277
276
|
int y = game->cy;
|
278
277
|
int x = game->cx;
|
279
|
-
if((*mm_func[game->piece[y][x]->mm_no])(game,
|
278
|
+
if((*mm_func[game->piece[y][x]->mm_no])(game,y,x) > 0) {
|
280
279
|
game->sy = y;
|
281
280
|
game->sx = x;
|
282
281
|
}
|
@@ -291,7 +290,7 @@
|
|
291
290
|
game->piece[sy][sx] = NULL;
|
292
291
|
game->side[cy][cx] = game->side[sy][sx];
|
293
292
|
game->side[sy][sx] = 0;
|
294
|
-
|
293
|
+
clear_select(game);
|
295
294
|
print_game(game);
|
296
295
|
}
|
297
296
|
|
1
バグ修正, PDCURSES対応(?), 一部見直し
answer
CHANGED
@@ -4,20 +4,33 @@
|
|
4
4
|
|
5
5
|
test.c
|
6
6
|
```c
|
7
|
+
//#define PDCURSES //PDCursesを使う場合はコレを有効に
|
8
|
+
|
7
9
|
#include <stdio.h>
|
8
10
|
#include <unistd.h>
|
9
|
-
#include <ncurses.h>
|
10
11
|
#include <string.h>
|
11
12
|
#include <time.h>
|
12
13
|
#include <locale.h>
|
13
14
|
|
15
|
+
#ifdef PDCURSES
|
16
|
+
#include <pdcurses.h>
|
17
|
+
#include <windows.h>
|
18
|
+
#else
|
19
|
+
#include <ncurses.h>
|
20
|
+
#endif
|
21
|
+
|
14
22
|
const int BOARD_XOFF = 1;
|
15
23
|
const int BOARD_YOFF = 0;
|
16
24
|
const char *SPACE_MARK = " ";
|
17
25
|
const char *MOVABLE_MARK = "〇";
|
18
26
|
|
27
|
+
#define ARRSIZEOF(a) (sizeof(a)/sizeof(a[0]))
|
28
|
+
|
19
29
|
void init() {
|
20
30
|
setlocale(LC_ALL, ""); //日本語の化け対策
|
31
|
+
#ifdef PDCURSES
|
32
|
+
SetConsoleOutputCP(CP_UTF8);
|
33
|
+
#endif
|
21
34
|
initscr();
|
22
35
|
noecho();
|
23
36
|
cbreak();
|
@@ -43,23 +56,19 @@
|
|
43
56
|
}
|
44
57
|
|
45
58
|
void print_surface() {
|
46
|
-
const char *c[] = {"1","2","3","4","5","6","7","8","9"};
|
47
59
|
const char *r[] = {"一","二","三","四","五","六","七","八","九"};
|
48
60
|
|
49
61
|
attrset(COLOR_PAIR(1));
|
50
|
-
int y
|
62
|
+
int y = BOARD_YOFF;
|
51
|
-
|
63
|
+
mvaddstr(y++, BOARD_XOFF+1, "9 8 7 6 5 4 3 2 1");
|
52
|
-
for(int i=0;
|
64
|
+
for(int i=0; ; ++i) {
|
53
|
-
++
|
65
|
+
mvaddstr(y++, BOARD_XOFF, "+");
|
54
|
-
for(int j=0; j<9; ++j
|
66
|
+
for(int j=0; j<9; ++j) addstr("--+");
|
67
|
+
if(i >= 9) break;
|
55
|
-
mvaddstr(y,
|
68
|
+
mvaddstr(y++, BOARD_XOFF, "|");
|
56
|
-
++y, x=BOARD_XOFF;
|
57
|
-
for(int j=0; j<9; ++j
|
69
|
+
for(int j=0; j<9; ++j) addstr(" |");
|
58
|
-
|
70
|
+
addstr(r[i]);
|
59
71
|
}
|
60
|
-
++y, x=BOARD_XOFF;
|
61
|
-
for(int j=0; j<9; ++j, x+=3) mvaddstr(y, x, "+--");
|
62
|
-
mvaddstr(y, x, "+");
|
63
72
|
}
|
64
73
|
|
65
74
|
typedef struct _piece {
|
@@ -140,31 +149,31 @@
|
|
140
149
|
//王/玉
|
141
150
|
int mm_0(GAME *game, int y, int x) {
|
142
151
|
const int d[] = { 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,-1, -1,0, -1,1 }; //8方向
|
143
|
-
return mm_pattern(game, y, x, d,
|
152
|
+
return mm_pattern(game, y, x, d, ARRSIZEOF(d));
|
144
153
|
}
|
145
154
|
//金
|
146
155
|
int mm_1(GAME *game, int y, int x) {
|
147
156
|
const int d[] = { 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,0 }; //斜め後ろ以外
|
148
|
-
return mm_pattern(game, y, x, d,
|
157
|
+
return mm_pattern(game, y, x, d, ARRSIZEOF(d));
|
149
158
|
}
|
150
159
|
//銀
|
151
160
|
int mm_2(GAME *game, int y, int x) {
|
152
161
|
const int d[] = { 1,1, 1,0, 1,-1, -1,-1, -1,1 }; //横後ろ以外
|
153
|
-
return mm_pattern(game, y, x, d,
|
162
|
+
return mm_pattern(game, y, x, d, ARRSIZEOF(d));
|
154
163
|
}
|
155
164
|
//桂
|
156
165
|
int mm_3(GAME *game, int y, int x) {
|
157
166
|
const int d[] = { 2,1, 2,-1 }; //二つ前の左右
|
158
|
-
return mm_pattern(game, y, x, d,
|
167
|
+
return mm_pattern(game, y, x, d, ARRSIZEOF(d));
|
159
168
|
}
|
160
169
|
//香
|
161
170
|
int mm_4(GAME *game, int y, int x) {
|
162
171
|
return mm_line(game, y, x, 1, 0);
|
163
172
|
}
|
164
173
|
const int DIR_STRAIGHT[] = { 0,1, 1,0, 0,-1, -1,0 }; //前後左右
|
165
|
-
const int DIR_STRAIGHT_SIZE =
|
174
|
+
const int DIR_STRAIGHT_SIZE = ARRSIZEOF(DIR_STRAIGHT);
|
166
175
|
const int DIR_DIAGONAL[] = { 1,1, 1,-1, -1,-1, -1,1 }; //斜め
|
167
|
-
const int DIR_DIAGONAL_SIZE =
|
176
|
+
const int DIR_DIAGONAL_SIZE = ARRSIZEOF(DIR_DIAGONAL);
|
168
177
|
//角
|
169
178
|
int mm_5(GAME *game, int y, int x) {
|
170
179
|
int count = 0;
|
@@ -192,12 +201,12 @@
|
|
192
201
|
//馬
|
193
202
|
int mm_8(GAME *game, int y, int x) {
|
194
203
|
return mm_5(game, y, x) +
|
195
|
-
mm_pattern(game, y, x,
|
204
|
+
mm_pattern(game, y, x, DIR_STRAIGHT, DIR_STRAIGHT_SIZE);
|
196
205
|
}
|
197
206
|
//龍
|
198
207
|
int mm_9(GAME *game, int y, int x) {
|
199
208
|
return mm_6(game, y, x) +
|
200
|
-
mm_pattern(game, y, x,
|
209
|
+
mm_pattern(game, y, x, DIR_DIAGONAL, DIR_DIAGONAL_SIZE);
|
201
210
|
}
|
202
211
|
|
203
212
|
//marking_movable functions Array
|
@@ -235,7 +244,7 @@
|
|
235
244
|
|
236
245
|
void init_game(GAME *game) {
|
237
246
|
memset(game, 0, sizeof(GAME));
|
238
|
-
for(int i=0; i<
|
247
|
+
for(int i=0; i<ARRSIZEOF(INIT_PIECES); ) {
|
239
248
|
int y = INIT_PIECES[i++];
|
240
249
|
int x = INIT_PIECES[i++];
|
241
250
|
int j = INIT_PIECES[i++];
|
@@ -255,16 +264,19 @@
|
|
255
264
|
}
|
256
265
|
}
|
257
266
|
|
258
|
-
void
|
267
|
+
void clear_select(GAME *game) {
|
259
|
-
int endofselection = game->cy == game->sy && game->cx == game->sx;
|
260
268
|
memset(game->movable, 0, sizeof(game->movable));
|
261
269
|
game->sy = -1;
|
262
270
|
game->sx = -1;
|
271
|
+
}
|
272
|
+
|
273
|
+
void select_piece(GAME *game) {
|
274
|
+
int cancel = game->cy == game->sy && game->cx == game->sx;
|
275
|
+
clear_select(game);
|
263
|
-
if(!
|
276
|
+
if(!cancel) {
|
264
277
|
int y = game->cy;
|
265
278
|
int x = game->cx;
|
266
|
-
|
279
|
+
if((*mm_func[game->piece[y][x]->mm_no])(game, y, x) > 0) {
|
267
|
-
if(count > 0) {
|
268
280
|
game->sy = y;
|
269
281
|
game->sx = x;
|
270
282
|
}
|
@@ -279,9 +291,7 @@
|
|
279
291
|
game->piece[sy][sx] = NULL;
|
280
292
|
game->side[cy][cx] = game->side[sy][sx];
|
281
293
|
game->side[sy][sx] = 0;
|
282
|
-
memset(game->movable, 0, sizeof(game->movable));
|
283
|
-
|
294
|
+
clear_select(game);
|
284
|
-
game->sx = -1;
|
285
295
|
print_game(game);
|
286
296
|
}
|
287
297
|
|
@@ -295,7 +305,7 @@
|
|
295
305
|
print_game(&game);
|
296
306
|
refresh();
|
297
307
|
|
298
|
-
int
|
308
|
+
int turn = 1;
|
299
309
|
for(int key; (key=getch()) != 'q'; usleep(200)) {
|
300
310
|
int y = game.cy, x = game.cx;
|
301
311
|
switch(key) {
|
@@ -303,7 +313,7 @@
|
|
303
313
|
case KEY_DOWN: if(y < 8) move_cursor(&game, y+1, x); break;
|
304
314
|
case KEY_LEFT: if(x > 0) move_cursor(&game, y, x-1); break;
|
305
315
|
case KEY_RIGHT: if(x < 8) move_cursor(&game, y, x+1); break;
|
306
|
-
case ' ': if(game.side[y][x] ==
|
316
|
+
case ' ': if(game.side[y][x] == turn) select_piece(&game);
|
307
317
|
else if(game.movable[y][x]) move_piece(&game);
|
308
318
|
break;
|
309
319
|
}
|