18.2 Gagner la partie
La dernière étape est d'ajouter un indicateur lorsque le joueur gagne la partie. Comme lorsque la partie est perdue, nous voulons donner la possibilité au joueur de recommencer lorsqu'il gagne la partie.
Étapes à suivre
- Modifiez
GameOverDisplay
afin de permettre aussi d'afficher un texte de victoire.- activez le texte de victoire lorsque le boss est vaincu dans la méthode
onDefeat
deBoss
/* GameOverDisplay.java */
package com.tutorialquest.ui;
// import ..
public class GameOverDisplay {
// AJOUT:
private static final String WIN_TEXT = "You win!";
// ...
public void enable(boolean isDefeat)
{
this.enabled = true;
text = isDefeat ? LOSE_TEXT : WIN_TEXT;
elapsedTime = 0;
}
// ...
}
/* Boss.java */
package com.tutorialquest.entities.boss;
// import ..
public class Boss extends Character {
// ...
@Override
public void onDefeated() {
super.onDefeated();
// AJOUT:
Game.finish(false);
}
}
/* Game.java */
package com.tutorialquest;
// import ..
public class Game {
// ...
// MODIF:
// public static void finish()
public static void finish(boolean isDefeat)
{
finished = true;
level.avatar.input.disable(-1);
hud.input.disable(2);
// MODIF:
// hud.gameOverDisplay.enable();
// hud.gameOverDisplay.enable(isDefeat);
}
}
Étapes à suivre
Finalement, nous voulons ajouter une animation de célébration au personnage.
/* Game.java */
package com.tutorialquest;
// import ..
public class Game {
// ...
public static void finish(boolean isDefeat) {
finished = true;
level.avatar.input.disable(-1);
hud.input.disable(2);
hud.gameOverDisplay.enable(isDefeat);
// AJOUT:
if(!isDefeat) Game.level.avatar.win();
}
}
/* Avatar.java */
package com.tutorialquest.entities;
// import ..
public class Avatar extends Character {
public static class SpriteUtils {
// ...
// AJOUT:
public static final int WIN = 16;
}
public void initSprite()
{
// ...
// AJOUT:
sprite.addAnimation(
SpriteUtils.WIN,
AnimatedSprite.DEFAULT_FRAME_LENGTH,
Animation.PlayMode.NORMAL,
sprite.frames[12][0]
);
sprite.play(SpriteUtils.IDLE_FRONT, true);
}
@Override
public void playAnimation(int anim, boolean reset, boolean force) {
if (!force) {
if (attack != null) return;
// AJOUT:
if (Game.finished && anim != SpriteUtils.WIN) return;
if (rollTime < ROLL_TIME_LIMIT) return;
}
super.playAnimation(anim, reset, force);
}
// AJOUT:
public void win()
{
controlAxes.setZero();
playAnimation(SpriteUtils.WIN, true, true);
}
}