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

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

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

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

0回答

4207閲覧

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

DR.Dexter00

総合スコア18

C

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

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

1クリップ

投稿2019/09/21 05:46

編集2023/08/18 04:29

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

環境は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と置いた。 }

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

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

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

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

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

LouiS0616

2019/09/21 05:51

1. 『C言語何でも質問掲示板』の方にも、当ページのリンクを貼って下さい。向こうのフォーラムルールにも目を通しましょう。相互リンクが必須と明記されています。 2. なぜマルチポストしたのか、充分な説明を書いて下さい。
LouiS0616

2019/09/21 05:53

> teratailでは、マルチポストの推奨はしていません。 やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 https://teratail.com/help#posted-otherservice > 複数の掲示板で同じ質問をするときは相互リンクし、どこの掲示板で同じ質問をしているか明確にして下さい。 https://dixq.net/forum/rules#board-rule-1-5
DR.Dexter00

2019/09/21 06:17

隠しているつもりはないですが、基礎を勉強しながら、ゲームを作りたい一心で新しいアカウントを作りました。
m.ts10806

2019/09/21 06:21 編集

同一人物による複数アカウント所持は規約違反です。
DR.Dexter00

2019/09/21 06:23

では、もう一つの緑を消します。お騒がせしました。 どうか、過去のように基礎をおろそかにしないよう地に足をつけて勉強しています。 お力を貸してください。
m.ts10806

2019/09/21 06:26

マルチポストやめるところからですねえ。 情報を正しく整理できない人がやってはいけません。
DR.Dexter00

2019/09/21 06:28

すいません。素直にマルチポストをやっていると書けば良いと思っていました
DR.Dexter00

2019/09/21 06:31

zさん、すいません。 絡まれてめんどくさいのであなたには隠していました。 というのも基礎勉強しているのに馬鹿にしたり関係ないことを書かれるためです
Zuishin

2019/09/21 06:33

これはどちらかを消せば済む話ではありません。通報したら両方消されます。 運営に謝罪して今後どうすべきか指示を仰いでください。 他にもアカウントがあるのは確認しています。運営に全て報告してください。
m.ts10806

2019/09/21 06:35

マルチタスクを完璧にこなせる自信があるならいいでしょう。 全ての質問の回答に過不足なく応え、追記修正依頼に応じ、きちんと全て理解し、解決したら全ての質問を遅延なく締められる自信があるなら。 まあ、どのようにいっても規約違反をやってしまう人にフォローはできませんね。マルチポストしたくてしたくて仕方ない、しないと気がすまない人なんでしょう。 基礎勉強以前の問題が大きすぎることにいつまでも気づかないので基礎すら勉強になりません。
Zuishin

2019/09/21 06:35

それと、馬鹿にした覚えはありません。事実そのままの評価です。私の言った通り、身の丈に合ったやり方をしていれば、もっと早く成長していたはずです。 あなたが自分を過大評価しているだけです。
LouiS0616

2019/09/21 06:36

> 過去のように基礎をおろそかにしないよう地に足をつけて勉強しています。 この質問で既にその主張が破綻しています。 if文が分からない段階で手を出す課題ではありません。 どうしてもゲームを作りたいならScratchあたりを使ってみては。
DR.Dexter00

2019/09/21 06:40

私もルール違反していて悪いですが、あなた方もどこを見てもケチをつけることしかしないのですね。 呆れます。過大評価した覚えはないですよ。あなたこそ自分の汚点を認めないところは成長しないですね。 面倒なのでスルーします。 何をしても批判しかしない奴に構ってる暇はありません。
DR.Dexter00

2019/09/21 06:41

scrachで作れたら苦労しません。it系の悪口は達者ですね。大人げねぇやです。
LouiS0616

2019/09/21 06:43

CよりScratchの方が圧倒的に簡単だと思います。簡単な方から慣れるのは基本的な学習戦略の一つです。
Zuishin

