3

私は実際にメモリーゲームに取り組んでおり、ゲームのゲームプレイ部分を書くべきところに行き詰まっています。Nだから:私はcardの配列を持っていますobjects。各オブジェクトにはcardNum、識別子と呼ばれる属性があります。その配列にを書くべきだと思うactionListenerので、カードを裏返すと、裏返されたカードcardNumが 2 つの要素の配列に配置され、配列の 2 つの要素が等しい場合、ペアが見つかります。問題は、最後に裏返されたカードを取得する方法がわからないことcardNumです。どんな助けでも大歓迎です。

これが私が試した方法です:

private void easyGame(Card[] cards) {
    int flippedCards = 0;
    int card1;

    while(flippedCards != 24) {
        for(int i=0; i<cards.length; i++) {
            if(cards[i].getIsFlipped())
                flippedCards ++;
        }
        if(flippedCards % 2 == 0 && flippedCards > 0)
            for(int i=0; i<cards.length; i++) {
                card1 = getCardIndByCardNum(cards[i].getCardNum(), cards, i);

                if(!cards[card1].getIsFlipped()) {
                    for(int j=0; j<cards.length; j++) {
                        if(cards[i].getIsFlipped())
                            cards[i].flip();
                    }
                    flippedCards = 0;
                    break;
                }
            }
    }
}

問題は、このメソッドを呼び出すと、ゲームが描画されないことです。どうにか使用スレッドを使用できますか?

編集

クリックされたカードのインデックスを取得する方法は次のとおりです。UI で呼び出します。

private void setCardHandlers() {
    for(final Card card : cards) {

        card.setOnMouseClicked(new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent t) {
                clickedCardInd = getChildren().indexOf(card)-1;
            }
        });
    }
}

これが私がそれを使用している方法です:

setOnMouseReleased(new EventHandler<MouseEvent> () {

        @Override
        public void handle(MouseEvent t) {
            int cardIndex = clickedCardInd; // get index of what user clicked
            clickedCardInd = -1;
            if (cardIndex != -1 && moveRequestedFlag) { // our controller waits for the move
                // get the position and report
                moveRequestedFlag = false; // we handled the move
                //System.out.println(cardIndex);
                nextMove.setMove(cardIndex); // this will unblock controller's thread
            }
        }

    });

カードの反転に遅延がありeasyGamerequestMoveメソッドでも両方のインデックスが同じに設定されます。

4

1 に答える 1