関数を呼び出したが関数の中身がうまく機能しない

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

関数を呼び出したが関数の中身がうまく機能しない

#1

投稿記事 by roji » 4年前

メインプログラムのif (talk == 0) { talkdrow(); }の部分でtalk.hの中に書いてある関数 talkdrow()の中の変数talkの値が変わらないため画面が展開しません。そこでメインの変数をSeenに変えて実行すると変数talkがキーAにより上がりました。
ですが、talk == 1とtalk == 2の時の文字が描画されません。どうしたら描画されるでしょうか。
また、なぜメインプログラムの変数をSeenに編集したら変数talkがキーAによりちゃんと上がったのでしょうか。
というのも編集前のメインのtalkはヘッダファイルtalk.hの変数talkと同じなので、talk.hのtalkがキーAにより上がるとメインプログラムの変数talkも値を引き継いで上がった値を持つと思っていたためです。
最後に戦闘画面に移る際に最初の数秒間だけ自分と敵の画像が描画されないのですがどうしたらいいでしょうか。
以上2つの質問と1つの疑問ですが、どうかよろしくお願いいたします。

こちらがメインプログラムです。
https://pastebin.com/iy3mjPD9
こちらがplayer2.hです。
https://pastebin.com/P35NrEhy
こちらがkey.hです。
https://pastebin.com/pfXnBGad
こちらがtalk.hです。
https://pastebin.com/mV2cxcks


変数を編集したメインプログラム。
https://pastebin.com/rTn4bnMd
メインを編集したのでこちらも編集しました。
https://pastebin.com/i0prrkbe

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

Re: 関数を呼び出したが関数の中身がうまく機能しない

#2

投稿記事 by みけCAT » 4年前

roji さんが書きました:
4年前
メインプログラムのif (talk == 0) { talkdrow(); }の部分でtalk.hの中に書いてある関数 talkdrow()の中の変数talkの値が変わらないため画面が展開しません。
これは本当ですか?
「メイン関数の中の変数talkの値が変わらないため画面が展開しません。」の間違いではないですか?
roji さんが書きました:
4年前
talk == 1とtalk == 2の時の文字が描画されません。どうしたら描画されるでしょうか。
色の取得をグローバル変数の初期化時(→DxLib_Init()を呼ぶ前)ではなく
DxLib_Init()を呼んだ後にすることで、正しく色を取得できるようにすると、
描画される可能性が考えられます。
(ざっとコードを眺めただけなので、間違っているかもしれません)
roji さんが書きました:
4年前
また、なぜメインプログラムの変数をSeenに編集したら変数talkがキーAによりちゃんと上がったのでしょうか。
というのも編集前のメインのtalkはヘッダファイルtalk.hの変数talkと同じなので、talk.hのtalkがキーAにより上がるとメインプログラムの変数talkも値を引き継いで上がった値を持つと思っていたためです。
「編集前のメインのtalk」はmain関数のローカル変数であり、同じ名前でもスコープが違う別の変数です。
Seenはmain関数内でローカル変数として定義されていないので、
「Seenに編集したら変数talkが」の「変数talk」がSeenのことであると仮定すれば、同じ変数を参照できたのでしょう。
roji さんが書きました:
4年前
最後に戦闘画面に移る際に最初の数秒間だけ自分と敵の画像が描画されないのですがどうしたらいいでしょうか。
ざっとコードを眺めただけではわかりませんでした。
後で詳しく見たいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

roji
記事: 7
登録日時: 4年前

Re: 関数を呼び出したが関数の中身がうまく機能しない

#3

投稿記事 by roji » 4年前

ありがとうございます。
みけさんの意見を参考にメインプログラムとtalk.hを書き直しました。おかげで会話の部分が描画されました。

メインプログラムです。
https://pastebin.com/nz4eCsJj
talk.hです。
https://pastebin.com/PULuNpMU

ただまだ解決しない問題が二つあります。
一つはtalk = 2でstart = 1となるので200になるまで+1ずつされるように書いたのですが、なぜかtalk = 2の時はstartは1でtalk = 3の時にstartが200になるまで増えていきます。

二つ目はif (Seen == 1) よりSeenが1になったら戦闘が開始するのですが、開始する前から敵が移動してしまい綺麗に戦闘が始まりません。
どうしたらいいでしょうか。

roji
記事: 7
登録日時: 4年前

Re: 関数を呼び出したが関数の中身がうまく機能しない

#4

投稿記事 by roji » 4年前

コード:

if(stayhere>0&&++stayhere<100){
			enemyX = 4, enemyY = 1;   // 敵の位置
			playerX = 1, playerY = 1;  // 俺の位置
		}
を付け加えることで戦闘画面が始まるまでの間は敵が勝手に動かないようにできました。

Noir

Re: 関数を呼び出したが関数の中身がうまく機能しない

#5

投稿記事 by Noir » 4年前

オフトピック
こちらではユーザー名を途中変更する事は禁止されています。お知らせまで

返信

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