2019/09/21 06:45

if すらわからないのにゲームだ VR だというのが過大評価です。 事実、できないじゃないですか。
m.ts10806

2019/09/21 06:48

自身の何が問題か分かってないのが手に取るようにわかるので、そこを「指摘」するしかないのです。 こんな質問より解決しなければならない問題が大きくて多くて誰もアドバイスしたくならないのです。 自らを省みず面倒だ悪口だ言ってる人に誰が手を貸しますかね。 何度目ですかねこの指摘。
m.ts10806

2019/09/21 06:50

「バレたら消せばいい」程度の認識でしかないですよね。「怒られたら謝ればいい」と同じで。 それってどうなんでしょ。
DR.Dexter00

2019/09/21 06:50

あなた方二人の勝手な思い込みでつべこべ言いなさるな。 私の相手してる暇あったら別の方を助けて差し上げて下さいな。
DR.Dexter00

2019/09/21 06:52

勉強始めたばっかの青二才にプロ?の方が言いたい放題、 それってどうなんでしょうか?
Zuishin

2019/09/21 06:52

いや、思い込みじゃなく、事実作れないでしょ? 作れると思い込んでるのはあなた一人です。
m.ts10806

2019/09/21 06:55

どこが思い込みなんでしょ。 客観的事実しかないですよ。どこが思い込みなのか具体的に説明してくださいな。 雰囲気じゃプログラムは動かないのと同じく、雰囲気じゃ伝わらないことの方が多いんですよ。文字だけのやりとりですし余計に。 我々が指摘していることの証拠としてこの程度の質問にいつまでも回答がつかないことが挙げられます。過去のアドバイスを積極的になかったことにしてるのがよくわかります。
DR.Dexter00

2019/09/21 06:55

そうです!おっしゃる通り! ささ、青二才相手にしてないで、早く家に帰ってマスでもかいてください!
Zuishin

2019/09/21 06:55

勉強はじめるのが遅すぎます。まず勉強しろと二年前から言われてるはずです。
DR.Dexter00

2019/09/21 06:57

あなた方がうるさいから誰も寄り付かないんですよ。 あなた方みたいな野次馬はどの世界でもお払い箱ですよ。 わたしにも問題はありますが、そんな私を相手して炎上させるあなた方も同類ですよ
m.ts10806

2019/09/21 06:59

「始めたばかり」を自分ルールで延ばさないでください。「ばかり」が時間的に許されるのは数ヵ月でしょう。つまり、それだけの時間を無駄にしても基礎すらできていないということ。時は金なり。 我々は暇な時間に回答なりアドバイスなりしてますので大して影響はないですが、あなたはそうではないでしょう?
DR.Dexter00

2019/09/21 07:00

飲み込みと頭が悪くって てへっとは言えませんが。 さ、私みたいな馬鹿ほっといて、他の方を助けたげてください
DR.Dexter00

2019/09/21 07:02

時は金なり!その通り! いい勉強が出来ました。 もう帰っていいですよ。 私を相手するだけ「時間」が無駄ですよ! 時は金なりですよ!
m.ts10806

2019/09/21 07:03

誰も寄り付かない 根拠はありますか?思い込みで語るなと人には言っておいて自分は思い込みばかりですね。 回答率が下がるのは寧ろ「アドバイスしたくなるような質問ではない」「不備が多すぎる」「指摘に素直に応じない」と、質問者側の問題が大きいように感じますけど? teratailの質問、1日にどれくらい投稿されるか見て言ってます? 質問者の増加の推移とったんですか? あなたが寄り付かないのは自由ですが、あなたが回答率低下の一端であるのは明らかです。 やり方がマズすぎる。
m.ts10806

2019/09/21 07:04

じゃあ、全てのアカウントと質問を削除して、二度と使わないでください。お願いなので。
DR.Dexter00

2019/09/21 07:07

