HSPのif文の実行内容が理解できません。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぶたまる

HSPのif文の実行内容が理解できません。

#1

投稿記事 by ぶたまる » 11年前

大学の授業で簡単なゲームを作りました。(先生の配ったプリントのコードをみただけですが...)
次がそのプログラムです。

コード:

buffer 1 ;キャラ隠れ図
picload "chardata.bmp"
buffer 2 ;背景
picload "fuji.jpg"
screen 0,480,320 ;表示スクリーン

gmode 2 ;透過処理

*Loop1
	redraw 0

	pos 0,0
	gcopy 2,0,0,480,320


	if Tgtime=0 { ;敵の出現
		Tgtime=20
		Tgnum=rnd(6)
	}
	else {
		if Tgnum<3 {
			pos 80,80
			gcopy 1,384+Tgnum*64*64,384,64,192
		}
		else {
			pos 336,80
			gcopy 1,384*(Tgnum-3)*64,384,64,192
		}
		Tgtime=Tgtime-1
	}

	stick Key,15 ;キーゲット

	pos 145,75
	if (Key&1)=1 or (Key&4)=4 {
		if (Key&1)=1 {Px=0   :Tg=1}
		if (Key&5)=4 {Px=192 :Tg=4}
		Py=192
		if (Key&2)=2 {Py=0   :Tg=Tg-1}
		if (Key&8)=8 {Py=384 :Tg=Tg+1}
		gcopy 1,Px,Py,192,192

		if Tg=tgnum { ;攻撃成功
			Tgtime=0
		}
	}
	else {
		gcopy 1,384,192*(Anime/8),192,192
	}
	Anme=(Anime+1)\16

	redraw 1

	wait 5
	goto *Loop1
わからないのはこのif文の中身です。

if (Key&1)=1 or (Key&4)=4 {
if (Key&1)=1 {Px=0 :Tg=1}
if (Key&4)=4 {Px=192 :Tg=4}
Py=192
if (Key&2)=2 {Py=0 :Tg=Tg-1}
if (Key&8)=8 {Py=384 :Tg=Tg+1}

質問1:HSPについてまだよく理解できていないのですごく初歩的な質問なのですが、
    「{Px=0 :Tg=1}」という記述では、Px=0とTg=1の両方の代入が実行されるのですか?

質問2:PxとPyとTgという変数が何を表しているのかよくわかりません。
    ←を押したらキャラクターが左攻撃の画像に切り替わり、←と↑を同時押したら、
    キャラクターが、左上攻撃の画像に切り替わるようです。
    また、Pxには0か192を代入していますがなぜ0と192なのでしょうか?
    また、Pyには192が代入されて、↑か↓が押されたら0か384を代入していますが 
    何故この値を代入するのかよくわかりません。
    Tgも何故加減算したり、1か4を代入するのかわかりません。

よろしくお願いします。

ぶたまる

Re: HSPのif文の実行内容が理解できません。

#2

投稿記事 by ぶたまる » 11年前

すみません、画像データを載せ忘れました。
背景
画像
キャラデータ
画像

よろしくお願いします。

かなたん
記事: 50
登録日時: 12年前
連絡を取る:

Re: HSPのif文の実行内容が理解できません。

#3

投稿記事 by かなたん » 11年前

ここはC言語系の掲示板ですよ?と思いつつわかる範囲で答えてみます。
HSPなつかしいなぁ。
ぶたまる さんが書きました:質問1:HSPについてまだよく理解できていないのですごく初歩的な質問なのですが、
    「{Px=0 :Tg=1}」という記述では、Px=0とTg=1の両方の代入が実行されるのですか?
これはその通です。
HSPはC言語などと違って命令文の後に;を打つ必要はなく、そのままでは1行に1つの命令しか書けません。
その代わり、命令文を:でつなぐことによって複数の命令を1行に書くことができます。
ぶたまる さんが書きました:質問2:PxとPyとTgという変数が何を表しているのかよくわかりません。
    ←を押したらキャラクターが左攻撃の画像に切り替わり、←と↑を同時押したら、
    キャラクターが、左上攻撃の画像に切り替わるようです。
    また、Pxには0か192を代入していますがなぜ0と192なのでしょうか?
    また、Pyには192が代入されて、↑か↓が押されたら0か384を代入していますが 
    何故この値を代入するのかよくわかりません。
    Tgも何故加減算したり、1か4を代入するのかわかりません。
そのPx,Py,Tgがどこでどのように使われているのかが分からないので、私にはなぜその数字なのかわかりません。
まずはそれらがどこでどのように使われているのかを調べ、それでもわからなければその数値を違うものに書き換えたらどうなるのかを試してみるといいと思います。
どこでどうなったらどうなるのかが分かれば、どこでなにをすればどうなるのかが分かると思います。
わからないことも、ブログに書いているうちにひらめくこともある。
本当に行き詰ったら、考え直すのも1つの手かな。

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

Re: HSPのif文の実行内容が理解できません。

#4

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

ぶたまる さんが書きました:また、Pxには0か192を代入していますがなぜ0と192なのでしょうか?
また、Pyには192が代入されて、↑か↓が押されたら0か384を代入していますが 
何故この値を代入するのかよくわかりません。
Px,Pyはその下のgcopyで使用されています。
chardata.bmpの中のキャラクターの画像の位置がその座標になっているからでしょう。
ぶたまる さんが書きました:Tgも何故加減算したり、1か4を代入するのかわかりません。
Tgはどの位置を狙うかを示す変数で、Tgとtgnumが等しいときに当たったと判定されるようです。
敵の位置を示すTgnumは18行目で指定されています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぶたまる

Re: HSPのif文の実行内容が理解できません。

#5

投稿記事 by ぶたまる » 11年前

返信が遅れてすみません。
if文の考えはあっていたようですね。
Px,Pyはキャラデータの画像の座標だったのですね。
Tgは攻撃する方向ということですね。

理解できました。
助かりました、ありがとうございます!

閉鎖

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