あなたはおそらくこのような疑似コードをするでしょう:
すべてのドットがdots
配列にあると仮定します。
for (var i: Number = 0; i < dots.length; i++) {
dots.addEventListener(MouseEvent.CLICK, dotClicked, false, 0, true);
}
dotSelected = null;
function dotClicked(evt:MouseEvent):void {
if (dotSelected && isNeighbor(evt.target, dotSelected)) {
showLineConnecting(evt.target, dotSelected)
dotSelected = null;
} else if (!dotSelected) {
highlightDot(evt.target);
dotSelected = evt.target;
} else {
showError("You must click an adjacent dot");
}
}
OPの要請により、これが起こっていることです。
for (var i: Number = 0; i < dots.length; i++) {
dots.addEventListener(MouseEvent.CLICK, dotClicked, false, 0, true);
}
すべてのドットにイベントリスナーを追加します。ここでは、ドットの配列がすでに定義されていると想定しています。配列内の各インスタンスは、MovieClip(可能性が高い)、Sprite、または別のDisplayObjectになります。
dotSelected = null;
変数を使用して、現在選択されているドットを追跡します。ゲーム開始時にドットが選択されないため、nullに設定します。
function dotClicked(evt:MouseEvent):void {
if (dotSelected && isNeighbor(evt.target, dotSelected)) {
showLineConnecting(evt.target, dotSelected)
dotSelected = null;
} else if (!dotSelected) {
highlightDot(evt.target);
dotSelected = evt.target;
} else {
showError("You must click an adjacent dot");
}
}
これは、任意のドットがクリックされたときに呼び出される関数です。説明のために、ゲームの最初のクリックを見てみましょう。 dotSelected
nullなので、最初if
はfalse
。2番目if
はですがtrue
、(!dotSelected)
ですtrue
。highlightDot
そこで、ドットを引数として呼び出した関数を実行します。その関数は次のようになります。
function hightlightDot(dot:Dot):void {
dot.gotoAndStop("selected");
}
次に、2回目のクリックが行われます。if
これで、最初の、、の最初の部分dotSelected
はですtrue
。2番目の部分が評価されます。もう一度、作り上げた関数を入れましたisNeighbor
。このisNeighbor
関数は、クリックされたばかりのドットとすでにクリックされたドットの2つの引数を取ります。この関数は、2つのドットが隣接していることを確認する必要があります。これは次のようなものかもしれません...
function isNeighbor(dot1:Dot, dot2:Dot):void {
return ((dot1.xGrid == dot2.xGrid && Math.abs(dot1.yGrid - dot2.yGrid) == 1) || (Math.abs(dot1.xGrid - dot2.xGrid) == 1) && dot1.yGrid == dot2.yGrid));
}
上記の関数は、のインスタンスにDot
いくつかのプロパティがxGrid
ありyGrid
、それらがプレイボードのどこにあるかを定義することを前提としています。それらが同じ行にあり、1列離れている場合、それらは隣接しています。それらが同じ列にあり、1行離れている場合、それらは隣接しています。
関数で最後に発生することshowLineConnecting
が呼び出されます。この関数は、隣接する2つのドットを引数として取ります。次に、選択した方法でそれらの間に線を引きます。最後に、dotSelectedがnullに戻され、別のドットのセットを選択できるようになります。
Dot
私が今気づいたことの1つは、すべてのネイバーに接続されたときにトリガーされる追加のプロパティを用意して、選択できなくなった場合に役立つことです。
ボックスが作成されたことを認識して処理するロジックも必要になります。そのためには、たった今描いた線を考えれば、可能性を繰り返すだけでしょう。描かれた線ごとに、作成された可能性のあるボックスは2つだけです。したがって、両方を確認してください。エッジに注意してください。