【´・ω・`】:前回の続きだ。前回はプレイヤーがどのセルを選んだかを
Set %MyRange = Range?
で取得した。そして Row(%MyRange)で行番号、Col(%MyRange)で
列番号を取得できることも話した。今回の説明は下のコードについてだ。
If Row(%MyRange) > 4 And Row(%MyRange)< 9 And \\
Col(%MyRange)>1 And Col(%MyRange)<6 Then
(いろいろな処理)
End If
(●`ε´●):なんだこれは?
【´・ω・`】:このコードはプレイヤーが4×4の盤面内のセルを選択しているかどうかを
判定するためのものだ。
(●`ε´●):なるほど盤面はセルB5からE8までの16マスだったな。
【´・ω・`】:そう。プレイヤーが選択したセルの行番号は5から8までの
整数、列番号は2から5までの整数でなければならない。
そしてもしも盤面内のセルを選択していたならさらに次の
コードを実行する。
For %dy = -1 To 1
For %dx = -1 To 1
If Abs(%dy + %dx)=1 Then
(プレーヤーが選んだ数字パネルと
ブランクパネルを交換するコード)
End If
Next
Next
(●`ε´●):上のコードは(いろいろな処理)のところに書けばいいんだな?
【´・ω・`】:そう。ちょっと複雑になっているが頑張ってついてきて欲しい。
まず大局的な考えを言っておこう。方針はプレイヤーの選んだセルの
上下左右4カ所のどこかにブランクパネルがないかを検査し、もしあれば
それとプレイヤーの選んだセルを交換する・・・だ。ただし、プレイヤーが
B列、E列や5行目、8行目を選んだ場合にマスの外側のブランクセルを
ブランクパネルと誤認しないようにしておかなければならない。
(●`ε´●):その方法はいろいろあるらしいな?
【´・ω・`】:うん。盤面の外側のセルには何か目印となるような記号を入力しておくような
てもあるがこんかいは、それはやっていない。
さて、それではコードの説明だ。二つのループで%dy、%dxはそれぞれ
-1,0,1になる。
%dy=-1は上、%dy=1は下、%dx=-1は左、%dx=1は右方向を示している。
Abs()は絶対値になるからAbs(%dy + %dx)=1 ならば上下左右の
いずれかになる。
(●`ε´●):なるほど・・・でそのときには内側の(プレーヤーが選んだ数字パネルと
ブランクパネルを交換するコード) を実行するというわけだな。
【´・ω・`】:うん。
(●`ε´●):具体的には?
【´・ω・`】:こんなかんじかな。
If Row(%MyRange)+%dy > 4 And Row(%MyRange)+%dy< 9 And \\
Col(%MyRange)+%dx>1 And Col(%MyRange)+%dx<6 Then
If Cells(Row(%MyRange)+%dy, Col(%MyRange)+%dx)="" Then
Cells(Row(%MyRange)+%dy, Col(%MyRange)+%dx)=\\
Cells(Row(%MyRange), Col(%MyRange))
Cells(Row(%MyRange), Col(%MyRange))=""
End If
End If
・・・赤いコードはプレイヤーがB列、E列や5行目、8行目を選んだ場合に
マスの外側のブランクセルとプレイヤーが選んだ数字パネルを交換しない
ためのものだ。
(●`ε´●):では内側のコードがプレイヤーが選んだ数字パネルとブランクパネルを
交換するためのものだな。
【´・ω・`】:そう。\\記号は行継続文字だ。SuperPlayRiteは本来は1行々々、命令を
書かなければならない。しかし、あまり長くなると見づらいので\\記号を
使っているが、その部分は本来、1行だということだ。
(●`ε´●):わかった。で、今日やった部分をまとめるとこうなるということだな。
If Row(%MyRange) > 4 And Row(%MyRange)< 9 And \\
Col(%MyRange)>1 And Col(%MyRange)<6 Then
For %dy = -1 To 1
For %dx = -1 To 1
If Abs(%dy + %dx)=1 Then
If Row(%MyRange)+%dy > 4 And Row(%MyRange)+%dy< 9 And \\
Col(%MyRange)+%dx>1 And Col(%MyRange)+%dx<6 Then
If Cells(Row(%MyRange)+%dy, Col(%MyRange)+%dx)="" Then
Cells(Row(%MyRange)+%dy, Col(%MyRange)+%dx)=\\
Cells(Row(%MyRange), Col(%MyRange))
Cells(Row(%MyRange), Col(%MyRange))=""
End If
End If
End If
Next
Next
End If
【´・ω・`】:次回はゲームの終了判定だ。
最近のコメント