我有一个老虎机代码,它在每个插槽中通过maxCount滚动随机结果。一旦达到maxCount,该插槽将停止。但是,有时不止一次调用slot,stop方法。有什么想法吗?
TimerTask
TimerTask task = new TimerTask() {
@Override
public void run() {
runOnUiThread(new TimerTask() {
@Override
public void run() {
count++;
if (!slotOneFinished){
animate(randomSwitchCount(), slotOne, count);
}
if (!slotTwoFinished) {
animate(randomSwitchCount(), slotTwo,count);
}
if (!slotThreeFinished) {
animate(randomSwitchCount(), slotThree,count);
}
}
});
}
};
停止功能
public void stop(ImageSwitcher slot){
if (slot.equals(slotOne)){
slotOneFinished=true;
Toast.makeText(MainActivity.this, "1",Toast.LENGTH_SHORT).show();
}
if (slot.equals(slotTwo)){
slotTwoFinished=true;
Toast.makeText(MainActivity.this, "2",Toast.LENGTH_SHORT).show();
}
if (slot.equals(slotThree)){
slotThreeFinished=true;
Toast.makeText(MainActivity.this, "3",Toast.LENGTH_SHORT).show();
}
if (slotOneFinished&&slotTwoFinished&&slotThreeFinished){
executor.shutdown();
executor=null;
roll.setEnabled(true);
checkWin(getFruits());
slotOneFinished=false;
slotTwoFinished=false;
slotThreeFinished=false;
}
}
启动功能
public void start() {
if(executor==null) {
count =0;
executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(task,10,200,TimeUnit.MILLISECONDS);
}
}
动画功能
public void animate(final int maxCount, final ImageSwitcher slot, int i) {
if (i<maxCount){
Animation in = AnimationUtils.loadAnimation(this, R.anim.new_slot_item_in);
Animation out = AnimationUtils.loadAnimation(this, R.anim.old_item_out);
slot.setInAnimation(in);
slot.setOutAnimation(out);
int fruit = randomFruit();
slot.setTag(fruit);
slot.setImageResource(fruit);
}else {
stop(slot);
}
}
在程序开始时,Count设置为0,randomSwitchCount()返回10到40之间的一个随机数。我假设我没有正确的顺序运行某些代码。我在测试过程中使用了吐司消息来突出我的问题。如果您发现我的功能和逻辑还有其他问题,我将不知所措。
谢谢
Pi Net
答案 0 :(得分:0)
该计时器计划再运行一次。但是在计时器运行之前,每个插槽的isFinished都设置为false,因此条件变为true。相反,我仅在完成滚动按钮后才将它们设置为false,以便时间与获胜检测保持同步。