Мое решение (подход, основанный на MVC):
Мы можем создать стек предопределенных действий:
Stack<AIAction> replay = new Stack<AIAction>();
(AIAction - модель)
Затем мы можем добавить каждое новое действие в наш стек для последующего воспроизведения:
replay.add(new AIAction(AIAction.SELECT,...));
Вся логика и решения принимаются здесь. (Контроллер)
После того, как у нас есть набор действий, мы можем воспроизвести их и отобразить анимацию для пользователя (просмотр):
for (int i=0;i<replay.size();i++,start+=pause()){
AIAction thisAction = replay.get(i);
switch(thisAction.getAction()){
case AIAction.SELECT:
scheduleSelect(start,...);
break;
case AIAction.REENABLE_CLICKING:
scheduleReEnableClicking(start);
break;
case AIAction.TOAST:
if (thisAction.getToast())
scheduleToast(thisAction.getMessage(),start,true);
else
scheduleToast(thisAction.getMessage(),start,false);
break;
}
}
Теперь нам нужны такие функции, как scheduleSelect()
, scheduleReEnableClicking()
и scheduleToast()
:
Это создает впечатление «думающего» ИИ и позволяет пользователю следовать за ним.
// for example:
private void scheduleSelect(int start,...){
Handler handler = null;
handler = new Handler();
handler.postDelayed(new Runnable(){
// select logic after 'start' milliseconds
...
}, start);
}
private void scheduleReEnableClicking(int start){
Handler handler = null;
handler = new Handler();
handler.postDelayed(new Runnable(){
public void run(){
// set clickable logic after 'start' milliseconds
setClickable(true);
}
}, start);
}
private void scheduleToast(final String message,int start){
Handler handler = null;
handler = new Handler();
handler.postDelayed(new Runnable(){
public void run(){
toast(message,pause());
}
}, start);
}