Beispiel #1
0
void GameEngine::fire()
{
    if (gameIsPaused()) {
        kDebug() << "trying to fire while game is paused!!!";
        resume();
        return;
    }

    foreach (Ball *ball, m_balls) {
        if (!ball->toBeFired) {
            continue;
        }
        // else
        ball->toBeFired = false;
        
        qreal ballCenter= ball->getRect().left() + (ball->getRect().width())/2;
        qreal barCenter = m_bar.center();
        qreal angle = M_PI / 3;
        angle *= (barCenter - ballCenter) / (m_bar.getRect().width()/2);
        angle += M_PI_2;
        
        ball->directionX =  cos(angle) * BALL_SPEED;
        ball->directionY = -sin(angle) * BALL_SPEED;
    }
    
    m_dScore = BRICK_SCORE;
    m_infoMessage.hide();
    
    randomCounter = 0;
}
Beispiel #2
0
void GameEngine::pause()
{
    if (gameIsPaused()) {
        return;
    }
    m_elapsedTimeTimer.stop();
    m_gameTimer.stop();
    emit gamePaused();
    //showMessage("Game Paused!"); PORT - FOR NOW
}
Beispiel #3
0
void GameEngine::resume()
{
    if (!gameIsPaused()) {
        return;
    }
    m_elapsedTimeTimer.start();
    m_gameTimer.start();

    hideMessage();
    emit gameResumed();
}
Beispiel #4
0
void GameEngine::pause()
{
    if (gameIsPaused()) {
        return;
    }
    if (m_gameWon || m_gameOver) {
        return;
    }
    m_elapsedTimeTimer.stop();
    m_gameTimer.stop();
    emit gamePaused();
    showMessage(i18n("Game Paused!"));
}
Beispiel #5
0
void GameEngine::repaintMovingObjects()
{
    m_bar.repaint();
    
    foreach (Ball *ball, m_balls) {
        ball->repaint();
    }
    
    foreach (Gift *gift, m_gifts) {
        if (!gift->isVisible()) {
            continue;
        }
        gift->repaint();
    }

    // avoid infinite loops of the ball
    ++randomCounter;
    if (randomCounter == 1024) {
        randomCounter = 0;
        foreach (Ball *ball, m_balls) {
            if (qrand() % 2) {
                ball->directionX += 0.002;
            } else {
                ball->directionY += 0.002;
            }
        }

        // increase the speed a little
        // if there is at least one ball moving
        // and the game isn't paused
        bool ballMoving = false;
        foreach (Ball *ball, m_balls) {
            if (!ball->toBeFired) {
                ballMoving = true;
                break;
            }
        }
        if (ballMoving && !gameIsPaused()) {
            changeSpeed(AUTO_SPEED_INCREASE);
        }
    }
Beispiel #6
0
void GameEngine::loadLevel()
{
    deleteAllObjects();
    m_remainingBricks = 0;
    
    m_levelLoader->loadLevel( m_bricks );
    if (m_bricks.isEmpty()) {
        if (m_levelLoader->level() == 1) {
            // No level in the levelset
            kError() << "Invalid levelset " << m_levelLoader->levelset() << endl;
        } else {
            // No more levels: game won
            m_gameWon = true;
            kDebug() << m_score;
            addScore( GAME_WON_SCORE + m_lives.size() * LIFE_SCORE );
            kDebug() << m_lives.size() << m_score;
            showMessage( i18n("Well done! You won the game") );
            emit gameEnded(m_score, -1, m_elapsedTime);
            deleteMovingObjects();
        }
    }
    
    m_balls.append(new Ball);
    moveBar(m_bar.center());
    m_bar.reset();
    updateAttachedBalls();
    
    m_gameTimer.setInterval(REPAINT_INTERVAL);
    m_speed = 1.8;
    m_repaintInterval = 1;
    m_levelInfo.setLevel(m_level);
    if (gameIsPaused()) {
        resume();
    }
    showMessage(i18n("Level %1", m_level));
    QTimer::singleShot(2000, this, SLOT(hideMessage()));
    
    showFireBallMessage();
}
Beispiel #7
0
void GameEngine::moveBar(int newPos) 
{
    if (gameIsPaused()) {
        return;
    }
    // width of the game
    int width = BRICK_WIDTH * WIDTH;
    // width of the bar
    int w = m_bar.getRect().width();
    int y = m_bar.getRect().y();
    int x = newPos - w/2;
    
    if (x < 0) {
        x = 0;
        emit resetMousePosition();
    } else if (x > width - w) {
        x = width - w;
        emit resetMousePosition();
    }
    
    m_bar.moveTo(x, y);
}