我参加了一个主要班级,其中包括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提早退出。尝试添加一些调试输出。