addattacktimeの値が-1のままの原因がわかりません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ouxiy
記事: 169
登録日時: 4ヶ月前

addattacktimeの値が-1のままの原因がわかりません。

#1

投稿記事 by Ouxiy » 2ヶ月前

addattacktimeの値が-1のままなのですが、なぜ-1になっているのかわかりません。
変数addattacktimeの関係している以下の部分を消してみたのですが、特に変化はなく、この部分が原因ではないとわかりましたが、原因がわかりません。

コード:

if (addattacktime <= 500 && --addattacktime > 0)//addattacktimeが0になるまでの間に攻撃があればaddattacktimeは20に戻る
				
			{//★addattacktimeが500以下で0より大きい時—1されていく、そして500以下ならばかつ0より大きいならばずっと処理されるということ。

				//addattackimage = addattackimage - 1;
				if (Key[KEY_INPUT_K] == 1 && Kcount == 50 && enemyImage == enemyGHandle[5]) {//攻撃がキックだった場合
					Kcount = Kcount - 50;//キーKを押すたびに50だけ引く
					enemyImage = enemyGHandle[5];
					if (enemyImage == enemyGHandle[5])//攻撃を食らうと右向きになるようにする
					{
						enemyHP = enemyHP - 50;
						playerImage = playerGHandle[4];
						addattacktime = 500;
					}
					
					}
				}
あるいはこちらのプログラムです。

コード:

if (addattacktime < 0) {//addattacktime == 0だと初期値と被ってしまうので0より小さいとした。
				playerX = preplayerX;
				playerImage = playerGHandle[4];
				addattacktime = 0;//addattacktimeが0にると、元の位置に戻る

				if (count < 50) ++count;//これにより連続で攻撃してもif (Key[KEY_INPUT_A] == 1 && enemyImage == enemyGHandle[5])を考慮して連続攻撃ができる!
				//★あるフレームが進んでから画像がを動くまでを遅くした、ならば、あるフレームが進んだら数字も次の数字に移るまで遅くできるのは?と考えた。
				//if (count < 50) ++frames;//framesが5で割りきれる時に+countが+1されいく。//countが50より小さい時、framesがフレームにより+1ずつされていき、10で割り切れる際にcountが50になるまで+1される、++により最初+1が追加され49かい+1されるので結果的にcountは50になる。
				//if (frames % 10 == 0) {
				//	++count; if (count > 50) { count = 50; }//★上限はないためcountが49より大きくなったらcount = 50により50にする。
				//}
				if (Kcount < 50) ++frames;
				if (frames % 20 == 0) {
					++Kcount; if (Kcount > 50) { Kcount = 50; }//★上限はないためcountが49より大きくなったらcount = 50により50にする。
				}//★++が>よりも優先順位により優先されるため、というか単純に+1されいくため、その先で条件によって(&&とは違い強制ではなく)Kcount > 50ならばcount = 50となっただけである。
			}
こちらがプログラムです。
全体のコード

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: addattacktimeの値が-1のままの原因がわかりません。

#2

投稿記事 by みけCAT » 2ヶ月前

addattacktimeを500より大きくするコードは無いようなので、
348行目(および184行目)の--addattacktimeによりaddattacktimeの値は減っていきます。
そして、addattacktimeが負になると、202行目のaddattacktime < 0が真になり、
205行目でaddattacktimeが0になります。
その後前述の通り348行目でaddattacktimeを減らすため、画面には-1と出るようです。

なお、「addattacktimeの値が-1のまま」と主張しているようですが、
手元での検証では左のキャラクターと右のキャラクターが同じ行にいるときに
Rキーを押し、続いてAキーを押すと、表示されるaddattacktimeの値が正になるのが観測できました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: addattacktimeの値が-1のままの原因がわかりません。

#3

投稿記事 by かずま » 2ヶ月前

質問に対する回答でなくて申し訳ありませんが、
とても気になることがあるのでお伺いします。
Ouxiy さんが書きました:
2ヶ月前

コード:

	if (Key[KEY_INPUT_K] == 1 && Kcount == 50 && enemyImage == enemyGHandle[5]) {//攻撃がキックだった場合
		Kcount = Kcount - 50;//キーKを押すたびに50だけ引く
		enemyImage = enemyGHandle[5];
		if (enemyImage == enemyGHandle[5])//攻撃を食らうと右向きになるようにする
		{
Kcount = Kcount - 50; のところですが、
その前の if (... && Kcount == 50 && ...) により
この時点で Kcount は 50 だと確定していますよね。
Kcount - 50 は 0 ですよね。
なぜ、Kcount = 0; と書かずに、Kcount = Kcount - 50; と書くんですか?

enemyImage = enemyGHandle[5]; のところですが、
その前の if (... && enemyImage == enemyGHandl[5]) により
この時点で enemyImage は enemyGHandle[5] だと確定していますよね。
なぜ、enemyImage = enemyGHandle[5]; が必要なのですか?

if (enemyImage == enemyGHandle[5]) のところですが、
この前に、enemyImage = enemyGHandle[5]; により
enemyImage は enemyGHandle[5] だと確定していますよね。
なぜ、if による判定が必要なのですか?

論理的思考力が欠如しているとしか思えません。
私が何か勘違いをしているのでしょうか?

超初級者
記事: 54
登録日時: 5年前

Re: addattacktimeの値が-1のままの原因がわかりません。

#4

投稿記事 by 超初級者 » 2ヶ月前

論理的思考力が欠如しているとしか思えません。
そこまで言わんでもいいと思うが……。

かずま

Re: addattacktimeの値が-1のままの原因がわかりません。

#5

投稿記事 by かずま » 2ヶ月前

Ouxiy さんが書きました:
2ヶ月前

コード:

if (addattacktime <= 500 && --addattacktime > 0)//addattacktimeが0になるまでの間に攻撃があればaddattacktimeは20に戻る
				
			{//★addattacktimeが500以下で0より大きい時-1されていく、そして500以下ならばかつ0より大きいならばずっと処理されるということ。
「//addattacktimeが0になるまでの間に攻撃があればaddattacktimeは20に戻る」
というコメントはその左の
if (addattacktime <= 500 && --addattacktime > 0)
には対応していませんし、
addattacktime が 20 に戻るコードが見当たりません。
どこにあるのでしょうか?

「//★addattacktimeが500以下で0より大きい時-1されていく」
というコメントはその上の
if (addattacktime <= 500 && --addattacktime > 0)
には対応していません。

if (addattacktime <= 500 && --addattacktime > 0)
というのは、
「addattacktime が 500 以下の場合、addattacktime を 1 減らし、
その 1 減らされた addattacktime が 0 より大きければ」
という意味です。

「//★addattacktimeが500以下で0より大きい時-1されていく」
というコメントの通りにコーディングするなら
if (addattackime <= 500 && addattacktime > 0) { --addattacktime;
となるはずです。
分かりませんか?

Ouxiy
記事: 169
登録日時: 4ヶ月前

Re: addattacktimeの値が-1のままの原因がわかりません。

#6

投稿記事 by Ouxiy » 2ヶ月前

みけCATさんどうもありがとうございます!

コード:

if (addattacktime <= 500 && addattacktime > 0)//addattacktimeが0になるまでの間に攻撃があればaddattacktimeは20に戻る
				
           {
				--addattacktime;
と書いたところ0で止まりました。

超初心者さま、かずまさんのコメントは本当の事なので仕方ありません。
思考力が欠落しているところは自覚しています。
というよりもかずまさんからコメント頂けて嬉しいです。

返信

“C言語何でも質問掲示板” へ戻る