最近、ActionScript 3カードゲームプロジェクトに取り組んでいますが、イベントハンドラーで問題が発生し、少し複雑になりました。私はそれを説明しようとします:
カードをプレイするために交代で参加するプレイヤーの数は不確定です。それを行った後、彼らはターンを右側のプレーヤーに任せます。
function Round(table:Table, lead:Player)/*Table is the list of players.
Lead is the person that starts the round*/
{
private var query:int = 0;
private var roundEnd:Boolean = false;
private var currentplater:Player = lead;
while(roundEnd == false)
{
query = currentPlayer.hasTurn();/*I'll explain this one later. It's
the problematic one*/
//Game stuff happens.
currentPlayer = currentPlayer.nextPlayer;/*Once the turn is over,
it gets assigned to the next player*/
if(currentPlayer.nextPlayer == lead)
{
roundEnd = true;//Everyone has played
}
}
}
そこにコメントされているように、複雑なものはhasTurn
です。この関数は、Playerクラスからアクティブ化し、プレーヤーがイベントを処理して整数値を返すためのアクセス許可をトリガーする必要があります。
public function hasTurn():int
{
for each(var cards:Card in hand)
{
cards.addEventListener(MouseEvent.CLICK, playCard);
}
}
それとその後
public function playCard(theCard:Card)
{
for each(var cards:Card in hand)
{
cards.removeEventListener(MouseEvent.CLICK, playCard);
}
//More game stuff happens. Not currently relevant.
}
私がここで行うことは、プレイヤーの手札にあるすべてのカードをプレイできるようにし、そのうちの1つがプレイされたときにそれらの権限を奪うことですが、値を返すことは決してなくRound
、さらに重要なことに、次のプレイヤーに後で再生します。私は頭の中でこの問題を何度か回避しましたが、コードが機能し続けることができるhasTurn
ように、値を返すか、その実行を終了する方法を見つけることができないようです。Round
この問題のロジックを間違った方法で処理していますか?