rendered paste bodyimport org.jibble.pircbot.*;import java.io.*;import java.util.Scanner;import java.util.ArrayList;import java.util.Random;public class Bot extends PircBot { public final String PARENT = "C:\\Documents and Settings\\Tanner Rogalsky\\My Documents\\RPS\\users"; public String mainChannel; public ArrayList<RPSUser> users; public ArrayList<String> playing; public ArrayList<Integer> playingIndex; //index of the playing user in the users arraylist public boolean gameOn, signup, throwing; public RPSUser player1, player2; public String p1Throw, p2Throw; public Bot(String channel, String nick) { setName(nick); setLogin(nick); mainChannel = channel; readStats(); newGame(); } public void onMessage(String channel, String sender, String login, String hostname, String message) { String[] command = message.toLowerCase().trim().split(" "); if ((command[0].equals("!rps")) && (!gameOn)){ message ("Type \"aye\" if you wish to play. " + sender + " should type \"!start\" to begin the game."); addPlayer(sender); gameOn = true; signup = true; } else if ((command[0].equals("end")) && (gameOn) && (sender.equals(playing.get(0)))){ message("Game exited."); User[] temp = getUsers(mainChannel); for(User user : temp){ if(user.hasVoice()){ deVoice(mainChannel, user.getNick()); } } newGame(); } else if ((command[0].equals("aye")) && (signup)){ addPlayer(sender); } else if ((command[0].equals("!start")) && (signup) && (sender.equals(playing.get(0))) && (playing.size() > 1)){ signup = false; Random r = new Random(); int x = r.nextInt(playing.size()); int y; do { y = r.nextInt(playing.size()); } while (x == y); player1 = users.get(playingIndex.get(playing.indexOf(playing.get(x))).intValue()); player2 = users.get(playingIndex.get(playing.indexOf(playing.get(y))).intValue()); message(player1.getNick() + " vs. " + player2.getNick() + ". PM me your throws."); throwing = true; } else if ((command[0].equals("!start")) && (signup) && (sender.equals(playing.get(0))) && (playing.size() <= 1)){ message("Not enough players, douchebag. Recruit!"); } } public void onPrivateMessage(String sender, String login, String hostname, String message){ message = message.toLowerCase().trim(); if ((throwing) && (sender.equals(player1.getNick()))){ if (message.equals("rock")){ player1.incrementRocksThrown(); p1Throw = message; sendMessage(sender, "Your throw has been registered."); } else if (message.equals("paper")){ player1.incrementPapersThrown(); p1Throw = message; sendMessage(sender, "Your throw has been registered."); } else if (message.equals("scissors")){ player1.incrementScissorsThrown(); p1Throw = message; sendMessage(sender, "Your throw has been registered."); } else { sendMessage(sender, "Invalid throw."); } } else if ((throwing) && (sender.equals(player2.getNick()))){ if (message.equals("rock")){ player2.incrementRocksThrown(); p2Throw = message; sendMessage(sender, "Your throw has been registered."); } else if (message.equals("paper")){ player2.incrementPapersThrown(); p2Throw = message; sendMessage(sender, "Your throw has been registered."); } else if (message.equals("scissors")){ player2.incrementScissorsThrown(); p2Throw = message; sendMessage(sender, "Your throw has been registered."); } else { sendMessage(sender, "Invalid throw."); } } else if (message.equals("info")){ for (RPSUser user : users){ sendMessage(sender, user.toString()); } } else if (message.equals("you should go now.")){ quitServer(); } if ((p1Throw != null) && (p2Throw != null)){ evaluateThrows(); } } public void onJoin(String channel, String sender, String login, String hostname){ sendNotice(sender, "Type \"/msg " + getNick() + " help\" for help."); } public void onDisconnect(){ writeStats(); System.exit(0); } // Returns the index of the specified nick in the stats arraylist private int indexOf(String nick){ int index = 0; for(RPSUser user : users){ if (nick.equals(user.getNick())){ return index; } } return -1; } private void newGame(){ playing = new ArrayList(); playingIndex = new ArrayList(); gameOn = false; signup = false; throwing = false; player1 = null; player2 = null; } private void addPlayer(String nick){ boolean already = false; for (String temp : playing){ if (temp.equals(nick)){ already = true; } } if (!already){ playing.add(nick); voice(mainChannel, nick); int index = indexOf(nick); if (index == -1){ users.add(new RPSUser(nick + ",0,0,0,0,0,0")); playingIndex.add(new Integer(users.size()-1)); } else { playingIndex.add(new Integer(index)); } } } private void readStats(){ users = new ArrayList(); Scanner s = null; try { s = new Scanner(new BufferedReader(new FileReader(new File(PARENT, "stats.csv")))); s.nextLine(); while (s.hasNextLine()) { users.add(new RPSUser(s.nextLine())); } } catch(Exception e){ s.close(); } finally { if (s != null) { s.close(); } } for (RPSUser user : users){ System.out.println(user.toString()); } } private void writeStats(){ PrintWriter out = null; try { out = new PrintWriter(new BufferedWriter(new FileWriter(new File(PARENT, "stats.csv")))); out.println("Nick,wins,loses,ties,rocks thrown,papers thrown,scissors thrown"); for (RPSUser user : users) { out.println(user.toString()); } } catch(Exception e){ } finally { if (out != null) { out.close(); } } } public void message(String message){ sendMessage(mainChannel, message); } private void winOrLose(RPSUser winner, RPSUser loser){ message(winner.getNick() + " wins the hand! " + loser.getNick() + " loses."); winner.incrementWins(); loser.incrementLoses(); String nick = loser.getNick(); deVoice(mainChannel, nick); int index = playing.indexOf(nick); playing.remove(index); playingIndex.remove(index); p1Throw = null; p2Throw = null; if (playing.size() > 1){ Random r = new Random(); player1 = users.get(playingIndex.get(playing.indexOf(playing.get(r.nextInt(playing.size())))).intValue()); do { player2 = users.get(playingIndex.get(playing.indexOf(playing.get(r.nextInt(playing.size())))).intValue()); } while (player1.equals(player2)); message("New game: " + player1.getNick() + " vs. " + player2.getNick() + ". PM me your throws."); } else { deVoice(mainChannel, playing.get(0)); message(playing.get(0) + " has won the ladder! Game over."); newGame(); } } private void evaluateThrows(){ String message = player1.getNick() + " threw " + p1Throw + ". " + player2.getNick() + " threw " + p2Throw + ". "; if ((p1Throw.equals("rock")) && (p2Throw.equals("paper"))){ winOrLose(player2, player1); } else if ((p1Throw.equals("paper")) && (p2Throw.equals("scissors"))){ winOrLose(player2, player1); } else if ((p1Throw.equals("scissors")) && (p2Throw.equals("rock"))){ winOrLose(player2, player1); } else if ((p1Throw.equals("rock")) && (p2Throw.equals("scissors"))){ winOrLose(player1, player2); } else if ((p1Throw.equals("paper")) && (p2Throw.equals("rock"))){ winOrLose(player1, player2); } else if ((p1Throw.equals("scissors")) && (p2Throw.equals("paper"))){ winOrLose(player1, player2); } else if (p1Throw.equals(p2Throw)){ message("Tie! PM me your next throws."); player1.incrementTies(); player2.incrementTies(); p1Throw = null; p2Throw = null; } } }