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

質問編集履歴

3

変数

2019/08/22 02:48

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -297,4 +297,6 @@
297
297
  }
298
298
  と書いたんですが、うまくいきません。
299
299
 
300
- ```
300
+ ```
301
+
302
+ jimbeさんのプログラム正しかったです。キャラの移動を50倍してみると正しく機能していることがわかりました。

2

編集

2019/08/22 02:48

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -271,4 +271,30 @@
271
271
  return 0; // ソフトの終了
272
272
 
273
273
  }
274
+ ```
275
+ 編集
276
+ 入門書を見るなりしてjimbeさんから頂いたコードを正しく使おうとやっているのですが
277
+ どうもうまくいきません。
278
+ 条件文としては正しいと思うのですが
279
+ 右のキーが押される&右のマスが0という条件で
280
+ 写真[7]を表示するプログラムとして
281
+ ```
282
+ if (Key[KEY_INPUT_RIGHT] == 1)
283
+ {
284
+ if (idou[nx + 1][ny + 0] == 0)
285
+ { //移動しようとする先が空いていれば
286
+ //移動可能
287
+ nx = nx + 1; //移動
288
+ playerphoto = gh[7];
289
+ }
290
+
291
+ else {
292
+ // 移動不可能
293
+ playerphoto = gh[9];
294
+
295
+ }
296
+
297
+ }
298
+ と書いたんですが、うまくいきません。
299
+
274
300
  ```

1

編集

2019/08/22 01:53

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -151,4 +151,124 @@
151
151
  return 0; // ソフトの終了
152
152
 
153
153
  }
154
+ ```
155
+
156
+ 編集が遅くなりました。すいません。jimbeさんのプログラムをそのまま入れてみました。ですが、思うように動きませんでした。もしかしたら組み込む場所が違ったのかもしれません。
157
+ ```
158
+ #include "DxLib.h"
159
+
160
+
161
+
162
+ int Key[256]; // キーが押されているフレーム数を格納する
163
+
164
+ // キーの入力状態を更新する
165
+ int gpUpdateKey() {
166
+ char tmpKey[256]; // 現在のキーの入力状態を格納する
167
+ GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
168
+ for (int i = 0; i < 256; i++) {
169
+ if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
170
+ Key[i]++; // 加算
171
+ }
172
+ else { // 押されていなければ
173
+ Key[i] = 0; // 0にする
174
+ }
175
+ }
176
+ return 0;
177
+ }
178
+
179
+ // プログラムは WinMain から始まります
180
+ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
181
+ {
182
+ SetGraphMode(1600, 680, 32); // ウィンドウの大きさを指定
183
+ ChangeWindowMode(TRUE);
184
+
185
+ int playerphoto;
186
+ int nx=2, ny =2 ; // 最初のキャラのX座をdxとY座標をdyである。配列の真ん中の0を最初の座標としたため(2,2)となる
187
+
188
+ if (DxLib_Init() == -1) // DXライブラリ初期化処理
189
+ {
190
+ return -1; // エラーが起きたら直ちに終了
191
+ }
192
+
193
+
194
+
195
+ //1. 3x3マスの2次元配列
196
+ int idou[5][5] = {
197
+ {1,1,1,1,1 },
198
+ {1,0,0,0,1 },
199
+ {1,0,0,0,1 },
200
+ {1,0,0,0,1 },
201
+ {1,1,1,1,1 },
202
+ };
203
+
204
+
205
+ //DrawGraph(dx, dy, playerphoto, FALSE);
206
+
207
+
208
+
209
+
210
+
211
+ //グラフィックハンドル格納用配列
212
+ int gh[12];
213
+ LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);//画像読み込み
214
+
215
+
216
+ SetDrawScreen(DX_SCREEN_BACK);
217
+ while (ScreenFlip() == 0 && ProcessMessage() == 0 && gpUpdateKey() == 0) {
218
+ DrawGraph(nx, ny, gh[5], FALSE);// プレイヤーの画像を描画
219
+
220
+ // カーソルキーの右が押されている
221
+
222
+ if (Key[KEY_INPUT_RIGHT] == 1)
223
+ {
224
+
225
+ //①if (idou[ny + 1][nx + 1]) {nx==0,}//紙を読む nx==0でidou[nx + 1]がidou[1]の時移動可能にして、その座標に移動する、nx==1でidou[nx + 1]がidou[2]の時移動不可能と
226
+ //①のidou[ny + 1][nx + 1]を利用してif文で書きたいが、idou[ny + 1][nx + 1]を単体でidou[ny + 1]として使えるか?
227
+ if (idou[nx + 1][ny + 0] == 0) { //移動しようとする先が空いていれば
228
+ //移動可能
229
+ nx = nx + 1; //移動
230
+ playerphoto = gh[7];
231
+ }
232
+ else {
233
+ // 移動不可能
234
+ playerphoto = gh[9];
235
+ }
236
+
237
+ if (Key[KEY_INPUT_LEFT] == 1)
238
+ {
239
+ nx = nx - 1;
240
+ playerphoto = gh[2];
241
+ }
242
+
243
+ if (Key[KEY_INPUT_UP] == 1)
244
+ {
245
+ ny = ny + 1;
246
+ playerphoto = gh[4];
247
+ }
248
+ if (Key[KEY_INPUT_DOWN] == 1)
249
+ {
250
+ ny = ny - 1;
251
+ playerphoto = gh[3];
252
+ }
253
+
254
+ if (nx == 0 && ny == 0)
255
+ {
256
+
257
+ playerphoto = gh[7];
258
+ }
259
+
260
+ ScreenFlip();
261
+ // 画面をクリア
262
+ ClearDrawScreen();
263
+
264
+ DrawGraph(nx, ny, playerphoto, FALSE);
265
+
266
+ }
267
+ }
268
+
269
+ DxLib_End(); // DXライブラリ使用の終了処理
270
+
271
+ return 0; // ソフトの終了
272
+
273
+ }
154
274
  ```