我参加了一个主要班级,其中包括2个球员的井字游戏。
现在,我开设了一个新的班级,扩展了主要班级,但又扩大了人类对简单AI的认识。
在新类中,我正在使用带有处理程序的线程,该处理程序检查是否轮到人类,如果不是,应该随机移动。问题是我的处理程序从不执行。

public class EasyAI extends MainActivity{

Thread thread;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    thread = new Thread(new moveAI());
    thread.start();
}

class moveAI implements Runnable{
    @Override
    public void run()
    {
        Looper.prepare();
        if(isMyTurn == false)      //isMyTurn is a public variable in Main class
        {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                   moveAI();
                }
            },500);
        }
    }
}

public void moveAI(){...}
} // end class


我知道我做错了。我希望你能理解我的想法。但是我该怎么做呢?

最佳答案

让我问你一个问题。您为什么为此使用并发?据我所知,您在不需要的地方增加了额外的复杂性。

接下来,此代码片段不足以检测问题。这可能是与并发相关的(例如,isMyTurn未标记为volatile,而执行moveAI的线程正在处理器缓存中缓存错误的版本,因为编译器可以对其进行优化)

也许您的moveAI提早退出。尝试添加一些调试输出。

09-10 18:22