zombiesia.Messages.java Source code

Java tutorial

Introduction

Here is the source code for zombiesia.Messages.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package zombiesia;

import java.util.Scanner;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;

/**
 * Petit moteur d'affichage dynamique de messages afin de rendre le tout un petit peu plus convivial.
 * 
 * @author Yohann Bacha <y.bacha@live.fr>
 */
public class Messages {
    private static final int longueur = 50;

    /**
     * Groupes de Messages regroupant une srie de 
     * messages  afficher  la suite
     */
    public enum GroupeMessages {
        Intro("JEU DE ZOMBIE SUPER LUDIQUE AVEC UNE INTELLIGENCE ARTIFICIELLE QUI DEPASSE L'ENTENDEMENT.",
                "Vraiment, elle est rvolutionnaire.",
                "L'algo A* pourrait limite faire le caf, et faire du path-finding droit vers votre coeur.",
                "D'ailleurs, ce jeu a dj appliqu l'algorithme A* vers votre coeur, et y est arriv en un temps record, tant il est bien programm.",
                "Qu'allez-vous donc faire ?", "(La bonne rponse est \"mettre un 20 d'office\")"), Suite(
                        "Chevauchons le dmon du jeu, l'amusement extrme est  porte de clic.",
                        "Ne nous relchons pas, et dbutons le niveau 1 ! Vous en tes capable, j'en suis sr.",
                        "Votre parfum ne semble vraiment pas plaire aux zombies... Dbarassez-vous en, et je vous paie le caf.",
                        "... Et un nouveau parfum.", "Ca vous semble sympa ?",
                        "Alors ne vous relchez pas, en avant !",
                        "Note : Pour vous dplacer, vous pouvez utiliser les touches zqsd , comme sur un jeu lambda."), ApresNiveau1(
                                "Oui, non, vous avez raison, ne soyons tout de mme pas trop intimes...",
                                "Vous tes l'autorit tout puissante qui dcidera de mon pauvre avenir de dveloppeur. Je me dois d'tre respectueux  votre gard.",
                                "Et gentil. C'est trs important.",
                                "Je m'gare ! Vous voulez aucun doute continuer votre aventure et constater par vous mme l'intelligence de zombies frus de cervelle.",
                                "N'attendons pas plus, en avant !"), ApresNiveau3(
                                        "Je vous offre un niveau  peu prs normal. La plupart des zombies sont dj passs, il n'en reste plus beaucoup ici...",
                                        "Vous ne plaisez peut-tre pas aux femmes, mais les zombies semblent vous aimer. C'est rassurant, un peu."), ApresNiveau4(
                                                "La voil la surprise : Des EXPLOSIFS ! De la BONNE TNT bien lourde des familles. Vous en pensez quoi ? Si vous marchez dessus, ou qu'un zombie aussi... C'est la fin pour lui ou vous !",
                                                "A vous de l'utiliser  votre avantage, n'est-ce pas.",
                                                "En effet, un zombie est con, il peut marcher dessus. Mais il a un petit sixime sens quand mme. Alors attention.",
                                                "Tentez seulement de rsoudre ce niveau sans explosifs."), Fin(
                                                        "Votre gloire virtuelle est  son apoge, et tout le monde va vous suivre sur Twitter.",
                                                        "Vous tes dsormais beau, avez de l'argent, et vous tes alturiste.",
                                                        "Trs altruiste.",
                                                        "Je peux donc compter compter sur vous pour avoir une certaine bonne note, n'est-ce pas ? (oui/non)"), Commentaires(
                                                                "Bon, oublions tout a ! Au final, qu'avez-vous pens du jeu ?",
                                                                "Vous pouvez faire un petit pav d'une ligne. Montrez-moi tout votre amour.",
                                                                "Les livres d'or ne sont pas encore morts !"), NoteFin(
                                                                        "Hmm... Interessant.",
                                                                        "Enfin voil, vous avez termin ce jeu. Ici s'achve la fin du priple.",
                                                                        "~THANK YOU FOR PLAYING~",
                                                                        "Mais avant a, une toute dernire chose. Toute dernire.",
                                                                        "Quelle note sur vingt, au jug, attriburiez-vous  ce jeu ? Allez. Soyez honnte. Je ne pleurerai pas.",
                                                                        "Pas beaucoup.", "Bon ok a dpend.",
                                                                        "Tout dpend de vous.");

        public String[] messages;

        /**
         * Constructeur par dfaut
         * @param mess Autant de messages qu'il le faut  afficher
         */
        GroupeMessages(String... mess) {
            this.messages = mess;
        }

