void Fl_GroupAniSwitch::NextStep() { bool neednext = false; if ( src_src_pt.x != src_dst_pt.x ) { int moves = 0; if ( src_src_pt.x > src_dst_pt.x ) { moves = calc_moves( src_src_pt.x, src_dst_pt.x ); src_src_pt.x -= moves; } else if ( src_src_pt.x < src_dst_pt.x ) { moves = calc_moves( src_dst_pt.x, src_src_pt.x ); src_src_pt.x += moves; } if ( moves != 0 ) neednext = true; } if ( dst_src_pt.x != dst_dst_pt.x ) { int moves = 0; if ( dst_src_pt.x > dst_dst_pt.x ) { moves = calc_moves( dst_src_pt.x, dst_dst_pt.x ); dst_src_pt.x -= moves; } else if ( dst_src_pt.x < dst_dst_pt.x ) { moves = calc_moves( dst_dst_pt.x, dst_src_pt.x ); dst_src_pt.x += moves; } if ( moves != 0 ) neednext = true; } grp_src->position( src_src_pt.x, src_src_pt.y ); grp_dst->position( dst_src_pt.x, dst_src_pt.y ); grp_host->redraw(); if ( neednext == true ) { Fl::repeat_timeout( draw_ms, fl_gas_timer_cb, this ); } else Finish(); }
// Retourner une liste de mouvements void MakeDecision(const SGameState * const gameState, SMove moves[4], unsigned int lastTimeError) { ai_game_state = (SGameState*) gameState; // copie potentiellement modifiable du gameState ai_register_current_fn(ai_game_state); SList_moves* possibles_moves = NULL; int lm = 0; int max_lmove = 0; // entier qui indiquera la taille de la plus longue combinaison de coup max_lmove = calc_moves(ai_game_state,&possibles_moves,&lm,0,0); // calcule les combinaisons de coups et récupère la taille de la plus grande lm = clean_possibles_moves(&possibles_moves, lm, max_lmove); SToRegisterFileName played_filename; if (max_lmove != 0) { ai_best_move(moves, &possibles_moves, lm, ai_game_state, max_lmove, &played_filename); ai_register_fn(played_filename); free_SList_moves(&possibles_moves, lm, max_lmove); } }