我有一个TurnIndicator
类,它的方法getTurn();
刚刚返回“黑”的字符串,“黑”,然后选择“白色”和“黑”之间交替。
在我的Board
类,它结合了包中的所有类,并使其协同工作,我创建的实例TurnIndicator
类, _turn
,并宣布一个实例变量_t
初始值_t = _turn.getTurn();
然后,我所定义的访问方法为_t
- getT()
现在,当我打印_t
的内在价值Board
类,它打印“黑”,“黑”,等等。 然而,当我访问_t
使用值getT()
在另一个类, SelectPieceListener
,这个打印null
。
为什么会这样呢?
我在下方附上我的类定义。 不相关的部分都被删除。
这取决于我想要做的,最终是c == _st.checkMoveImpossible()
条件,使两个选项之间的玩家选择-
1.通过点击选择按钮(在这种情况下, _cmi
变为1, selectClicked()
方法做期望的动作为if(_cmi == 1)
块。更具体地讲,它改变的顺序_t
值,从而使玩家跳过一匝), 要么
2.单击滚动按钮(在这种情况下, _cmi
变成2,在做类似的事情scrollClicked()
方法让当前玩家移动其他玩家的作品。)。
我只是做了_cmi == 1
的情况下采取行动的工作,通过把里面的东西selectClicked()
方法,但我不得不提供_cmi==2
的情况下(当玩家点击滚动按钮),所以我不得不从方法分离它。
现在,我一直在努力,使其在工作SelectPieceListener
类现在,这样我就可以将它移动到Board
,如果我成功以后类。
然而,我好几个小时尽一切努力失败。 我已经编写一个类或两个在同一时间,这是我第一次做项目,许多类。 我在这样的事情确实没有经验。
如果你能给我一些建议,这将帮助我很多。
我知道这是很乏味的工作,但我未必能独自做到这一点。请花一些时间来阅读代码,并帮助我。
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');
}
}
}