« HSPTV!メルマガ 第36号 | メイン | 【講座】HSP3ワンポイントテクニック 第18回 »
2007年04月03日
【講座】HSPよく使うフレーズ 第27回 15パズルのこと
今回は”kuroさん”からの質問。
”HSP ゲームプログラミング・クックブック ”のスクリプトに
関する内容だ。
ちょっと専門的?な質問だから”よく使うフレーズ”には
あまりふさわしくないかもね。
分からなくても落ち込まなくてイイタイプのテクニックです。
------------
はじめまして。 kuroと申します。
HSPゲームプログラミングクックブックの中に、「15パズル」のサンプル
スクリプトがあります。
その中の71-81行目、問題作成のため入れ替える場所を決める
rnd a,2
rnd b,3
if a{
cx=nx :cy=(ny+b+1)&3
}else{
cy=ny :cx=(nx+b+1)&3
}
【 秀和システム『HSPゲームプログラミング・クックブック』
”15パズル”P85 より引用 】
の部分のスクリプトの意味がよく分かりません。
どうして、空のマスに重ならず、かつ空のマスに接触するマスを
選ぶことができるのでしょうか。
------------
どうも!メールありがとう!
さて、どのようになってるか説明します。
空のブロックの座標はnx、nyです。
クリック対象の座標はcx、cy。
最初に変数aの乱数で、クリックする場所が、"xが同じ"か"yが同じ"か
を振り分ける。
クリックするにはXかYが、空のブロックと同じ必要があるからです。
構造は同じなので「cx=nx :cy=(ny+b+1)&3」の解説をします。
この場合はクリックするx座標は空の場所と同じ。
y座標は「(ny+b+1)&3」
分解すると
ny 空の座標
b 0から2
1 数値1
&3 0-3に変換する命令
となります。
■最初は&3なしで考えます。
ny=0の場合、bが0だと1
0 1 2 3
0【 】【空 】【 】【 】
1【 】【b=0】【 】【 】
2【 】【b=1】【 】【 】
3【 】【b=2】【 】【 】
という並びになります。(今回1の列だけを考えます。)
nyは0から3の可能性があるのですが、どの値の場合でもスタート位置が
ずれて、数値が循環するというのは分かりますか?
仮にny=3なら
・
・
・
【空 】
<ブロックここまで
【b=0】
【b=1】
【b=2】
このようにはみ出てしまいます。
■次に&3があると、はみ出た数値をうまく戻す処理がうまくできます。
2進数は
000
001
010
011
100
101
110
111
という値の増え方をします。
右側の2桁だけをみると同じパターンを繰り返しているのが分かります。
"2桁だけをみる処理"これが「&3」です。
(&「AND」は2桁を切り取るような結果になります。)
&3で
00、01、10、11 このループになるので、
はみ出た部分がぐるっともどります。
【b=0】
【b=1】
【b=2】
【空 】
こんな感じになります。
以上です。
というワケでクックブックをもってないとわかりにくいネタで
ゴメンナサイ。
いまでも売ってるといいんだけどねぇ。
(うすあじ)
投稿者 usuaji : 2007年04月03日 00:56
口臭チェッカー市場