0

TurnIndicatorクラスがあり、そのメソッドは「BLACK」、「BLACK」getTurn();の文字列を返し、 「WHITE」「BLACK」を交互に返します。

パッケージ内Boardのすべてのクラスを結合して連携させるクラス内で、クラス のインスタンスを作成し、TurnIndicator初期値を持つ_turnインスタンス変数を宣言してから、 - のアクセサ メソッドを定義しました。_t_t = _turn.getTurn();_tgetT()

今、クラス_t内の値を出力すると、 "BLACK"、 "BLACK"などが出力されます。ただし、別のクラスで使用して値にアクセスすると、 が出力されます。Board_tgetT()SelectPieceListenernull

なぜそうなのですか?

以下にクラス定義を添付します。無関係な部分は削除されます。

私が最終的にやりたいことは、c == _st.checkMoveImpossible()条件に応じて、ゲーム プレイヤーに 2 つのオプションのいずれかを選択させることです。

1.選択ボタンをクリックする (この場合、_cmi1になり、selectClicked()メソッドはブロックに対して必要なアクションを実行しif(_cmi == 1)ます。より具体的には_t、プレイヤーが 1 ターンをスキップするように、値の順序を変更します)、または

2.スクロールボタンをクリックする (この場合、_cmi2になり、現在のプレーヤーに他のプレーヤーの駒を移動させる方法で同様のことを行いscrollClicked()ます)。

すべてをメソッド内に配置することで、ケース アクションのみを機能させましたが、ケース (プレーヤーがスクロール ボタンをクリックしたとき) を提供する必要があったため_cmi == 1、メソッドから分離する必要がありました。selectClicked()_cmi==2

今のところ、私はそれをクラスで機能させようとしているので、成功した場合は後でクラスにSelectPieceListener移すことができます.Board

しかし、私が何時間も試みたすべての試みは失敗しました。一度に 1 つまたは 2 つのクラスをコーディングしましたが、多数のクラスを含むプロジェクトを行うのはこれが初めてです。私はこの種のことは本当に未経験です。

アドバイスをいただければ、とても助かります。

私はこれが本当に退屈な作業であることを知っていますが、私はこれを自分で行うことができないかもしれません..コードを読んで助けてください。

public class Board {
private Structure _st;
private TurnIndicator _turn;
private String _t;
private int _cmi;

public Board() {
    _turn = new TurnIndicator();
    _t = _turn.getTurn();
    _cmi = 0;   
}

public ScrollListener getScroll(){
    return _scroll;
}

public String getT() {
    return _t;
}
public int setcmi(int cmi) {
    return _cmi = cmi;
}

public void selectClicked(char dir) {
    int index = _scroll.getX();
    HNode<ArrayList<String>> current = _st.getPosition(index);
    System.out.println("checkMoveImpossible() = " + _st.checkMoveImpossible());
    System.out.println("_t in Board = " + _t);

    if(!current.getDatum().isEmpty()) {

        if(_t == current.getDatum().get(current.getDatum().size()-1) && _cmi == 0) {
            if(0 <= index && index < 17 && index != _st.indexOfSpBack()) {
                current.forward(_t, current.getDatum().size());
            }
            else if(17 <= index && index < 25) {
                char direction = dir;
                _st.start(current, direction);
            }
            else if(index == _st.indexOfSpBack()) {
                current.backward(_t, current.getDatum().size()-1);
            }

            _t = _turn.getTurn();
            System.out.println("turn is "+ _t);
            display();
        }


        else if(_t != current.getDatum().get(current.getDatum().size()-1) && _cmi == 0) {
            String s = _t == "WHITE" ? "BLACK" : "WHITE";
            System.out.println("It's "+_t+"'s turn now and only "
            +s+" can move this piece.");
        }

    }

    if(_cmi == 1) {
        _t = _turn.getTurn();
        _cmi = 0;
        System.out.println("_cmi if block is reached");
        display();
    }
    update();

}

以下は SelectPieceListener クラスの定義です

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class SelectPieceListener implements ActionListener {
    private Board _board;
    private Structure _st;
    private String _t;

    public SelectPieceListener(Board board) {
        _board = board;
        _st = _board.getStructure();
        _t = _board.getT();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        char c = _t == "WHITE" ? 'b' : 'w';
        _board.selectClicked('l');          
        System.out.println(_t);
        if(c == _st.checkMoveImpossible()) {
            String theOther = _t == "WHITE" ? "BLACK" : "WHITE";
            System.out.println("No possible move for "+_t+": click select to skip turn, " +
                    "or click scroll to move " + theOther + " pieces.");
            _board.setcmi(1);
            _board.update();
            _board.selectClicked('l');          
        }

    }
}
4

3 に答える 3