質問するログイン新規登録

回答編集履歴

3

mm_func を直接埋め込み等

2025/10/06 08:40

投稿

jimbe
jimbe

スコア13415

answer CHANGED
@@ -19,12 +19,11 @@
19
19
  #include <ncurses.h>
20
20
  #endif
21
21
 
22
- const int BOARD_XOFF = 1;
22
+ #define BOARD_XOFF 2
23
- const int BOARD_YOFF = 0;
23
+ #define BOARD_YOFF 1
24
- const char *SPACE_MARK = " ";
25
- const char *MOVABLE_MARK = "〇";
26
24
 
27
- #define ARRSIZEOF(a) (sizeof(a)/sizeof(a[0]))
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 mm_no; //marking_movable functions array index
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] ? MOVABLE_MARK : SPACE_MARK;
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 i=0; i<9; ++i) {
104
+ for(int y=0, yy=BOARD_YOFF+2; y<9; ++y, yy+=2) {
109
- for(int j=0; j<9; ++j) {
105
+ for(int x=0, xx=BOARD_XOFF+1; x<9; ++x, xx+=3) {
110
- print_piece(game, i, j);
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==1 ? -1 : 1;
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, xx) || game->side[yy][xx]==side) continue;
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==1 ? -1 : 1;
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, x) || game->side[y][x] == side) break;
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, ARRSIZEOF(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, ARRSIZEOF(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, ARRSIZEOF(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, ARRSIZEOF(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 = ARRSIZEOF(DIR_STRAIGHT);
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 = ARRSIZEOF(DIR_DIAGONAL);
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==1 ? -1 : 1;
193
+ y += dirsign(side);
197
- if(!on_board(y, x) || game->side[y][x] == side) return 0;
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
- { "王", 0, -1, -1 },
210
+ { "王", mm_0, -1, -1 },
219
- { "玉", 0, -1, -1 },
211
+ { "玉", mm_0, -1, -1 },
220
- { "金", 1, -1, -1 },
212
+ { "金", mm_1, -1, 2 },
221
- { "銀", 2, 9, -1 },
213
+ { "銀", mm_2, 9, 3 },
222
- { "桂", 3, 10, -1 },
214
+ { "桂", mm_3, 10, 4 },
223
- { "香", 4, 11, -1 },
215
+ { "香", mm_4, 11, 5 },
224
- { "角", 5, 12, -1 },
216
+ { "角", mm_5, 12, 6 },
225
- { "飛", 6, 13, -1 },
217
+ { "飛", mm_6, 13, 7 },
226
- { "歩", 7, 14, -1 },
218
+ { "歩", mm_7, 14, 8 },
227
- { "き", 1, -1, 3 },
219
+ { "き", mm_1, -1, 3 },
228
- { "き", 1, -1, 4 },
220
+ { "き", mm_1, -1, 4 },
229
- { "き", 1, -1, 5 },
221
+ { "き", mm_1, -1, 5 },
230
- { "馬", 8, -1, 6 },
222
+ { "馬", mm_8, -1, 6 },
231
- { "龍", 9, -1, 7 },
223
+ { "龍", mm_9, -1, 7 },
232
- { "と", 1, -1, 8 },
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<ARRSIZEOF(INIT_PIECES); ) {
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 == game->sy && game->cx == game->sx;
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((*mm_func[game->piece[y][x]->mm_no])(game,y,x) > 0) {
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()) != 'q'; usleep(200)) {
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

インデントとか…

2025/10/04 16:49

投稿

jimbe
jimbe

スコア13415

answer CHANGED
@@ -29,7 +29,7 @@
29
29
  void init() {
30
30
  setlocale(LC_ALL, ""); //日本語の化け対策
31
31
  #ifdef PDCURSES
32
- SetConsoleOutputCP(CP_UTF8);
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
- if(i >= 9) break;
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 _piece {
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->cx != x || game->cy != y) {
261
+ if(game->cy == y && game->cx == x) return;
262
- game->cy = y; game->cx = x;
262
+ game->cy = y; game->cx = x;
263
- print_game(game);
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
- clear_select(game);
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, y, x) > 0) {
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
- clear_select(game);
293
+ clear_select(game);
295
294
  print_game(game);
296
295
  }
297
296
 

1

バグ修正, PDCURSES対応(?), 一部見直し

2025/10/04 16:36

投稿

jimbe
jimbe

スコア13415

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=BOARD_YOFF, x=BOARD_XOFF+1;
62
+ int y = BOARD_YOFF;
51
- for(int j=0; j<9; ++j, x+=3) mvaddstr(y, x, c[8-j]);
63
+ mvaddstr(y++, BOARD_XOFF+1, "9 8 7 6 5 4 3 2 1");
52
- for(int i=0; i<9; ++i) {
64
+ for(int i=0; ; ++i) {
53
- ++y, x=BOARD_XOFF;
65
+ mvaddstr(y++, BOARD_XOFF, "+");
54
- for(int j=0; j<9; ++j, x+=3) mvaddstr(y, x, "+--");
66
+ for(int j=0; j<9; ++j) addstr("--+");
67
+ if(i >= 9) break;
55
- mvaddstr(y, x, "+");
68
+ mvaddstr(y++, BOARD_XOFF, "|");
56
- ++y, x=BOARD_XOFF;
57
- for(int j=0; j<9; ++j, x+=3) mvaddstr(y, x, "| ");
69
+ for(int j=0; j<9; ++j) addstr(" |");
58
- mvprintw(y, x, "|%s", r[i]);
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, sizeof(d)/sizeof(int));
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, sizeof(d)/sizeof(int));
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, sizeof(d)/sizeof(int));
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, sizeof(d)/sizeof(int));
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 = sizeof(DIR_STRAIGHT)/sizeof(int);
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 = sizeof(DIR_DIAGONAL)/sizeof(int);
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, DIR_DIAGONAL, DIR_DIAGONAL_SIZE);
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, DIR_STRAIGHT, DIR_STRAIGHT_SIZE);
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<sizeof(INIT_PIECES)/sizeof(int); ) {
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 select_piece(GAME *game) {
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(!endofselection) {
276
+ if(!cancel) {
264
277
  int y = game->cy;
265
278
  int x = game->cx;
266
- int count = (*mm_func[game->piece[y][x]->mm_no])(game, y, x);
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
- game->sy = -1;
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 tern = 1;
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] == tern) select_piece(&game);
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
  }