tk.vigaro.helix.listener.ListenerCommandHangman.java Source code

Java tutorial

Introduction

Here is the source code for tk.vigaro.helix.listener.ListenerCommandHangman.java

Source

package tk.vigaro.helix.listener;

import org.apache.commons.lang3.StringUtils;
import org.pircbotx.Colors;
import org.pircbotx.hooks.ListenerAdapter;
import org.pircbotx.hooks.events.MessageEvent;
import tk.vigaro.helix.Commands;
import tk.vigaro.helix.Helix;
import tk.vigaro.helix.Util;

/**
 * Helix
 * Copyright (c) Matheus Vigaro <matheus@vigaro.tk>, All rights reserved.
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3.0 of the License, or (at your option) any later version.
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * You should have received Helix copy of the GNU Lesser General Public
 * License along with this library.
 */
public class ListenerCommandHangman extends ListenerAdapter {

    @Override
    public void onMessage(MessageEvent event) {
        if (event.getMessage().replace(" ", "").equals(Helix.botPrefix + Commands.letter)
                && Helix.hangman.containsKey(event.getChannel().getChannelId())) {
            event.getChannel().send().message("Letras utilizadas: " + Util.join("-", getHangman(event)[2]));
        } else if (event.getMessage().startsWith(Helix.botPrefix + Commands.letter)
                && event.getMessage().length() > Commands.letter.length() + 2) {
            if (Helix.hangman.containsKey(event.getChannel().getChannelId())) {
                String letter = event.getMessage().split(" ", 2)[1].substring(0, 1);
                String[] status = getHangman(event);
                if (!status[2].contains(letter)) {
                    status[2] += letter;
                    if (status[0].contains(letter)) {
                        char[] chars = status[0].toCharArray();
                        char letterc = letter.charAt(0);
                        for (int i = 0; i < chars.length; i++) {
                            if (letterc == chars[i]) {
                                char[] s = status[1].toCharArray();
                                s[i] = letterc;
                                status[1] = new String(s);
                            }
                        }
                        if (!status[1].contains("_")) {
                            event.getChannel().send().message("Palavra completa! [" + status[1] + "]");
                            endGame(event);
                        } else {
                            event.getChannel().send().message("Letra encontrada! ["
                                    + status[1].replaceAll(letter, Colors.BOLD + letter + Colors.BOLD) + "] "
                                    + StringUtils.countMatches(status[1], "_") + " letras restantes");
                        }

                    } else {
                        event.getChannel().send().message("Letra nao encontrada! " + Colors.BOLD + letter);
                    }
                } else {
                    event.getChannel().send().message("Letra ja foi utilizada! " + Colors.BOLD + letter);
                }
            }

        } else if (event.getMessage().startsWith(Helix.botPrefix + Commands.word)
                && event.getMessage().length() > Commands.word.length() + 2) {
            if (getHangman(event)[0].equals(event.getMessage().split(" ", 2)[1].replace(" ", ""))) {
                event.getChannel().send().message("Palavra correta! [" + getHangman(event)[0] + "]");
                endGame(event);
            } else {
                event.getChannel().send().message("Palavra incorreta! [" + getHangman(event)[1] + "]");
            }
        } else if (event.getMessage().startsWith(Helix.botPrefix + Commands.hangman)) {
            if (!Helix.hangman.containsKey(event.getChannel().getChannelId())) {
                String word = Helix.wordList.get(Helix.random.nextInt(Helix.wordList.size() - 1));
                String blank = "";
                for (int i = 0; i < word.length(); i++) {
                    blank += word.charAt(i) == '-' ? "-" : "_";
                }
                Helix.hangman.put(event.getChannel().getChannelId(), new String[] { word, blank, "" });
                event.getChannel().send().message("O jogo da forca comecou! [" + getHangman(event)[1] + "] "
                        + StringUtils.countMatches(getHangman(event)[1], "_") + " letras");
            } else {
                event.getChannel().send().message("Um jogo ja esta em progresso! [" + getHangman(event)[1] + "] "
                        + StringUtils.countMatches(getHangman(event)[1], "_") + " letras restantes");
            }
        }

    }

    private void endGame(MessageEvent event) {
        Helix.hangman.remove(event.getChannel().getChannelId());
    }

    private String[] getHangman(MessageEvent event) {
        return Helix.hangman.get(event.getChannel().getChannelId());
    }
}