TurnIndicator
クラスがあり、そのメソッドは「BLACK」、「BLACK」getTurn();
の文字列を返し、 「WHITE」と「BLACK」を交互に返します。
パッケージ内Board
のすべてのクラスを結合して連携させるクラス内で、クラス のインスタンスを作成し、TurnIndicator
初期値を持つ_turn
インスタンス変数を宣言してから、 -
のアクセサ メソッドを定義しました。_t
_t = _turn.getTurn();
_t
getT()
今、クラス_t
内の値を出力すると、 "BLACK"、 "BLACK"などが出力されます。ただし、別のクラスで使用して値にアクセスすると、 が出力されます。Board
_t
getT()
SelectPieceListener
null
なぜそうなのですか?
以下にクラス定義を添付します。無関係な部分は削除されます。
私が最終的にやりたいことは、c == _st.checkMoveImpossible()
条件に応じて、ゲーム プレイヤーに 2 つのオプションのいずれかを選択させることです。
1.選択ボタンをクリックする (この場合、_cmi
は1になり、selectClicked()
メソッドはブロックに対して必要なアクションを実行しif(_cmi == 1)
ます。より具体的には_t
、プレイヤーが 1 ターンをスキップするように、値の順序を変更します)、または
2.スクロールボタンをクリックする (この場合、_cmi
は2になり、現在のプレーヤーに他のプレーヤーの駒を移動させる方法で同様のことを行い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');
}
}
}