Exemple #1
0
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;
}
Exemple #2
0
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;
	}
}