責任者でないあなたに言われてもなぁ。 最近は少しにしたつもりなんですが、あなたのような人がいるから寄り付かないって事も頭に入れとくといいですよ。私に会いたくないならあなたが消えれば? 自分のエゴを押し付けるのは良くないぞっ!
Zuishin

2019/09/21 07:08

エゴというか、通報すれば普通に消えますが。お目こぼしされてるだけですよ。
m.ts10806

2019/09/21 07:08

ご自身のコメントが思い込みではないという根拠が提示されないままコメントされても、なんとも。 客観的事実を提示してください。
DR.Dexter00

2019/09/21 07:10

はいはい。そうですね。
Zuishin

2019/09/21 07:11

通報します。
Zuishin

2019/09/21 07:11

しました。
m.ts10806

2019/09/21 07:12

私は「待ったところでアドバイスが無駄になることが分かってて回答する人はいないし、そんな質問残ってても誰の参考にもならないので削除して自分でなんとかしましょう」という意味合いでアドバイスしてるんですけど、消えろと言われてしまいました。
m.ts10806

2019/09/21 07:13

「私の相手をするだけ時間の無駄」と自ら名乗る人が、なぜ赤の他人を頼るのでしょう。不思議です。
DR.Dexter00

2019/09/21 07:15

勝手に通報するなりしてください。通報する価値もないので、怯えなくて大丈夫ですよ!
Zuishin

2019/09/21 07:16

いやだから、しましたって言ってるのに。過去形わかります?
m.ts10806

2019/09/21 07:18

規約も守らないルールも守らない折角のアドバイスを無駄にする人は コミュニティにいてもらっては困るんですよ。 そういう人を運営より是正および適切な対応してもらうべくあるのが「通報」という機能です。
DR.Dexter00

2019/09/21 07:21

zは相変わらずですね。 あれをアドバイスとは、、、ただの嫌がらせにしか思えなんだよなぁ。
can110

2019/09/21 07:23

「では、もう一つの緑を消します。」と記載していますが、現状、具体的にどのような行動をとりましたか?
m.ts10806

2019/09/21 07:25 編集

複数の回答者がコメントしているのに、アンカーもつけないし勝手に略すし そこのマナーから教えなきゃなりませんか?(そこから勉強しなおしてください。できないなら、やはり周囲に迷惑をかけるので使うべきではありません)
Zuishin

2019/09/21 07:23

そりゃ自分を過大評価してるから嫌がらせに見えるんでしょうよ。 LouiS0616 さんの親切なアドバイスも嫌がらせに見えてるんでしょう?
DR.Dexter00

2019/09/21 07:28

外出中ですよ。 cとmとzの三人がアドバイスなんてしてないでしょ。 人を巻き込むのやめた方がいいですよ。
Zuishin

2019/09/21 07:29

作りたいものを作るっていうのはね、普通は条件分岐とループをマスターして数当てゲームを作り、その次くらいの段階ですることなんですよ。 あなたはそれより二段階下なので、早すぎるんです。 バカにしてるんじゃなく、これが最もポピュラーな学習法です。
m.ts10806

2019/09/21 07:29

質問者側の大きな思い込みがあったので補足。 >私の相手してる暇あったら別の方を助けて差し上げて下さいな。 別にここにコメントしている回答者がこの質問やあなただけに注力しているわけではないのでお構いなく。 苦言多めのZuishinさんも私も別の質問や質問者を適宜フォローしています。
Zuishin

2019/09/21 07:30 編集

でもって、VR ゲームなんていうのはそれよりさらに数段階先になります。
m.ts10806

2019/09/21 07:31

>cとmとzの三人がアドバイスなんてしてないでしょ。 指摘もアドバイスのうちと捉えられないうちは素直に聞いておいた方が良いです。
DR.Dexter00

2019/09/21 07:33

なるほど、なら素直に聞くしかないですね。 zさんの苦言にはいつも傷つきます。本当にやめてほしい。
DR.Dexter00

2019/09/21 07:37

