質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

0回答

496閲覧

エネミーが自動で弾を発射させたい

sanosyouya

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/08/28 08:33

//============================================================================= // 更新処理 //============================================================================= void UpdatePlayer(void) { for (int i = 0; i < PLAYER_MAX; i++) { // 生きてるプレイヤーだけ処理をする if (g_Player[i].use == TRUE) { // 地形との当たり判定用に座標のバックアップを取っておく XMFLOAT3 pos_old = g_Player[i].pos; // 分身用 for (int j = PLAYER_OFFSET_CNT - 1; j > 0; j--) { g_Player[i].offset[j] = g_Player[i].offset[j - 1]; } g_Player[i].offset[0] = pos_old; //// アニメーション //if (g_Player[i].moving == TRUE) //{ // g_Player[i].countAnim += 1.0f; // if (g_Player[i].countAnim > ANIM_WAIT) // { // g_Player[i].countAnim = 0.0f; // // パターンの切り替え // g_Player[i].patternAnim = (g_Player[i].dir * TEXTURE_PATTERN_DIVIDE_X) + ((g_Player[i].patternAnim + 1) % TEXTURE_PATTERN_DIVIDE_X); // } //} // キー入力で移動 { float speed = g_Player[i].move.x; g_Player[i].moving = FALSE; g_Player[i].dash = FALSE; if (GetKeyboardPress(DIK_C) || IsButtonPressed(0, BUTTON_A)) { speed *= 4; g_Player[i].dash = TRUE; } if (GetKeyboardPress(DIK_DOWN)) { g_Player[i].pos.y += speed; g_Player[i].dir = CHAR_DIR_DOWN; g_Player[i].moving = TRUE; } else if (GetKeyboardPress(DIK_UP)) { g_Player[i].pos.y -= speed; g_Player[i].dir = CHAR_DIR_UP; g_Player[i].moving = TRUE; } if (GetKeyboardPress(DIK_RIGHT)) { g_Player[i].pos.x += speed; g_Player[i].dir = CHAR_DIR_RIGHT; g_Player[i].moving = TRUE; } else if (GetKeyboardPress(DIK_LEFT)) { g_Player[i].pos.x -= speed; g_Player[i].dir = CHAR_DIR_LEFT; g_Player[i].moving = TRUE; } // ゲームパッドでで移動処理 if (IsButtonPressed(0, BUTTON_DOWN)) { g_Player[i].pos.y += speed; g_Player[i].dir = CHAR_DIR_DOWN; g_Player[i].moving = TRUE; } else if (IsButtonPressed(0, BUTTON_UP)) { g_Player[i].pos.y -= speed; g_Player[i].dir = CHAR_DIR_UP; g_Player[i].moving = TRUE; } if (IsButtonPressed(0, BUTTON_RIGHT)) { g_Player[i].pos.x += speed; g_Player[i].dir = CHAR_DIR_RIGHT; g_Player[i].moving = TRUE; } else if (IsButtonPressed(0, BUTTON_LEFT)) { g_Player[i].pos.x -= speed; g_Player[i].dir = CHAR_DIR_LEFT; g_Player[i].moving = TRUE; } //// ジャンプ処理中? //if (g_Player[i].jump == TRUE) //{ // float angle = (XM_PI / PLAYER_JUMP_CNT_MAX) * g_Player[i].jumpCnt; // float y = PLAYER_JUMP_Y_MAX * cosf(XM_PI / 2 + angle);//高さを求めてる // g_Player[i].jumpY = y; // g_Player[i].jumpCnt++; // if (g_Player[i].jumpCnt > PLAYER_JUMP_CNT_MAX) // { // g_Player[i].jump = FALSE; // g_Player[i].jumpCnt = 0; // g_Player[i].jumpY = 0.0f; // } //} //// ジャンプボタン押した? //else if ((g_Player[i].jump == FALSE) && (GetKeyboardTrigger(DIK_J))) //{ // g_Player[i].jump = TRUE; // g_Player[i].jumpCnt = 0;//クリア // g_Player[i].jumpY = 0.0f; //} // MAP外チェック BG* bg = GetBG(); if (g_Player[i].pos.x < 0.0f) { g_Player[i].pos.x = 0.0f; } if (g_Player[i].pos.x > bg->w) { g_Player[i].pos.x = bg->w; } if (g_Player[i].pos.y < 0.0f) { g_Player[i].pos.y = 0.0f; } if (g_Player[i].pos.y > bg->h) { g_Player[i].pos.y = bg->h; } // プレイヤーの立ち位置からMAPのスクロール座標を計算する bg->pos.x = g_Player[i].pos.x - PLAYER_DISP_X; if (bg->pos.x < 0) bg->pos.x = 0; if (bg->pos.x > bg->w - SCREEN_WIDTH) bg->pos.x = bg->w - SCREEN_WIDTH; bg->pos.y = g_Player[i].pos.y - PLAYER_DISP_Y; if (bg->pos.y < 0) bg->pos.y = 0; if (bg->pos.y > bg->h - SCREEN_HEIGHT) bg->pos.y = bg->h - SCREEN_HEIGHT; // 移動が終わったらエネミーとの当たり判定 { ENEMY* enemy = GetEnemy(); // エネミーの数分当たり判定を行う for (int j = 0; j < ENEMY_MAX; j++) { // 生きてるエネミーと当たり判定をする if (enemy[j].use == TRUE) { BOOL ans = CollisionBB(g_Player[i].pos, g_Player[i].w, g_Player[i].h, enemy[j].pos, enemy[j].w, enemy[j].h); // 当たっている? if (ans == TRUE) { // 当たった時の処理 enemy[j].use = FALSE; AddScore(10); } } } } // バレット処理 if (GetKeyboardTrigger(DIK_SPACE)) { XMFLOAT3 pos = g_Player[i].pos; pos.y += g_Player[i].jumpY; SetBullet(pos); } if (IsButtonTriggered(0, BUTTON_B)) { XMFLOAT3 pos = g_Player[i].pos; pos.y += g_Player[i].jumpY; SetBullet(pos); } } } } // 現状をセーブする if (GetKeyboardTrigger(DIK_S)) { SaveData(); } #ifdef _DEBUG // デバッグ情報を表示する #endif }

