KrecikApp::Result KrecikApp::run() { init(); all.restart(); lastTouch.restart(); running = true; while(running) { win.clear(); events(); update(); if(isWin() || isLose()) running = false; display(); } running = false; Result r; r.pts = pts; r.distance = getCarPos().x; r.time = all.getElapsedTime(); r.win = isWin(); return r; }
bool KrecikApp::isWin() { if(isLose()) return false; if(getCarPos().x > (l.getVxCount() * l.getDistX() - 50.0f)) return true; return false; }
void GameBattle::update() { switch (state_) { case kStateStart: stateCounter_++; if (stateCounter_ > 60) { setState(firstAttack_? kStateFirstAttack : kStateMenu); } break; case kStateFirstAttack: stateCounter_++; if (stateCounter_ > 60) { setState(kStateMenu); } break; case kStateMenu: if (menu_.decided()) { switch (menu_.partyCommand()) { case GameBattleMenu::kPartyCommandManual: setState(kStateAnimation); break; case GameBattleMenu::kPartyCommandAuto: for (uint i = 0; i < players_.size(); i++) { players_[i]->setAttackInfoAuto(enemies_, players_, turnNum_); } setState(kStateAnimation); break; case GameBattleMenu::kPartyCommandEscape: setState(kStateEscape); break; } turnNum_++; } break; case kStateEscape: stateCounter_++; if (stateCounter_ > 60) { if (escapeSuccess_) { setState(kStateEnd); } else { for (uint i = 0; i < players_.size(); i++) { AttackInfo info; info.target = NULL; info.type = kAttackTypeNone; info.id = 0; players_[i]->setAttackInfo(info); } setState(kStateAnimation); } } break; case kStateAnimation: if (animationTargetIndex_ < 0) { if ((!skillAnime_ || skillAnime_->isFinished()) && !battleOrder_[currentAttacker_]->isAnimated()) { if (skillAnime_) { skillAnime_->release(); skillAnime_ = NULL; } if (animationTargetIndex_ < 0) { animationTargetIndex_ = 0; if (animationTargetIndex_ < (int)attackedTargets_.size()) { attackedTargets_[animationTargetIndex_]->playDamageAnime(); } } messageWindow_.setLineLimit(messageWindow_.lineLimit() + 1); } } else { if (animationTargetIndex_ < (int)attackedTargets_.size()) { if (!attackedTargets_[animationTargetIndex_]->isAnimated()) { if (attackedTargets_[animationTargetIndex_]->status().isDead() && !attackedTargets_[animationTargetIndex_]->isExcluded()) { attackedTargets_[animationTargetIndex_]->playDeadAnime(); } else { animationTargetIndex_++; if (animationTargetIndex_ < (int)attackedTargets_.size()) { attackedTargets_[animationTargetIndex_]->playDamageAnime(); } } messageWindow_.setLineLimit(messageWindow_.lineLimit() + 1); } } else { if (isLose()) { setState(kStateLose); } else if (isWin()) { setState(kStateResult); } else { currentAttacker_++; while (currentAttacker_ < (int)battleOrder_.size() && battleOrder_[currentAttacker_]->isExcluded()) { currentAttacker_++; } if (currentAttacker_ < (int)battleOrder_.size()) { stateCounter_ = 0; messageWindow_.reset(); setAnimationMessage(); } else { setState(kStateMenu); } } } } break; case kStateLose: stateCounter_++; if (messageWindow_.clicked()) { setState(kStateEnd); } break; case kStateResult: stateCounter_++; if (stateCounter_ > 20) { if (messageWindow_.lineLimit() < (int)messageWindow_.messageSize()) { messageWindow_.setLineLimit(messageWindow_.lineLimit() + 1); stateCounter_ = 0; } else { messageWindow_.enableClick(); if (messageWindow_.clicked()) { setState(kStateEnd); } } } break; case kStateEnd: break; } }