あの、出来れば、質問に対して何か、解決法を伝授してほしいのですが、 これでもいろんな方の助けを借りてdxライブラリを読んで自分なりに作り上げたんです。 少しでいいです。力を貸してください。
m.ts10806

2019/09/21 07:38

zさんって誰でしょう。 そのようなユーザーはいませんよ。 https://teratail.com/users/z https://teratail.com/users/m https://teratail.com/users/c 指摘されたくないならルール、マナーは遵守してください。 そしたら傷つかなくて済みます。 まあ「傷つく」と書くだけなら簡単ですし、言ってるうちは何の問題もないので 言わない方がいいです。ツッコミどころが増えるだけなので。
Zuishin

2019/09/21 07:41 編集

if 文を理解することが一番正当な解決法です。無理でも意地悪でもないはずです。
DR.Dexter00

2019/09/21 07:40

わかりました。無駄なことは極力避けます。
m.ts10806

2019/09/21 07:41

>少しでいいです。力を貸してください。 基礎を自分でなんとかしましょう。 何度も言ってますけど、指摘されて開き直る人に誰もアドバイスしたいと思いません。 だからこの程度の質問に何時間も回答がつかないのです。 LouiS0616さんの丁寧なアドバイスが受け入れられていない時点で「終わったな」という印象なので あとは惰性で続いているだけです。 アドバイスしてもどうせ無駄になるしなー、自分で「私に構っても時間の無駄」とか言うやつだしなー。 そら、誰もアドバイスしませんわ、ということで。ではでは。
DR.Dexter00

2019/09/21 07:44

はい、その方がいいです。 私みたいな奴はこれでいいです。わざわざ無駄な時間を割いてくれてどうもー。
m.ts10806

2019/09/21 07:45

じゃ、質問とアカウント消しといてくださいね。
DR.Dexter00

2019/09/21 07:53

それは管理者の決めることですよ。大丈夫ですか? あなたも嫌なら消してくださいね
m.ts10806

2019/09/21 07:55

質問もアカウントもユーザー自身で削除・退会することができます。 「管理者がなんとかするまで自分には何の落ち度もない」と自信をもって言ってるように見えますが、大問題です。 で、嫌なら消してって、何を?
DR.Dexter00

2019/09/21 07:59

あなたのアカウントだよ。
can110

2019/09/21 07:59

この欄の発言をざくっと要約すると https://teratail.com/questions/210975の返答 「絡まれてめんどくさいのであなたには隠していました。」より 「では、もう一つの緑を消します。」→「外出中ですよ。」より ・やるといったことをやらない ・嘘をつく 人と判断しました。 が、よろしかったでしょうか(確認してるようで断定口調)?
m.ts10806

2019/09/21 08:01

どこで「嫌」と思い込んだんでしょう。 で、なぜ私が消す必要があるんでしょう。 客観的に説明してください。
DR.Dexter00

2019/09/21 08:01

探偵ごっこお疲れ様です。 暇人だな〜、俺の相手をしてるなんて
m.ts10806

2019/09/21 08:02

本日teratailに向けてる労力の1/10も向けてませんので、お構いなく。 大変不愉快な発言があったのでそこは通報したくらいですね。
m.ts10806

2019/09/21 08:03

あ、アンカーないから誰に言ってるかわからないや。 マナーですよ。特に質問者は不特定多数のコメントを受け入れることになります。 きちんと誰に対してのコメントか明示しないとですね。マルチポストできるって自負があるんでしょ? それくらいできなきゃね。
can110

2019/09/21 08:06

つまり「私は嘘をつくし、やるといったことはやらないし、私の相手(回答)をする人は暇人です」 ということですね。
m.ts10806

2019/09/21 08:08

↑誰に言ってるかわかりませんが、ルール、マナーにベテランもビギナーもありません。
can110

2019/09/21 08:15

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

2019/09/21 08:44

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

2019/09/21 08:52

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問