void MainWindow::move()
{
    auto s_head = getHead();
    auto s_food = QPoint(food_pos.x(), food_pos.y());
    auto s_foot = getFoot();
    state_now = find_way(s_head, s_food);
    if(state_now == -1){
        state_now = find_way(s_head, s_foot);
    }
    if(state_now == to_left)
    {
        go_left();
    }else if(state_now == to_right){
        go_right();
    }else if(state_now == to_up){
        go_up();
    }else if(state_now == to_down){
        go_down();
    }else{
        state_now = getRandomStep(s_head);
        if(state_now == -1){
            QMessageBox::information(0, "", "end");
            gameover();
        }else if(state_now == to_left){
            go_left();
        }else if(state_now == to_right){
            go_right();
        }else if(state_now == to_up){
            go_up();
        }else if(state_now == to_down){
            go_down();
        }
    }
    update();
}
void State::getStep(msgs::Step &step) const
{
  step.step_index = 0;
  getFoot(step.foot);
  step.sway_duration = ivSwayDuration;
  step.step_duration = ivStepDuration;
  step.swing_height = ivSwingHeight;
  step.cost = cost;
  step.risk = risk;
}
Exemple #3
0
bool checkCollision(Circle granade,pair<float,float> pt1 ,pair<float,float> pt2){
  pair<float,float> centre= granade.getCentre();
  pair< pair<float,float> , float > line = getLine(pt1,pt2);
 // output2(centre.F,centre.S);
  //output2(line.F.F,line.F.S);
  //output1(line.S);
  pair<float,float> foot = getFoot(centre , line.F.F,line.F.S , line.S);
  //output2(foot.F,foot.S);
  double dt = distance(foot.F,foot.S, centre.F, centre.S) ;
  //output1(dt);
  if( dt <= 2*granade.getRadius()  ){
    if( isInBW(foot,pt1,pt2) ){
      return true;
    }
    else
      return false;
  }
}