        /**
         * Affiche le message en instance
         */
        public void message() {
            introArray(this.messages);
        }
    }

    /**
     * Enum rpertoriant les diffrents contextes de rponse.
     */
    public enum TypeReponse {
        Note, NoteFin, Niveau1, Niveau2, Niveau3, Niveau4, Niveau5, Niveau6, Niveau7
    }

    /**
     * Demande de manire optimise graphiquement  l'utilisateur de rentrer une valeur.
     * @param intitule Ce qui est affich aant la saisie de texte
     * @return La saisie de l'utilisateur
     */
    public static String input(String intitule) {
        Scanner sc = new Scanner(System.in);
        String retour;
        System.out.print("-- " + intitule + " : ");
        retour = sc.nextLine();
        System.out.println(StringUtils.repeat('-', longueur + 4));

        return retour;
    }

    /**
     * Cette mthode agit selon le contexte et la rponse
     * @param type Le contexte dans lequel nous sommes
     * @param reponse La rponse  analyser
     * @return Si la rponse est celle que l'on attendait ou non
     */
    public static boolean reponse(TypeReponse type, String reponse) {
        switch (type) {
        case Note:
            if (reponse.equals("mettre un 0 d'office"))
                intro("... Bon, nous avons juste dmarr du mauvais pied hein ! Nul besoin de s'nerver, n'est-ce pas.. ?",
                        "Nous avons dmarr du mauvais pied. Prenons un caf, et oublions toute forme de corruption. Tout se passera bien. Un nuage sur votre caf ?");
            else if (reponse.equalsIgnoreCase("mettre un 20 d'office"))
                intro("Oh voyons, ce n'est pas trs fair-play de mettre un 20 d'office alors que vous n'avez pas mme pas jou au jeu, haha !",
                        "Jouez d'abord quelques niveaux, et aprs nous en reparlerons. Ohlala, mais que ces zombies sont intelligents..");
            else {
                intro("Hahaha, ce n'est pas la rponse attendue, allons ! Reprenez depuis le dbut.");
                return false;
            }
            break;
        case Niveau1:
            if (reponse.equalsIgnoreCase("true"))
                intro("Impressionnant, votre dextrit quand vous avez fui ce zombie amorphe..",
                        "Ne prends pas la grosse tte cependant. Oh, a ne te drange pas que l'on se tutoie ? Nous avons vcu pas mal de choses ensemble dj...");
            else {
                intro("Quelle tristesse... Ce zombie fatigu, du PREMIER NIVEAU, dans la difficult la plus faible, aura eu raison de vous.",
                        "Avouez. C'tait juste  but de test, n'est-ce pas ?",
                        "Genre \"Ohlala, qu'est-ce qu'il se passe si j'me fais toucher par ce zombiiie !\"",
                        "Bon. Maintenant que votre curiosit est satisfaite, ressayez. Sans dconner.");
                System.exit(0);
            }
            break;
        case Niveau2:
            if (reponse.equalsIgnoreCase("true")) {
                intro("... Vous savez que ce niveau tait thoriquement impossible  russir.",
                        "Ca vous amuse de modifier les fichiers du jeu  votre convenance ?",
                        "Ce n'est pas trs Charlie pour le dveloppeur vous savez...",
                        "Eh ben tiens, je vais dcidez de ne pas tre charlie non plus. Pas de piti ni pour les croissants, ni pour les k4k0rz de fichier jar.");
                System.exit(0);
            } else
                intro("Vous croyiez vraiment que j'allais tre si bienveillant... ?",
                        "Dans ce monde... C'est tuer o tre tu.",
                        "J'ai le contrle ici. C'est mon jeu. Je l'ai programm, vous y jouez, vous obissez.",
                        "Et dans le cas prsent... Vous mourrez.",
                        "Enfin, ce ne serait pas drle de s'arrter l. Je vous aime bien, aussi impuissant puissiez-vous tre.",
                        "Ne partez pas allons. Je promets d'tre plus sympathique avec vous.",
                        "Allons-y. Pntrez le niveau 3. Et amusez-vous ! C'est le but !");
            break;
        case Niveau3:
            if (reponse.equalsIgnoreCase("true"))
                intro("... Vous avez VRAIMENT russi ce niveau ?",
                        "Vous n'avez pas modifi le niveau directement dans le niveau, n'est-ce pas... ?",
                        "... Vous savez quoi ? Je vais vous croire pour cette fois. Je vais croire en vos comptences pour cette fois...",
                        "Pas touche aux fichiers du jeu, hein ?");
            else
                intro("ENORME BLAAAAAAAAAAGUE !",
                        "Pardon, c'tait trop tentant. Je suis gentil  partir de maintenant. Je vous assure.");
            break;
        case Niveau4:
            if (reponse.equalsIgnoreCase("true"))
                intro("Pas mal. Vous voyez, c'est trs amusant non ? Et ce n'est pas fini !",
                        "En effet, je vous rserve une petite surprise, qui vous plaira, vu que vous vous dbrouillez apparemment, dsormais.");
            else
                intro("... Bon, vous n'tes pas trs dou pour a, n'est-ce pas.",
                        "Bon, je suis un maitre de jeu un peu trop gentil.",
                        "\"MAIS EN FAIT, Le zombie qui vous a mang N'AVAIT PAS FAIM ! Et en plus, c'est un tratre ! Comme le clone dans Star Wars 7. Donc il vous amne  la sortie du niveau, quelle chance, haha !\"",
                        "Voil, vous pouvez continuer maintenant. On va pas perdre de temps. Car vient une petite surprise...");
            break;
        case Niveau5:
            if (reponse.equalsIgnoreCase("true"))
                intro("... Bon, j'avoue, je suis impressionn que vous y soyez parvenu.",
                        "Mais REGARDEZ maintenant comme vous pouvez vous faciliter la vie grce ... LA TNT !");
            else
                intro("Haha, assez compliqu n'est-ce pas ? C'est normal. Avec 4 zombars qui vous en veulent...",
                        "Peut-tre aurez-vous moins de mal avec ce deus ex machina.");
            break;
        case Niveau6:
            if (reponse.equalsIgnoreCase("true"))
                intro("C'est parfait, vous avez compris le principe ! Voici l'tape finale...",
                        "Un niveau totalement normal !", "L'apoge de votre sjour !", "Un maximum de fun !",
                        "Que votre cerveau reste intact. Je vous le souhaite de tout coeur...",
                        "Aprs tout, vous en avez besoin pour me donner une bonne note. En avant.",
                        "(normalement, l, une musique pique se joue, mais en console c'est pas trs possible, alors voil)");
            else {
                intro("Bon. Si vous commencez  perdre alors que les zombies ont presque de la dynamite dans la bouche et vous mourrez quand mme...",
                        "Bon. Recommencez le jeu, r-entrainez vous, et revenez ensuite hm. Allez,  l'anne prochaine.");
                System.exit(0);
            }
            break;
        case Niveau7:
            if (reponse.equalsIgnoreCase("true"))
                intro("Et c'est LA VICTOIIIIIRE !",
                        "Plus d'apocalypse zombie dans votre console, vous avez sauv votre disque dur de la dfragmentation. Vous tes un hros.",
                        "Tagada tsoin-tsoin.");
            else {
                intro("Vous tes arriv si loin, je vous DEFENDS D'ABANDONNER.",
                        "C'est le bien de ma NOTE qui est en jeu. DEFENDEZ-VOUS !");
                return false;
            }
            break;
        case NoteFin:
            if (reponse.equalsIgnoreCase("oui")) {
                intro("Ah ! C'est classieux ! Dsol d'avoir t si dur avec vous au dpart.",
                        "On prend vite la grosse tte quand on est le matre du jeu, n'est-ce pas ? Haha.");
                return true;
            } else if (reponse.equalsIgnoreCase("non")) {
                intro("Oh... Et qu'est-ce qui ne vous a pas plus ?",
                        "Le fait que ce soit un jeu et que je ne vous ai pas, pour le coup, rellement offert de caf ?");
                return true;
            } else {
                intro("Vous ne rpondez pas  ma question l... Vous avez bien aim le jeu et l'IA ou non.. ?");
                return false;
            }
        }
        return true;
    }

    /**
     * Mthode affichant le message dynamiquement, en fonction de la longueur du message.
     * @param messages Un tableau de messages  afficher  la suite
     */
    public static void introArray(String[] messages) {
        try {
            for (String mess : messages) {
                String[] lines = WordUtils.wrap(mess, longueur, "\n", true).split("\n");
                System.out.println("--" + StringUtils.repeat(' ', longueur) + "--");
                for (String l : lines)
                    System.out.println("--" + StringUtils.center(l, longueur) + "--");

                System.out.println(StringUtils.repeat('-', longueur + 4));

                Thread.sleep(mess.length() * 45);
            }
        } catch (Exception e) {
            System.err.print("Erreur : Opration interrompue.");
        }
    }

    /**
     * Mthode affichant le message dynamiquement, en fonction de la longueur du message.
     * @param messages Une liste de messages  afficher  la suite
     */
    public static void intro(String... messages) {
        introArray(messages);
    }
}