我有一个TurnIndicator
类,它的方法只返回"BLACK"、"BLACK"getTurn();
的字符串,然后在"WHITE"和"BLACK"之间交替。
在我的Board
类中,它结合了包中的所有类并使其一起工作,我创建了一个TurnIndicator
类的实例_turn
,并声明了一个_t
具有初始值的实例变量然后,我为-_t = _turn.getTurn();
定义了一个访问器方法。_t
getT()
现在,当我_t
在类中打印值时Board
,它会打印"BLACK"、"BLACK"等等。但是,当我在另一个类中访问_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');
}
}
}