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