Package org.scotlandyard.engine.player

Source Code of org.scotlandyard.engine.player.AbstractPlayer

package org.scotlandyard.engine.player;

import java.util.EnumMap;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.scotlandyard.engine.Game;
import org.scotlandyard.engine.GameException;
import org.scotlandyard.engine.Token;
import org.scotlandyard.engine.User;
import org.scotlandyard.engine.boardmap.Coordinate;
import org.scotlandyard.engine.boardmap.Link;
import org.scotlandyard.engine.chat.Chat;
import org.scotlandyard.engine.constants.TransportationMethod;
import org.scotlandyard.impl.engine.GameEngine;
import org.scotlandyard.impl.engine.TokenImpl;
import org.scotlandyard.impl.engine.UserImpl;

/**
* player wrapper class
*
* @author Hussain Al-Mutawa
* @version 1.0
* @since Sun Sep 18, 2011
*/
public abstract class AbstractPlayer extends UserImpl implements Player {
   
    //private transient final String name, email;
  /**
   * TODO add documentation for this field
   */
    private Map<Game,EnumMap<TransportationMethod, Token>> tokens;
   
    /**
     * Construct a new player object
     */
    public AbstractPlayer(final String name, final String email) {
        super(name,email);
        tokens=new HashMap<Game,EnumMap<TransportationMethod, Token>>();
    }

    /**
     * TODO add documentation here
     * @param user
     */
    public AbstractPlayer(final User user) {
        this(user.getName(), user.getEmail());
    }

    @Override
    public int compareTo(final Player player) {
        return getEmail().compareTo(player.getEmail());
    }

//  @Override public boolean createGame(Game game) {
//    /* ODO */ throw new UnsupportedOperationException("Not supported yet.");
//  }
//
//  @Override public void endGame(Game game) throws Exception {
//    /* ODO */ throw new UnsupportedOperationException("Not supported yet.");
//  }
    @Override
    public List<Chat> getChatHistory(final Player withPlayer) {
        /* TODO getChatHistory */
      throw new UnsupportedOperationException("Not supported yet.");
    }

//    @Override
//    public String getEmail() {
//        return email;
//    }

    @Override
    public Set<Game> getJoinedGames() {
        final Set<Game>games = new HashSet<Game>();
        for(Game game:GameEngine.instance().getLobby().getAvailableGames()){
            if(game.hasPlayer(this.getEmail())){
                games.add(game);
            }
        }
        return games;
    }

//    @Override
//    public String getName() {
//        return name;
//    }

    @Override
    public int getNumberOfTickets(final Game game,final TransportationMethod transportation) {
        return tokens.get(game).get(transportation).getNumberOfTokens();
    }

    @Override
    public abstract Coordinate getPosition(Game game);

    @Override
    public abstract void setPosition(Game game,Coordinate coordinate);
   
    @Override
    public EnumMap<TransportationMethod, Token> getTokens(final Game game){
        return tokens.get(game);
    }

//    @Override public boolean joinGame(Game game) {
//        if(this.joinedGames.get(game.getIdentifier())!=null){
//            return false;
//        }
//        this.joinedGames.put(game.getIdentifier(), game);
//        return true;
//    }
//
//  @Override public boolean kickPlayer(Game game, Player player) {
//    /* ODO */ throw new UnsupportedOperationException("Not supported yet.");
//  }

//    @Override public boolean leaveGame(Game game) {
//        game.removePlayer(this.getEmail());
//        return !game.getPlayers().contains(this);
//    }
    @Override
    public abstract void moveMade(Game game);

    @Override
    public boolean registerChat(final Chat chat) {
        /* ODO */ throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean setTokens(final Game game,final TransportationMethod transportation, final int numberOfTickets) {
//        numberOfTickets = this.getNumberOfTickets(game, transportationMethod);
//        this.getTokens(game).get(transportationMethod).addTicket();
//        int temp = this.getNumberOfTickets(game, transportationMethod);
//        if(numberOfTickets==temp)
//        {
//            return false;
//        }
//        else
//        {
//            return true;
//        }
     
      //if the game has not been registered yet, add it to the hash table
      if(this.tokens.get(game)==null){
        this.tokens.put(game, new EnumMap<TransportationMethod, Token>(TransportationMethod.class));
      }
     
      // create new token and add it
      final Token token = new TokenImpl(this,transportation);
      token.setNumberOfTickets(numberOfTickets);
      this.tokens.get(game).put(transportation, token);
     
      //to make sure we got everything right
      final Token tokens = this.tokens.get(game).get(transportation);
      boolean result;
     
      if(tokens.getNumberOfTokens()==numberOfTickets){
        result = true;
      }else{
        result = false;
      }
     
      return result;
     
    }

    @Override
    public boolean useTokenToMove(final Game game, final Token token, final Link link) throws GameException {
      token.consumeTicket();
      //current position
      final Coordinate position = this.getPosition(game);
      //new position
      final Coordinate toPosition = link.getOtherEnd(position);
      //set the new position
      this.setPosition(game, toPosition);
      //trigger the event move is made
        moveMade(game);
        //if the new position is registered, then everything is fine
        return getPosition(game).equals(toPosition);
    }

    @Override
    public String toString() {
        return this.getName();
    }
}
TOP

Related Classes of org.scotlandyard.engine.player.AbstractPlayer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.