二つのif文が重複してしまう。

受付中

回答 0

投稿 編集

  • 評価 -1
  • クリップ 0
  • VIEW 523

DR.Dexter00

score 4

マルチポスト
数時間前から自己解決しようと頑張っているのですが、全く歯が立たず皆様の力をお借りしたいです。
少し難解であるためマルチポストで知恵を貸していただこうと思い今回のように至りました。

環境はWindows10、C言語、DXライブラリです。
使った画像が載っているサイトです。画像
行いたいこと
キーRを押してキーAでアタックします、そして、画像が右向きになり再びAを押すと連続攻撃ができるように作りたいのですが、一つ目のifの条件と二つ目のifの条件が重なってしまい連続攻撃が再現できずにいます。

問題の部分はこれです。

//playerY != enemyYよりY座標が異なる場合を表す、Y座標が異なる場合はlockの値は0になる。要はロックが解除されてしまう。
            if (lock) {

                if (Key[KEY_INPUT_A] == 1 && count <= 50) {  //殴る//(lock){}の中に書くとロックする度にcountが0になるので意味がない
                    //count++;  ここにcount書くとifの条件よりcountが0の時の下のlockやplayerX = enemyX - 1など条件になるため、++でcountが1になったらロックできても攻撃できないんだ
                    //ここのcountの情報がそのまま下の描画関数に渡されるだけ。
                    //if (count >= 0 && ++count > 40) {//countが0から15になるまでを一フレームで表しただけでは?ようはcountを0~1にするのに15フレームかかっただけでは?いや、単純にここにフレームは働いていないなので++count > 40と書いて39回行うはずがフレームが働かないので1しか上がっていないので一回しか攻撃が出来ないのだ


                    lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。
                    lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。
                    preplayerX = playerX; // 元の位置を保持
                    playerX = enemyX - 1; // 俺は敵の眼前へ
                    after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
                    enemyImage = enemyGHandle[5];//攻撃を食らうと右向きになるようにする
                    count = count - 10;//キーAを押すたびに10だけ引く
                    count3 = count;
                    count2 = count2 - 1;
                }
            }

            if (Key[KEY_INPUT_A] == 1 && enemyImage == enemyGHandle[5])//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい
            {
                count = count3 - 10;
                playerX = enemyX - 1; // 俺は敵の眼前へ
                after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
            }

        

以下が全体のコードです。
文字数制限でこちらのサイトに移しました。お手数をお掛けします。
全体のプログラムです

<編集>
以下のように行いました。一応理にかなっていると思うのですがうまくいきませんでした。
一つ目のifもなぜか重複してしまい50から20ずつ引かれてしまいます。なぜでしょうか。

int count2 = 1;
            //playerY != enemyYよりY座標が異なる場合を表す、Y座標が異なる場合はlockの値は0になる。要はロックが解除されてしまう。
            if (lock) {

                if (Key[KEY_INPUT_A] == 1 && count <= 50&& count2 == 1) {  //殴る//(lock){}の中に書くとロックする度にcountが0になるので意味がない
                    //count++;  ここにcount書くとifの条件よりcountが0の時の下のlockやplayerX = enemyX - 1など条件になるため、++でcountが1になったらロックできても攻撃できないんだ
                    //ここのcountの情報がそのまま下の描画関数に渡されるだけ。
                    //if (count >= 0 && ++count > 40) {//countが0から15になるまでを一フレームで表しただけでは?ようはcountを0~1にするのに15フレームかかっただけでは?いや、単純にここにフレームは働いていないなので++count > 40と書いて39回行うはずがフレームが働かないので1しか上がっていないので一回しか攻撃が出来ないのだ


                    lock = 0;//lock = 1の時の「lock!!」の描画を消すためにlockの値を0に変更。
                    lockonMove = 0;//アタックする時 ロックオンの画像が消えるように値を0にする。
                    preplayerX = playerX; // 元の位置を保持
                    playerX = enemyX - 1; // 俺は敵の眼前へ
                    after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
                    enemyImage = enemyGHandle[5];//攻撃を食らうと右向きになるようにする
                    count = count - 10;//キーAを押すたびに10だけ引く
                    count3 = count;
                    count2 = count2 - 1;//ここで0になる、Aを繰り返してcount2が—1になったとしてもcount2<=0より二つ目のifの条件に合うので二つ目のifが実行できるはず、、、。
                }
            }

            if (Key[KEY_INPUT_A] == 1 && enemyImage == enemyGHandle[5]&&count2<=0)//敵が右向きの時に続けてAを押すと連続攻撃ができる//相手がenemyImage == enemyGHandle[5]状態の時に他の攻撃もできるように他のキーも&&すればいい
            {
                count = count3 - 10;
                playerX = enemyX - 1; // 俺は敵の眼前へ
                after = 1;//アタック状態 ここまでをアタックとしてafter = 1と置いた。
            }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • can110

    2019/09/21 17:15

    では反論すらなく否定もないので本人も認めた以下は確定で。
    「私は嘘をつくし、やるといったことはやらないし、私の相手(回答)をする人は暇人です」

    キャンセル

  • thkana

    2019/09/21 17:44

    とりあえず、日本では、名前あるいはそれに準ずる固有名を、それなりに親しい仲ならともかく、勝手に略したり変えたり間違えたりするのは相当に失礼なこと、とされています。そのことは社会の常識として知っておくべきです。
    自分がころころとハンドル/ニックネームを変えるからといって、「名前」に準じる他人のそれを大切にしなくていいということにはなりません。相手が誰であっても。

    キャンセル

  • m.ts10806

    2019/09/21 17:52

    thkanaさん
    匿名掲示板と混同してる人が多いですね。ただ、ああいった場でもレスアンカーがないと毛嫌いされる傾向にあると思います。
    (私はあまり利用経験ないですが)

    キャンセル

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

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる