実現したいこと
画像のように右向きあるいは左方向(1〜11)にAが9マス上を動くBにビームで攻撃する際にCも9マスを動きます。
また、右向きあるいは左方向(12〜19)にAが9マス上を動くCにビームで攻撃する際にBも9マスを動きます。
そのパターンを地道にプログラムしたのですが、思うようにいきません。
よりコンパクトなプログラムに出来ないでしょうか?
編集
ちなみに私の書いたプログラムはAがBに対してビームを撃つときのプログラムなのですが、
BとCが動き回ってる特にBにビームを撃つのですがまったくBにダメージが入りません。
その理由も解説して頂けると助かります。
注意
画像に書いたパターンの①はBに対してのビーム攻撃でありCに攻撃をしていけません。
要は貫通してCに攻撃はしていけないということです。
画像に書いたパターンの⑧はCに対してのビーム攻撃でありBに攻撃をしていけません。
要は貫通してCに攻撃はしていけないということです。
⑧は
以下は画像です。
4枚の画像
前提
C言語とvisual studio2019を使いました。
環境はWindowsです。
発生している問題・エラーメッセージ
エラーメッセージ
ソースが長くなったので以下に張りました。編集いたしました。
https://xgf.nu/cUpg
編集
こちらは自分なりにコンパクトにしたものです。
ですが、まだ敵1と敵2が同じY軸に居る時に攻撃すると敵二人を攻撃してしまうため
else ifで分岐させました。敵二人同時に攻撃することはなくなりましたが、敵二人に同じ同じY座標でX座標で挟まれた時は分岐のせいで敵2に攻撃できないと言った問題が起きています。
if (pos[enemyY1][enemyX1][1] + 15 + playerattackhanndou3 >= pos[playerY][playerX][1] + nanameidouY + nanameidouY2 + nanameidouY3 && pos[enemyY1][enemyX1][1] - 15 + playerattackhanndou3 <= pos[playerY][playerX][1] + nanameidouY + nanameidouY2 + nanameidouY3 ) { tyokusennkougeki = 1; if (tyokusennkougeki == 1) { if (pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B or pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 >= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B or pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B or pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 >= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B ) { kougekiKANOU = 10; GenemysabunHP = 40; point = 123; } } } if (pos[enemyY2][enemyX2][1] + 15 + playerattackhanndou3B >= pos[playerY][playerX][1] + nanameidouY + nanameidouY2 + nanameidouY3 && pos[enemyY2][enemyX2][1] - 15 + playerattackhanndou3B <= pos[playerY][playerX][1] + nanameidouY + nanameidouY2 + nanameidouY3 ) { tyokusennkougeki = 2; if (tyokusennkougeki == 2) { if (pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B or pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 <= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B or pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 >= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B or pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 <= pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 - 15 && pos[enemyY1][enemyX1][0] + playerattackhanndou + playerattackhanndou2 + playerattackhanndou3 <= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B && pos[playerY][playerX][0] + nanameidouX + migiidou + nanameidouX2 + nanameidouX3 >= pos[enemyY2][enemyX2][0] + playerattackhanndouB + playerattackhanndou2B + playerattackhanndou3B ) { kougekiKANOU = 10; AGenemysabunHP = 40; point = 123; } } } else { tyokusennkougeki = 0; }
試したこと
ここに問題に対して試したことを記載してください。
<編集>
以下のように作り直したのですが問題が一つだけあります。
敵1と敵2が横に並んでいる場合、手前の敵1にだけビームを当てたいのですが、手前の敵1とその後ろの敵2にもビームが当たってしまいます。else ifを使えばこの問題は解決するのですが、else ifで組むと敵2にビームの攻撃が当たらなくなってしまうので、できればif文のみで作りたいです。
もしelse ifを使わないと難しい場合は載せましたプログラムにelse ifを組み込んでいただいて構いません。
どうか知恵を貸してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー