game-client

Play TicTacToe and Reversi
Log | Files | Refs

Match.java (2632B)


      1 package nl.isygameclient.network;
      2 
      3 import java.io.IOException;
      4 import java.util.Map;
      5 
      6 public class Match {
      7 	private final GameClient client;
      8 
      9 	private GameType game;
     10 	private Event	 outcome;
     11 	private String	 opponent;
     12 	private int[] moves;
     13 	private int		pointsSelf;
     14 	private int		pointsOther;
     15 	private boolean yourTurn;
     16 
     17 	public Match(GameClient client) throws IOException {
     18 		this.client = client;
     19 	}
     20 
     21 	public GameType getGame() {
     22 		return game;
     23 	}
     24 
     25 	public boolean isYourTurn() {
     26 		return yourTurn;
     27 	}
     28 
     29 	public boolean update() throws IOException {
     30 		if (outcome != null)
     31 			return false;
     32 
     33 		Event event = client.event(EventType.MATCH, EventType.MOVE, EventType.YOURTURN, EventType.WIN, EventType.DRAW, EventType.LOSS);
     34 		if (event == null)
     35 			return true;
     36 
     37 		switch (event.type) {
     38 			case MATCH:
     39 				@SuppressWarnings("unchecked")
     40 				var data = (Map<String, String>) event.data;
     41 
     42 				game	 = GameType.byName(data.get("gametype").toLowerCase());
     43 				moves	 = new int[game.maxMoves];
     44 				opponent = data.get("opponent");
     45 				return true;
     46 			case YOURTURN:
     47 				yourTurn = true;
     48 				return true;
     49 			case MOVE:
     50 				@SuppressWarnings("unchecked")
     51 				var moveMap = (Map<String, String>) event.data;
     52 
     53 				moves[Integer.parseInt(moveMap.get("move"))] = moveMap.get("player").equals(client.getName()) ? 1 : -1;
     54 				return true;
     55 			case WIN:
     56 				pointsSelf++;
     57 				outcome = event;
     58 				return false;
     59 			case LOSS:
     60 				pointsOther++;
     61 				outcome = event;
     62 				return false;
     63 			default:	// loss
     64 				outcome = event;
     65 				return false;
     66 		}
     67 	}
     68 
     69 	public boolean isStarted() {
     70 		return game != null;
     71 	}
     72 
     73 	public int getMove(int move) {
     74 		return moves[move];
     75 	}
     76 
     77 	public void abort() throws IOException {
     78 		if (outcome == null && !isStarted())
     79 			client.send("forfeit");
     80 	}
     81 
     82 	public void rematch() throws IOException {
     83 		if (outcome == null && !isStarted())
     84 			return;
     85 
     86 		Event evt;
     87 		if ((evt = client.event(0.5, EventType.CHALLENGE)) != null) {
     88 			@SuppressWarnings("unchecked")
     89 			var id = ((Map<String, String>) evt.data).get("challengenumber");
     90 			client.send("challenge", "accept", id);
     91 		} else {
     92 			client.send("challenge", opponent, game.name);
     93 			client.event(-1, EventType.MATCH);
     94 		}
     95 
     96 		for (int i = 0; i < moves.length; i++)
     97 			moves[i] = 0;
     98 		outcome = null;
     99 	}
    100 
    101 	public Event getOutcome() {
    102 		return outcome;
    103 	}
    104 
    105 	public int getPointsSelf() {
    106 		return pointsSelf;
    107 	}
    108 
    109 	public int getPointsOther() {
    110 		return pointsOther;
    111 	}
    112 
    113 	public String getOpponent() {
    114 		return opponent;
    115 	}
    116 
    117 	public void move(int move) throws IOException {
    118 		if (outcome != null && !isStarted())
    119 			return;
    120 		client.send("move " + move);
    121 		yourTurn = false;
    122 	}
    123 }