Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用实例变量和方法定义类,使其在两个值之间交替,并对其进行修改_Java_Function_Methods_Logic - Fatal编程技术网

Java 如何使用实例变量和方法定义类,使其在两个值之间交替,并对其进行修改

Java 如何使用实例变量和方法定义类,使其在两个值之间交替,并对其进行修改,java,function,methods,logic,Java,Function,Methods,Logic,我正在尝试定义一个可以用于棋盘游戏的类。 我想我将使用accesor方法(getTurn())作为棋盘游戏类的参数 当游戏开始时,它应该在前两次给出“黑色”、“黑色”,然后在“白色”和“黑色”之间交替。 我的startTurn()方法返回这个值 在游戏进行到一半的时候,在当前玩家(WLOG,比如说他的黑人)移动之后,我需要检查一些条件(如果下一个玩家没有移动的可能),并且根据它,我想改变它的顺序 我需要定义的方法是(因此我们假设当前回合是黑色的,现在继续下一回合) 1) 如果下一个玩家选择跳过他

我正在尝试定义一个可以用于棋盘游戏的类。 我想我将使用accesor方法(getTurn())作为棋盘游戏类的参数

当游戏开始时,它应该在前两次给出“黑色”、“黑色”,然后在“白色”和“黑色”之间交替。 我的startTurn()方法返回这个值

在游戏进行到一半的时候,在当前玩家(WLOG,比如说他的黑人)移动之后,我需要检查一些条件(如果下一个玩家没有移动的可能),并且根据它,我想改变它的顺序

我需要定义的方法是(因此我们假设当前回合是黑色的,现在继续下一回合)

1) 如果下一个玩家选择跳过他/她的回合,它应该再次给出黑色,然后像以前一样在白色和黑色之间交替

像这样:B->B->W->B->。。。。。。。。W->B |->B->W->B->

或者如果当前玩家是白人

像这样:B->B->W->B->。。。。。。。。B->W |->W->B->W->

,其中B或W后面的“|”只是我用来解释我测试下一个玩家是否有可能移动(使用一种方法)的符号,如果没有,就这样改变回合。 (我猜reverseTurn()方法可以做到这一点,这可能不会太难。)

2) 如果下一个玩家选择移动另一个玩家的棋子,它应该给黑色(这样白色可以移动黑色棋子),然后给黑色(这样黑色可以轮到他/她),然后像以前一样在白色和黑色之间交替

像这样:B->B->W->B->。。。。。。。。W->B->B->B->W->B->

或者如果当前玩家是白人

像这样:B->B->W->B->。。。。。。。。B->W |->W->W->B->W->

,其中B或W后面的“|”只是我用来解释我测试下一个玩家是否有可能移动(使用一种方法)的符号,如果没有,就这样改变回合

3) 另一个问题是,如果我有以上两个问题的答案,我如何在我的棋盘游戏课上使用它?我所能想到的就是初始化TurnIndicator,在构造函数中调用startTurn(),在我将字符串作为turn参数传递时分配getTurn(),并在每次玩家移动时调用startTurn()? 这行吗?(因为我很不确定)

如果是的话,我想什么时候改变订单呢?然后我是否应该有条件地调用该方法而不是startTurn()方法

我在这个问题上纠缠了很长时间。特别是问题2。。 任何建议都将不胜感激

以下是我到目前为止为TurnIndicator课程所做的工作

谢谢

public class TurnIndicator {
    private boolean _isWhite;
    private int _count = 0;
    private String _currentTurn;

    public void startTurn() {
        if(_count<3)
            _count++;

        if(_count == 1 || _count == 2) {
            _currentTurn = "BLACK";
        }
        else {
            _isWhite = !_isWhite;
            _currentTurn = _isWhite ? "WHITE" : "BLACK";
        }
    }

    public String getTurn() {
        return _currentTurn;
    }

    public void reverseTurn() {
        _currentTurn = _currentTurn == "WHITE" ? "BLACK" : "WHITE";
    }

    public String skipTurn() {
        ?
    }
    public String takeOthersTurn() {
            ?
    }
}
公共类转向指示器{
私有布尔值为白色;
私有整数_计数=0;
私有字符串_currentTurn;
public void startTurn(){

如果(_count我认为你在“转身指示器”中加入了太多的逻辑。跳过转身只是“下一个转身”-当前玩家没有移动/打球的事实不会改变转身顺序

另外,你有两个变量来指示轮到谁了。
\u isWhite
\u currentTurn
两者都有。更糟糕的是,你的
反向旋转
会改变一个而不改变另一个。我建议你使用
bool
[假设你实际上只想有两个玩家],如果你需要“字符串”轮到谁,调用一个返回它的函数:

 std::string playerColour() 
 { 
     if (_isWhite) return "WHITE"; 
     return "BLACK";
 }
当游戏开始时,它应该在前两次显示“黑色”、“黑色”,然后在“白色”和“黑色”之间交替显示

在内部
startTurn()
为什么不做:

if(_count<3)  {
    _count++;
    _currentTurn = "BLACK";
}

<代码>如果(这看起来非常相似。为什么你还用C++来标记?C++有什么用?抱歉,你能取消投票吗?我需要实现这些,因为这是项目描述。玩家不能移动其他玩家的棋子除非它是1),2条件。移动棋子把字符串“黑色”或“白色”。作为它的论点。这就是为什么我需要这个…真的没有办法实现吗??