📄 client_consoleeventreader.java
字号:
package zsw_mmorpg.games.client;import zsw_mmorpg.client.*;import zsw_mmorpg.common.*;import java.util.*;import java.io.*;import org.apache.log4j.*;/** * Client_ConsoleEventReader.java * * @author <a href="mailto:shiwei@raymobile.com">朱世伟</a> * @version 1.0 *//**对应SERVER的客户端 ,调试用的*/public class Client_ConsoleEventReader extends Thread { private Logger log = Logger.getLogger("Client_ConsoleEventReader"); private GameClient gameClient; private EventQueue inQueue; private EventQueue outQueue; private boolean running; private static final String WELCOME_TEXT = "\n\nWelcome to the RPS (Rock, Paper, Scissors) Multi-player Game\n\n"; private static final String HELP_TEXT = "commands:\n" + "'/quit'\t\t\t\t\t quit the application \n" + "'/help'\t\t\t\t\t show this help \n" + "'/players'\t\t\t\t list players online\n" + "'/newgame <opponent name>'\t\t start a new game against opponent\n" + "'/move <(r)ock|(p)aper|(s)cissors>'\t enter your move \n" + "'/endgame' \t\t\t\t end the game\n" + "'/addfriend' \t\t\t\t add friend\n" + "'/delfriend' \t\t\t\t del friend\n" + "'/shopbuy' \t\t\t\t buy NO.\n" + "'/shopsell' \t\t\t\t sell Box + NO\n" + "'/equip' \t\t\t\t equip Box + NO\n" + "'/unequip' \t\t\t\t unequip Box + NO\n" + "'/use' \t\t\t\t use Box + NO\n" + "all other input is treated as a chat message\n"; public Client_ConsoleEventReader(GameClient gc, EventQueue inQueue, EventQueue outQueue) { super("ConsoleEventReader"); this.gameClient = gc; this.inQueue = inQueue; this.outQueue = outQueue; } public void run() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println(WELCOME_TEXT + HELP_TEXT); running = true; while (running) { try { String s = br.readLine(); String tokens[] = tokenizeCmdString(s); if (tokens.length > 0) { GameEvent event = parseInput(tokens, s); if (event != null) { outQueue.enQueue(event); } } else { gameClient.stdOut(null); } } catch (Exception ioe) { log.error("exception while reading GameEvent", ioe); } } } public void shutdown() { running = false; interrupt(); } private GameEvent parseInput(String tok[], String line) { tok[0] = tok[0].toLowerCase(); GameEvent e = null; if (tok[0].equals("/quit")) { e = new GameEventDefault(GameEventDefault.C_LOGOUT, "Bye Bye!"); } else if (tok[0].equals("/help") || tok[0].equals("?")) { gameClient.stdOut(HELP_TEXT); } else if (tok[0].equals("/players")) { e = new GameEventDefault(GameEventDefault.C_GET_PLAYERS); } else if (tok[0].equals("/newgame")) { if (tok.length < 2) badCmd(tok, "no opponent specified"); else { e = new GameEventDefault(GameEventDefault.C_JOIN_GAME, tok[1]); gameClient.setOpponent(tok[1]); } } else if (tok[0].equals("/move")) { if (tok.length > 2) badCmd(tok, "illegal move: too many parameters"); else if ( validMove(tok[1])) e = new GameEventDefault(GameEventDefault.C_MOVE, tok[1]); } else if (tok[0].equals("/endgame")) { e = new GameEventDefault(GameEventDefault.C_QUIT_GAME); } else if (tok[0].equals("/addfriend")) { e = new GameEventDefault(GameEventDefault.C_Friends_Add,tok[1]); } else if (tok[0].equals("/delfriend")) { e = new GameEventDefault(GameEventDefault.C_Friends_Del,tok[1]); } else if (tok[0].equals("/shopbuy")) { e = new GameEventDefault(GameEventDefault.C_shop_buy,tok[1]); } else if (tok[0].equals("/shopsell")) { e = new GameEventDefault(GameEventDefault.C_shop_sell,tok[1]+" "+tok[2]); } else if (tok[0].equals("/equip")) { e = new GameEventDefault(GameEventDefault.C_item_equip,tok[1]+" "+tok[2]); } else if (tok[0].equals("/unequip")) { e = new GameEventDefault(GameEventDefault.C_item_un_equip,tok[1]+" "+tok[2]); } else if (tok[0].equals("/use")) { e = new GameEventDefault(GameEventDefault.C_item_use,tok[1]+" "+tok[2]); } else { e = new GameEventDefault(GameEventDefault.C_CHAT_MSG, line.trim()); gameClient.stdOut(null); } return e; } private boolean validMove(String m) { return (m.equals("rock") || m.equals("paper") || m.equals("scissors") || m.equals("r") || m.equals("p") || m.equals("s")); } private void badCmd(String tok[], String mesg) { inQueue.enQueue(new GameEventDefault(GameEventDefault.C_CMD_ACK, mesg)); } public static String[] tokenizeCmdString(String s) { StringTokenizer toke = new StringTokenizer(s, " "); int numTokes = toke.countTokens(); String[] tokens = new String[numTokes]; for (int i=0; toke.hasMoreTokens(); i++) { tokens[i] = toke.nextToken(); } return tokens; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -