回答編集履歴

1

追記

2020/03/26 12:03

投稿

otn
otn

スコア85964

test CHANGED
@@ -53,3 +53,191 @@
53
53
  など、全部駄目です。
54
54
 
55
55
  ゼロから書き直しというほど駄目じゃないので、部分修正でなんとかなります。
56
+
57
+
58
+
59
+ #追記
60
+
61
+ そろそろ自分で改善できたかと思うので、例を書いておきます。
62
+
63
+ キー入力が無い場合は0.1秒待つようにしました。
64
+
65
+ ```C
66
+
67
+ /* for BCC32 */
68
+
69
+ #include <stdio.h>
70
+
71
+ #include <conio.h>
72
+
73
+ #include <windows.h>
74
+
75
+
76
+
77
+ #define KEYUP 0x48
78
+
79
+ #define KEYDOWN 0x50
80
+
81
+ #define KEYRIGHT 0x4D
82
+
83
+ #define KEYLEFT 0x4B
84
+
85
+ #define KEYESC 0x1B
86
+
87
+
88
+
89
+ #define XMAX 19
90
+
91
+ #define YMAX 19
92
+
93
+ #define XMIN 0
94
+
95
+ #define YMIN 0
96
+
97
+ #define TRUE 1
98
+
99
+ #define FALSE 0
100
+
101
+
102
+
103
+ int x;
104
+
105
+ int y;
106
+
107
+ int pos[YMAX][XMAX];
108
+
109
+
110
+
111
+ int key(void){
112
+
113
+ if(kbhit()){
114
+
115
+ switch(getch()){
116
+
117
+ case KEYUP:
118
+
119
+ if(y-1>=YMIN){
120
+
121
+ pos[y][x] = FALSE;
122
+
123
+ y = y-1;
124
+
125
+ pos[y][x] = TRUE;
126
+
127
+ }
128
+
129
+ break;
130
+
131
+ case KEYDOWN:
132
+
133
+ if(y+1<YMAX){
134
+
135
+ pos[y][x] = FALSE;
136
+
137
+ y = y+1;
138
+
139
+ pos[y][x] = TRUE;
140
+
141
+ }
142
+
143
+ break;
144
+
145
+ case KEYLEFT:
146
+
147
+ if(x-1>=XMIN){
148
+
149
+ pos[y][x] = FALSE;
150
+
151
+ x = x-1;
152
+
153
+ pos[y][x] = TRUE;
154
+
155
+ }
156
+
157
+ break;
158
+
159
+ case KEYRIGHT:
160
+
161
+ if(x+1<XMAX){
162
+
163
+ pos[y][x] = FALSE;
164
+
165
+ x = x+1;
166
+
167
+ pos[y][x] = TRUE;
168
+
169
+ }
170
+
171
+ break;
172
+
173
+ case KEYESC:
174
+
175
+ return TRUE;
176
+
177
+ default:
178
+
179
+ break;
180
+
181
+ }
182
+
183
+ }else{
184
+
185
+ Sleep(100);
186
+
187
+ }
188
+
189
+ return FALSE;
190
+
191
+ }
192
+
193
+
194
+
195
+ void disp(void){
196
+
197
+ int xi,yi;
198
+
199
+ system("cls");
200
+
201
+ for(yi=YMIN; yi<YMAX; yi++){
202
+
203
+ for(xi=XMIN; xi<XMAX; xi++){
204
+
205
+ putchar(pos[yi][xi] ? 'X' : ' ');
206
+
207
+ }
208
+
209
+ putchar('\n');
210
+
211
+ }
212
+
213
+ }
214
+
215
+
216
+
217
+ int main(void){
218
+
219
+ x = XMAX/2;
220
+
221
+ y = YMAX/2;
222
+
223
+ pos[y][x] = TRUE;
224
+
225
+ while(1){
226
+
227
+ if(key()){
228
+
229
+ break;
230
+
231
+ }else{
232
+
233
+ disp();
234
+
235
+ }
236
+
237
+ }
238
+
239
+ return 0;
240
+
241
+ }
242
+
243
+ ```