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; }
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; } }