void MarbleLineEditPrivate::createProgressAnimation() { // Size parameters qreal const h = m_iconSize / 2.0; // Half of the icon size qreal const q = h / 2.0; // Quarter of the icon size qreal const d = 7.5; // Circle diameter qreal const r = d / 2.0; // Circle radius // Canvas parameters QImage canvas( m_iconSize, m_iconSize, QImage::Format_ARGB32 ); QPainter painter( &canvas ); painter.setRenderHint( QPainter::Antialiasing, true ); painter.setPen( QColor ( Qt::gray ) ); painter.setBrush( QColor( Qt::white ) ); // Create all frames for( double t = 0.0; t < 2 * M_PI; t += M_PI / 8.0 ) { canvas.fill( Qt::transparent ); QRectF firstCircle( h - r + q * cos( t ), h - r + q * sin( t ), d, d ); QRectF secondCircle( h - r + q * cos( t + M_PI ), h - r + q * sin( t + M_PI ), d, d ); painter.drawEllipse( firstCircle ); painter.drawEllipse( secondCircle ); m_progressAnimation.push_back( QPixmap::fromImage( canvas ) ); } }
void GoToDialogPrivate::createProgressAnimation() { bool const smallScreen = MarbleGlobal::getInstance()->profiles() & MarbleGlobal::SmallScreen; int const iconSize = smallScreen ? 32 : 16; // Size parameters qreal const h = iconSize / 2.0; // Half of the icon size qreal const q = h / 2.0; // Quarter of the icon size qreal const d = 7.5; // Circle diameter qreal const r = d / 2.0; // Circle radius // Canvas parameters QImage canvas( iconSize, iconSize, QImage::Format_ARGB32 ); QPainter painter( &canvas ); painter.setRenderHint( QPainter::Antialiasing, true ); painter.setPen( QColor ( Qt::gray ) ); painter.setBrush( QColor( Qt::white ) ); // Create all frames for( double t = 0.0; t < 2 * M_PI; t += M_PI / 8.0 ) { canvas.fill( Qt::transparent ); QRectF firstCircle( h - r + q * cos( t ), h - r + q * sin( t ), d, d ); QRectF secondCircle( h - r + q * cos( t + M_PI ), h - r + q * sin( t + M_PI ), d, d ); painter.drawEllipse( firstCircle ); painter.drawEllipse( secondCircle ); m_progressAnimation.push_back( QIcon( QPixmap::fromImage( canvas ) ) ); } }
int score(int dimension, char board[26][26], char colour, int i, int j){ int score=0; char diffColour; int numRow, numCol; char row, col; bool legal = false; row = 'a'+i; col = 'a'+j; if (colour == 'W') diffColour ='B'; if (colour == 'B') diffColour = 'W'; int deltaRow, deltaCol; for(deltaRow=-1;deltaRow<=1;deltaRow++){ for(deltaCol=-1;deltaCol<=1;deltaCol++){ if((deltaRow!=0)||(deltaCol!=0)){ if (checkLegalInDirection(board, dimension, row, col, colour, deltaRow, deltaCol)==true){ legal = true; numRow = i; numCol = j; numRow += deltaRow; numCol += deltaCol; while (board[numRow][numCol] == diffColour){ score ++; numRow += deltaRow; numCol += deltaCol; } } } } } if(legal == true){ if (firstCircle(dimension, board, i, j) == true){ if (strategyCorner(dimension, board, i, j) == true) score+=1000; else if ((i = 1)||(i = dimension-2)||(j = 1)||(j = dimension-2)) score-=100; else score+=100; } else if (secondCircle(dimension, board, i, j) == true){ if (strategyStar(dimension, board, i, j) == true) score-=1000; else score+=50; } else if (thirdCircle(dimension, board, i,j) == true){ score+=50; } else{ } } else score = 0; return score; }
void PlayStop::setPositions() { Position leftDefPos,rightDefPos,goaliePos; int leftID = -1, rightID = -1 , midID = -1; bool leftNav, rightNav; if( wm->ourRobot[previousLeftID].Role != AgentRole::DefenderLeft ) previousLeftID = -1; if( wm->ourRobot[previousRightID].Role != AgentRole::DefenderRight ) previousRightID = -1; if( (wm->ourRobot[tDefenderLeft->getID()].Role == AgentRole::DefenderLeft) && (leftChecker < PresenceCounter) ) { leftID = tDefenderLeft->getID(); this->previousLeftID = tDefenderLeft->getID();; } if( wm->ourRobot[tDefenderRight->getID()].Role == AgentRole::DefenderRight && (rightChecker < PresenceCounter) ) { rightID = tDefenderRight->getID(); this->previousRightID = tDefenderRight->getID();; } if( leftChecker > PresenceCounter || leftID == -1 ) midID = rightID; if( rightChecker > PresenceCounter || rightID == -1) midID = leftID; zonePositions(leftID,rightID,midID,goaliePos,leftDefPos,leftNav,rightDefPos,rightNav); tDefenderLeft->setIdlePosition(leftDefPos); tDefenderLeft->setUseNav(leftNav); tDefenderRight->setIdlePosition(rightDefPos); tDefenderRight->setUseNav(rightNav); if( leftID != -1) { if( (wm->ourRobot[leftID].Status != AgentStatus::FollowingBall ) && (wm->ourRobot[leftID].pos.loc - leftDefPos.loc).length() > 250 ) leftChecker++; else leftChecker = 0; } else { if( !haltedRobotIsInField(previousLeftID) ) leftChecker = 0; } if( rightID != -1) { if( (wm->ourRobot[rightID].Status != AgentStatus::FollowingBall ) && (wm->ourRobot[rightID].pos.loc - rightDefPos.loc).length() > 250 ) rightChecker++; else rightChecker = 0; } else { if( !haltedRobotIsInField(previousRightID) ) rightChecker = 0; } tGolie->setIdlePosition(goaliePos); if(wm->kn->IsInsideGolieArea(wm->ball.pos.loc) ) { tStopLeft->setStopPosition(Vector2D(Field::MinX/2.0,Field::ourGoalPost_L.y+200)); tStopRight->setStopPosition(Vector2D(Field::MinX/2.0,Field::ourGoalPost_R.y-200)); tStopMid->setStopPosition(Vector2D(Field::MinX/2.0,Field::ourGoalCenter.y)); } else if( wm->kn->IsInsideNearArea(wm->ball.pos.loc) ) { Vector2D candidateL_1, candidateL_2, mainL; Circle2D cir_l(Field::defenceLineLinear_L,Field::goalCircle_R+ROBOT_RADIUS); Line2D thirty_l(Field::defenceLineLinear_L,AngleDeg(30)); cir_l.intersection(thirty_l,&candidateL_1,&candidateL_2); if( wm->kn->IsInsideField(candidateL_1) && !wm->kn->IsInsideGolieArea(candidateL_1) ) mainL = candidateL_1; else mainL = candidateL_2; tStopLeft->setStopPosition(Vector2D(mainL.x,sign(wm->ball.pos.loc.y)*mainL.y)); tStopMid->setStopPosition(Vector2D(Field::MinX+300,-sign(wm->ball.pos.loc.y)*1400)); tStopRight->setStopPosition(Vector2D(mainL.x,-sign(wm->ball.pos.loc.y)*mainL.y)); } else { Vector2D finalPos,notImportant,leftPos,rightPos; Circle2D robotCircle(wm->ball.pos.loc,ALLOW_NEAR_BALL_RANGE); Segment2D line2Goal(wm->ball.pos.loc,Field::ourGoalCenter); robotCircle.intersection(line2Goal,&finalPos,¬Important); Circle2D secondCircle(finalPos,(2.5)*ROBOT_RADIUS); robotCircle.intersection(secondCircle,&leftPos,&rightPos); if( !wm->kn->IsInsideField(leftPos) ) { leftPos = finalPos; finalPos = rightPos; Vector2D leftPos2,rightPos2; Circle2D secondCircle(finalPos,(2.5)*ROBOT_RADIUS); robotCircle.intersection(secondCircle,&leftPos2,&rightPos2); if( leftPos.dist(leftPos2) < leftPos.dist(rightPos2) ) rightPos = rightPos2; else rightPos = leftPos2; } else if( !wm->kn->IsInsideField(rightPos) ) { rightPos = finalPos; finalPos = leftPos; Vector2D leftPos2,rightPos2; Circle2D secondCircle(finalPos,(2.5)*ROBOT_RADIUS); robotCircle.intersection(secondCircle,&leftPos2,&rightPos2); if( rightPos.dist(leftPos2) < rightPos.dist(rightPos2) ) leftPos = rightPos2; else leftPos = leftPos2; } if( collisionwithDefenders(finalPos,leftPos,rightPos) || oneOfDefendersIsInPenalty(leftPos,finalPos,rightPos) ) { if( wm->kn->IsInsideRect(wm->ball.pos.loc,Vector2D(Field::MinX,Field::MaxY),Vector2D(0,0.25*Field::MaxY)) || wm->kn->IsInsideRect(wm->ball.pos.loc,Vector2D(Field::MinX,0.25*Field::MinY),Vector2D(0,Field::MinY)) ) { Vector2D candidateL_1, candidateL_2, mainL; Circle2D cir_l(Field::defenceLineLinear_L,Field::goalCircle_R+ROBOT_RADIUS); Line2D thirty_l(Field::defenceLineLinear_L,AngleDeg(30)); cir_l.intersection(thirty_l,&candidateL_1,&candidateL_2); if( wm->kn->IsInsideField(candidateL_1) && !wm->kn->IsInsideGolieArea(candidateL_1) ) mainL = candidateL_1; else mainL = candidateL_2; tStopLeft->setStopPosition(Vector2D(mainL.x,sign(wm->ball.pos.loc.y)*mainL.y)); tStopMid->setStopPosition(Vector2D(Field::ourPenaltySpot.x+200,Field::ourPenaltySpot.y)); tStopRight->setStopPosition(Vector2D(mainL.x,-sign(wm->ball.pos.loc.y)*mainL.y)); } else { //tStopLeft->setStopPosition(Vector2D(wm->ourRobot[tDefenderLeft->getID()].pos.loc.x // , wm->ourRobot[tDefenderLeft->getID()].pos.loc.y+5*ROBOT_RADIUS)); finalPos = Vector2D(wm->ourRobot[tDefenderLeft->getID()].pos.loc.x, 0.5*(wm->ourRobot[tDefenderLeft->getID()].pos.loc.y+wm->ourRobot[tDefenderRight->getID()].pos.loc.y) ); tStopLeft->setStopPosition(Vector2D(finalPos.x,finalPos.y+4.5*ROBOT_RADIUS)); tStopMid->setStopPosition(Vector2D(finalPos.x,finalPos.y-6.5*ROBOT_RADIUS)); tStopRight->setStopPosition(Vector2D(finalPos.x,finalPos.y-4.5*ROBOT_RADIUS)); } } else { tStopLeft->setStopPosition(leftPos); tStopMid->setStopPosition(finalPos); tStopRight->setStopPosition(rightPos); } } }