質問編集履歴

4

ふじょい

2023/04/30 15:01

投稿

aqskr
aqskr

スコア5

test CHANGED
File without changes
test CHANGED
@@ -516,3 +516,8 @@
516
516
 
517
517
  #endif
518
518
  ```
519
+
520
+
521
+
522
+
523
+

3

hennsyuu

2023/04/30 14:56

投稿

aqskr
aqskr

スコア5

test CHANGED
File without changes
test CHANGED
@@ -338,3 +338,181 @@
338
338
  }
339
339
  ```
340
340
  であります。
341
+
342
+
343
+ またmain.cppは以下のように書くことでビルドできました。
344
+ ```ここに言語を入力
345
+ #include <stdio.h>
346
+ #include <math.h>
347
+ #include "DxLib.h"
348
+ #include "enemy.h"
349
+ #include "controller.h"
350
+
351
+ #define SCREEN_WIDTH 640
352
+ #define SCREEN_HEIGHT 480
353
+ #define CHAR_SIZE 32
354
+
355
+ // プレイヤーの座標
356
+ int player_x, player_y;
357
+
358
+ // プレイヤーの移動速度
359
+ const int move_spped = 5;
360
+
361
+ // プレイヤーの位置を更新する関数
362
+ void update_player_position()
363
+ {
364
+ // キーボードの状態を取得
365
+ int key_up = CheckHitKey(KEY_INPUT_UP);
366
+ int key_down = CheckHitKey(KEY_INPUT_DOWN);
367
+ int key_left = CheckHitKey(KEY_INPUT_LEFT);
368
+ int key_right = CheckHitKey(KEY_INPUT_RIGHT);
369
+
370
+ // キーボードの状態に応じてプレイヤーを移動
371
+ if (key_up)
372
+ {
373
+ player_y -= MOVE_SPEED;
374
+ }
375
+ if (key_down)
376
+ {
377
+ player_y += MOVE_SPEED;
378
+ }
379
+ if (key_left)
380
+ {
381
+ player_x -= MOVE_SPEED;
382
+ }
383
+ if (key_right)
384
+ {
385
+ player_x += MOVE_SPEED;
386
+ }
387
+ }
388
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int nCmdShow)
389
+ {
390
+ // 初期化
391
+ SetGraphMode(1470, 780, 32); // ウィンドウの大きさを指定
392
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
393
+ SetWindowSizeExtendRate(1.0f);
394
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
395
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
396
+
397
+
398
+ if (DxLib_Init() == -1)
399
+ {
400
+ return -1;
401
+ }
402
+ SetDrawScreen(DX_SCREEN_BACK);
403
+
404
+ // 画像の読み込み
405
+ player_x = SCREEN_WIDTH / 2;
406
+ player_y = SCREEN_HEIGHT / 2;
407
+ LoadEnemyImage();
408
+ LoadAttackImage();
409
+
410
+ // メインループ
411
+ while (ProcessMessage() == 0)
412
+ {
413
+ // 画面をクリア
414
+ ClearDrawScreen();
415
+
416
+ // プレイヤーの更新
417
+ update_player_position();
418
+ DrawBox(player_x - CHAR_SIZE / 2, player_y - CHAR_SIZE / 2, player_x + CHAR_SIZE / 2, player_y + CHAR_SIZE / 2, GetColor(255, 255, 255), TRUE);
419
+
420
+ // 敵キャラクターの更新
421
+ UpdateEnemyPosition(&player_x, &player_y);
422
+ DrawEnemy();
423
+
424
+ // 画面を反転
425
+ ScreenFlip();
426
+ }
427
+
428
+ // 終了処理
429
+ DeleteEnemyImage();
430
+ DeleteAttackImage();
431
+ DxLib_End();
432
+ return 0;
433
+ }
434
+ ```
435
+
436
+ 以下はそのままで大丈夫でした。
437
+ enemy.h
438
+ ```ここに言語を入力
439
+ #ifndef ENEMY_H_INCLUDED
440
+ #define ENEMY_H_INCLUDED
441
+
442
+ #define MOVE_SPEED 2 // 敵キャラクターの移動速度
443
+ #define ATTACK_DISTANCE 100 // プレイヤーに攻撃する距離
444
+
445
+ // 敵キャラクターの画像を読み込む関数
446
+ void LoadEnemyImage();
447
+
448
+ // 攻撃の画像を読み込む関数
449
+ void LoadAttackImage();
450
+
451
+ // 敵キャラクターの位置を更新する関数
452
+ void UpdateEnemyPosition(int* player_x, int* player_y);
453
+
454
+ // 敵キャラクターを描画する関数
455
+ void DrawEnemy();
456
+
457
+ // 攻撃を行う関数
458
+ void AttackPlayer(int player_x, int player_y);
459
+
460
+ // 敵キャラクターの画像を解放する関数
461
+ void DeleteEnemyImage();
462
+
463
+ // 攻撃の画像を解放する関数
464
+ void DeleteAttackImage();
465
+
466
+ #endif // ENEMY_H_INCLUDED
467
+ ```
468
+
469
+
470
+
471
+ controllr.h
472
+ ```ここに言語を入力
473
+ #include "DxLib.h"
474
+
475
+ #ifndef DEF_KEY_H //二重include防止
476
+
477
+ #define DEF_KEY_H
478
+ int Key[256];
479
+
480
+
481
+ int gpUpdateKey()
482
+ {
483
+ char tmpKey[256];
484
+ GetHitKeyStateAll(tmpKey);
485
+ for (int i = 0; i < 256; i++)
486
+ (tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;
487
+ return 0;
488
+ }
489
+ int Pad[32];
490
+ //ジョイパッドのボタンのための関数
491
+ int gpUpdatePad()
492
+ {
493
+ int padStat = GetJoypadInputState(DX_INPUT_KEY_PAD1); //入力状態を padStat に格納
494
+ for (int i = 0; i < 28; i++) { //ボタン28個分ループ
495
+ if (padStat & (1 << i)) { //ボタンiの入力フラグが立っていたら
496
+ Pad[i]++; //加算
497
+ }
498
+ else { //入力がなければ
499
+ Pad[i] = 0; //0 にする
500
+ }
501
+ }
502
+
503
+ return 0;
504
+ }
505
+ int PrevPadState = 0; //適切な初期値は0かなきっと
506
+ int CurrPadState = 0; //適切な初期値は0かなきっと
507
+ void UpdatePadState()
508
+ {
509
+ //「前回」情報を更新
510
+ PrevPadState = CurrPadState;
511
+ //「今回」情報を更新
512
+ CurrPadState = GetJoypadInputState(DX_INPUT_KEY_PAD1); //引数はこれで良いのかな?
513
+ }
514
+
515
+
516
+
517
+ #endif
518
+ ```