これはプレイヤーのコードなのですが
プレイヤーはシフトを押したら弾を発射されるようになっているのですが
これをエネミーにも似たようにしたくて
エネミーは、何も押さずに自動で打つようにしたいのですが
エネミーの更新処理のとこに書けばいいのですしょうか

//============================================================================= // 更新処理 //============================================================================= void UpdateEnemy(void) { g_EnemyCnt = 0; // 生きてるエネミーの数 for (int i = 0; i < ENEMY_MAX; i++) { g_Enemy[i].count++; /*if (g_Enemy[i].count >= 63 * (rand ()% 30)) {*/ /*count++;*/ // 生きてるエネミーだけ処理をする if (g_Enemy[i].use == TRUE) { // 地形との当たり判定用に座標のバックアップを取っておく XMFLOAT3 pos_old = g_Enemy[i].pos; // アニメーション g_Enemy[i].countAnim += 1.0f; if (g_Enemy[i].countAnim > ANIM_WAIT) { g_Enemy[i].countAnim = 0.0f; // パターンの切り替え g_Enemy[i].patternAnim = (g_Enemy[i].patternAnim + 1) % ANIM_PATTERN_NUM; } // 移動が終わったらエネミーとの当たり判定 { PLAYER* player = GetPlayer(); // エネミーの数分当たり判定を行う for (int j = 0; j < ENEMY_MAX; j++) { // 生きてるエネミーと当たり判定をする if (player[j].use == TRUE) { BOOL ans = CollisionBB(g_Enemy[i].pos, g_Enemy[i].w, g_Enemy[i].h, player[j].pos, player[j].w, player[j].h); // 当たっている? if (ans == TRUE) { // 当たった時の処理 // player[j].use = FALSE; // デバッグで一時的に無敵にしておくか } } } } g_EnemyCnt++; // 生きてた敵の数 } /*}*/ } // エネミー全滅チェック if (g_EnemyCnt <= 0) { SetFade(FADE_OUT, MODE_RESULT); } #ifdef _DEBUG // デバッグ情報を表示する #endif }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/09/01 01:12 編集

> エネミーの更新処理のとこに書けばいいのですしょうか 「XXXのところに書けばOKなのか?」って問うても誰も答えられないと思うよ. だって,「XXXでいいのか?」って迷うってことは,XXX以外にも考えられる候補があるってことだよね. あなたのプログラム内にどれだけの候補が存在するのか? そしてそれらはそれぞれ何者なのか? なんてことは他者にはわからないだから判断できるわけがないよ.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問