Exemplo n.º 1
0
bool Controller::parseGameResult(const QString& data)
{
    QRegExp rx("win:");
    if (rx.indexIn(data)!=-1)
        {
            qDebug() << "We win!";
            emit gameResult( GR_WON );
            model->setState(ST_PLACING_SHIPS);
            model->clearMyField();
            model->clearEnemyField();
            return true;
        }

    QRegExp rx2("lose:");
    if (rx2.indexIn(data)!=-1)
        {
            qDebug() << "We lose!";
            emit gameResult( GR_LOST );
            model->setState(ST_PLACING_SHIPS);
            model->clearMyField();
            model->clearEnemyField();
            return true;
        }

    return false;
}
Exemplo n.º 2
0
void MainWindow::getWinner(){
    // check horizontal
    for(int i = 0; i < ROWS; i++){
        int countX = 0, countO = 0;
        for(int j = 0; j < COLUMNS; j++){
            if(Game_cells[i][j]->getState() == 1) // X?
                countX++;
            else if(Game_cells[i][j]->getState() == 2) // 0?
                countO++;
            }

        if(countX == ROWS)
            gameResult("Win X");
        else if(countO == ROWS)
            gameResult("Win 0");
        }

    // check vertical
    for(int i = 0; i < ROWS; i++){
        int countX = 0, countO = 0;
        for(int j = 0; j < COLUMNS; j++){
            if(Game_cells[j][i]->getState() == 1) // X?
                countX++;
            else if(Game_cells[j][i]->getState() == 2) // 0?
                countO++;
            }

        if(countX == ROWS)
            gameResult("Win X");
        else if(countO == ROWS)
            gameResult("Win 0");
        }

    // check diagonal
    int countX = 0, countO = 0;
    for(int i = 0, j = 0; i < ROWS; i++, j++){
        if(Game_cells[j][i]->getState() == 1) // X?
            countX++;
        else if(Game_cells[j][i]->getState() == 2) // 0?
            countO++;

        if(countX == ROWS)
            gameResult("Win X");
        else if(countO == ROWS)
            gameResult("Win 0");
    }

    // draw?
    int cur = Game_cells[0][0]->getCurrentMoveNumber();
    if(cur >= max_move)
        gameResult("Draw");
}
Exemplo n.º 3
0
void SpriteSystem::update(float dt)
{
    m_fBeginElaseTime += dt;//记录游戏开始多久后可以攻击,时间取决于怪物跑动的时间
    
    if (m_fBeginElaseTime >= __RUN_ACTION_TIME &&GameManager::getInstance()->isGameOver == false)//4秒后允许攻击
    {
        enemyAttack(dt);
    }
    
    //显示技能按钮
    for (unsigned int i = 0; i < m_vHeros.size(); i++)
    {
        BaseSprite* hero = m_vHeros.at(i);
        if (hero->getSpriteState() != SPRITESTATE_DEAD)
        {
            this->showLifeButton(hero);
            this->showPowerButton(hero);
        }
    }
    
    //更新敌人生命值
    for (unsigned int i = 0; i < m_vEnemys.size(); i++)
    {
        BaseSprite* enemy = m_vEnemys.at(i);
        if (enemy->getSpriteState() != SPRITESTATE_DEAD)
        {
            showLifeTop(enemy);
        }
    }
    
    switch (gameResult())
    {
        case 0://未完成
            break;
        case 1://胜利
        {
            unscheduleUpdate();
            //给PlayLayer发信号
            Message* msg = Message::instance();
            msg->setMesType(Message_GameSuccess_);
            PlayLayer::s_messageQ->push(msg);
            //人物动画效果
            //添加一个层
            OverScene* overScene = OverScene::create(1);
            this->addChild(overScene,100);
            
        }
            break;
        case 2://失败
        {
            unscheduleUpdate();
            //给PlayLayer发信号
            Message* msg = Message::instance();
            msg->setMesType(Message_GameFailed_);
            PlayLayer::s_messageQ->push(msg);
        
            //人物动画效果
            //添加一个层
            OverScene* overScene = OverScene::create(2);
            this->addChild(overScene,100);
        }
            break;
        default:
            break;
    }
}