2

lk

2023/04/30 14:39

投稿

aqskr
aqskr

スコア5

test CHANGED
File without changes
test CHANGED
@@ -49,6 +49,7 @@
49
49
 
50
50
 
51
51
 
52
+ <編集>
52
53
  以下のプログラムになぜか同じプログラムが二回書かれていたためエラーが起きていました。
53
54
  ```ここに言語を入力
54
55
  #include "DxLib.h"

1

編集

2023/04/30 14:38

投稿

aqskr
aqskr

スコア5

test CHANGED
File without changes
test CHANGED
@@ -45,3 +45,295 @@
45
45
 
46
46
  ここにより詳細な情報を記載してください。
47
47
 
48
+
49
+
50
+
51
+
52
+ 以下のプログラムになぜか同じプログラムが二回書かれていたためエラーが起きていました。
53
+ ```ここに言語を入力
54
+ #include "DxLib.h"
55
+ #include "enemy.h"
56
+ #include <math.h>
57
+
58
+ // 敵キャラクターの画像
59
+ int g_enemy_image;
60
+
61
+ // 攻撃の画像
62
+ int g_attack_image;
63
+
64
+ // 敵キャラクターの座標
65
+ int g_enemy_x, g_enemy_y;
66
+
67
+ // 攻撃しているかどうかを表すフラグ
68
+ int g_is_attacking;
69
+
70
+ // 敵キャラクターの画像を読み込む関数
71
+ void LoadEnemyImage()
72
+ {
73
+ g_enemy_image = LoadGraph("enemy.png");
74
+ }
75
+
76
+ // 攻撃の画像を読み込む関数
77
+ void LoadAttackImage()
78
+ {
79
+ g_attack_image = LoadGraph("attack.png");
80
+ }
81
+
82
+ // 敵キャラクターの位置を更新する関数
83
+ void UpdateEnemyPosition(int* player_x, int* player_y)
84
+ {
85
+ // プレイヤーまでの距離を計算
86
+ double distance = sqrt(pow(g_enemy_x - *player_x, 2) + pow(g_enemy_y - *player_y, 2));
87
+
88
+ if (distance > ATTACK_DISTANCE)
89
+ {
90
+ // プレイヤーに近づく
91
+ if (*player_x > g_enemy_x)
92
+ {
93
+ g_enemy_x += MOVE_SPEED;
94
+ }
95
+ else
96
+ {
97
+ g_enemy_x -= MOVE_SPEED;
98
+ }
99
+ if (*player_y > g_enemy_y)
100
+ {
101
+ g_enemy_y += MOVE_SPEED;
102
+ }
103
+ else
104
+ {
105
+ g_enemy_y -= MOVE_SPEED;
106
+ }
107
+ g_is_attacking = 0;
108
+ }
109
+ else
110
+ {
111
+ // プレイヤーに攻撃
112
+ g_is_attacking = 1;
113
+ AttackPlayer(*player_x, *player_y);
114
+ }
115
+ }
116
+
117
+ // 敵キャラクターを描画する関数
118
+ void DrawEnemy()
119
+ {
120
+ if (g_is_attacking)
121
+ {
122
+ DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_attack_image, TRUE);
123
+ }
124
+ else
125
+ {
126
+ DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_enemy_image, TRUE);
127
+ }
128
+ }
129
+
130
+ // 攻撃を行う関数
131
+ void AttackPlayer(int player_x, int player_y)
132
+ {
133
+ // プレイヤーにダメージを与える処理を書く
134
+ }
135
+
136
+ // 敵キャラクターの画像を解放する関数
137
+ void DeleteEnemyImage()
138
+ {
139
+ DeleteGraph(g_enemy_image);
140
+ }
141
+
142
+ // 攻撃の画像を解放する関数
143
+ void DeleteAttackImage()
144
+ {
145
+ DeleteGraph(g_attack_image);
146
+ }
147
+ #include "DxLib.h"
148
+ #include "enemy.h"
149
+ #include <math.h>
150
+
151
+ // 敵キャラクターの画像
152
+ int g_enemy_image;
153
+
154
+ // 攻撃の画像
155
+ int g_attack_image;
156
+
157
+ // 敵キャラクターの座標
158
+ int g_enemy_x, g_enemy_y;
159
+
160
+ // 攻撃しているかどうかを表すフラグ
161
+ int g_is_attacking;
162
+
163
+ // 敵キャラクターの画像を読み込む関数
164
+ void LoadEnemyImage()
165
+ {
166
+ g_enemy_image = LoadGraph("enemy.png");
167
+ }
168
+
169
+ // 攻撃の画像を読み込む関数
170
+ void LoadAttackImage()
171
+ {
172
+ g_attack_image = LoadGraph("attack.png");
173
+ }
174
+
175
+ // 敵キャラクターの位置を更新する関数
176
+ void UpdateEnemyPosition(int* player_x, int* player_y)
177
+ {
178
+ // プレイヤーまでの距離を計算
179
+ double distance = sqrt(pow(g_enemy_x - *player_x, 2) + pow(g_enemy_y - *player_y, 2));
180
+
181
+ if (distance > ATTACK_DISTANCE)
182
+ {
183
+ // プレイヤーに近づく
184
+ if (*player_x > g_enemy_x)
185
+ {
186
+ g_enemy_x += MOVE_SPEED;
187
+ }
188
+ else
189
+ {
190
+ g_enemy_x -= MOVE_SPEED;
191
+ }
192
+ if (*player_y > g_enemy_y)
193
+ {
194
+ g_enemy_y += MOVE_SPEED;
195
+ }
196
+ else
197
+ {
198
+ g_enemy_y -= MOVE_SPEED;
199
+ }
200
+ g_is_attacking = 0;
201
+ }
202
+ else
203
+ {
204
+ // プレイヤーに攻撃
205
+ g_is_attacking = 1;
206
+ AttackPlayer(*player_x, *player_y);
207
+ }
208
+ }
209
+
210
+ // 敵キャラクターを描画する関数
211
+ void DrawEnemy()
212
+ {
213
+ if (g_is_attacking)
214
+ {
215
+ DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_attack_image, TRUE);
216
+ }
217
+ else
218
+ {
219
+ DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_enemy_image, TRUE);
220
+ }
221
+ }
222
+
223
+ // 攻撃を行う関数
224
+ void AttackPlayer(int player_x, int player_y)
225
+ {
226
+ // プレイヤーにダメージを与える処理を書く
227
+ }
228
+
229
+ // 敵キャラクターの画像を解放する関数
230
+ void DeleteEnemyImage()
231
+ {
232
+ DeleteGraph(g_enemy_image);
233
+ }
234
+
235
+ // 攻撃の画像を解放する関数
236
+ void DeleteAttackImage()
237
+ {
238
+ DeleteGraph(g_attack_image);
239
+ }
240
+
241
+ ```
242
+
243
+ 正しくは
244
+ ```ここに言語を入力
245
+ #include "DxLib.h"
246
+ #include "enemy.h"
247
+ #include <math.h>
248
+
249
+ // 敵キャラクターの画像
250
+ int g_enemy_image;
251
+
252
+ // 攻撃の画像
253
+ int g_attack_image;
254
+
255
+ // 敵キャラクターの座標
256
+ int g_enemy_x, g_enemy_y;
257
+
258
+ // 攻撃しているかどうかを表すフラグ
259
+ int g_is_attacking;
260
+
261
+ // 敵キャラクターの画像を読み込む関数
262
+ void LoadEnemyImage()
263
+ {
264
+ g_enemy_image = LoadGraph("enemy.png");
265
+ }
266
+
267
+ // 攻撃の画像を読み込む関数
268
+ void LoadAttackImage()
269
+ {
270
+ g_attack_image = LoadGraph("attack.png");
271
+ }
272
+
273
+ // 敵キャラクターの位置を更新する関数
274
+ void UpdateEnemyPosition(int* player_x, int* player_y)
275
+ {
276
+ // プレイヤーまでの距離を計算
277
+ double distance = sqrt(pow(g_enemy_x - *player_x, 2) + pow(g_enemy_y - *player_y, 2));
278
+
279
+ if (distance > ATTACK_DISTANCE)
280
+ {
281
+ // プレイヤーに近づく
282
+ if (*player_x > g_enemy_x)
283
+ {
284
+ g_enemy_x += MOVE_SPEED;
285
+ }
286
+ else
287
+ {
288
+ g_enemy_x -= MOVE_SPEED;
289
+ }
290
+ if (*player_y > g_enemy_y)
291
+ {
292
+ g_enemy_y += MOVE_SPEED;
293
+ }
294
+ else
295
+ {
296
+ g_enemy_y -= MOVE_SPEED;
297
+ }
298
+ g_is_attacking = 0;
299
+ }
300
+ else
301
+ {
302
+ // プレイヤーに攻撃
303
+ g_is_attacking = 1;
304
+ AttackPlayer(*player_x, *player_y);
305
+ }
306
+ }
307
+
308
+ // 敵キャラクターを描画する関数
309
+ void DrawEnemy()
310
+ {
311
+ if (g_is_attacking)
312
+ {
313
+ DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_attack_image, TRUE);
314
+ }
315
+ else
316
+ {
317
+ DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_enemy_image, TRUE);
318
+ }
319
+ }
320
+
321
+ // 攻撃を行う関数
322
+ void AttackPlayer(int player_x, int player_y)
323
+ {
324
+ // プレイヤーにダメージを与える処理を書く
325
+ }
326
+
327
+ // 敵キャラクターの画像を解放する関数
328
+ void DeleteEnemyImage()
329
+ {
330
+ DeleteGraph(g_enemy_image);
331
+ }
332
+
333
+ // 攻撃の画像を解放する関数
334
+ void DeleteAttackImage()
335
+ {
336
+ DeleteGraph(g_attack_image);
337
+ }
338
+ ```
339
+ であります。