package pdp.scrabble.game.impl;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import javax.swing.JOptionPane;
import pdp.scrabble.Game;
import pdp.scrabble.Factory;
import pdp.scrabble.ihm.MainFrame;
import pdp.scrabble.ihm.MainFrame_old;
import pdp.scrabble.dictionary.DAWGImpl;
import pdp.scrabble.game.Bag;
import pdp.scrabble.game.Board;
import pdp.scrabble.game.BoardCase;
import pdp.scrabble.game.DicMap;
import pdp.scrabble.game.Dictionary;
import pdp.scrabble.game.GameEngine;
import pdp.scrabble.game.GameEnvironment;
import pdp.scrabble.game.Letter;
import pdp.scrabble.game.LettersProbability;
import pdp.scrabble.game.Location;
import pdp.scrabble.game.Placement;
import pdp.scrabble.game.Player;
import pdp.scrabble.game.Rack;
import pdp.scrabble.game.Resolution;
import pdp.scrabble.multiplayer.Client;
import pdp.scrabble.multiplayer.Server;
import pdp.scrabble.multiplayer.impl.ClientImpl;
import pdp.scrabble.multiplayer.impl.ServerImpl;
import pdp.scrabble.utility.Display;
public class FactoryImpl implements Factory {
private static final Factory SINGLETON = new FactoryImpl();
private FactoryImpl() {
}
public static Factory getInstance() {
return FactoryImpl.SINGLETON;
}
public Game createGame(String language, MainFrame_old mainFrame) {
return new GameImpl(language, mainFrame);
}
public Bag createBag() {
return new BagImpl();
}
public Board createBoard() {
return new BoardImpl();
}
public BoardCase createBoardCase(int letterMult, int wordMult, int v, int h) {
return new BoardCaseImpl(letterMult, wordMult, v, h);
}
public Rack createRack(Bag bag) {
return new RackImplNew(bag);
}
public Letter createLetter(char name, int value, int id) {
return new LetterImpl(name, value, id);
}
public Player createPlayer(
GameEnvironment game, String name, int id) {
return new Human(name, id, game);
}
public Dictionary createDictionary() {
return new DAWGImpl();
}
public Resolution createResolution(Game game) {
return new ResolutionImpl(game);
}
public Placement createPlacement() {
return new PlacementImpl();
}
public LettersProbability createLettersProbability(Bag bag) {
return new LettersProbabilityImpl(bag);
}
public Location createLocation(int v, int h) {
return new LocationImpl(v, h);
}
public DicMap createDicMap(boolean array) {
if (array) {
return new DicMapArrayImpl();
}
else {
return new DicMapTreeImpl();
}
}
public Server createServer(int port, String language) {
try {
try {
return new ServerImpl(port,language);
}
catch (AlreadyBoundException ex) {
Display.error("Server", "Cannot create Server");
return null;
}
}
catch (RemoteException ex) {
Display.error("Server", "Cannot create Server");
return null;
}
}
public Client createClient(MainFrame mainFrame, String name) {
try {
return new ClientImpl(mainFrame, name);
}
catch (RemoteException ex) {
Display.error("Client", "Cannot create client");
return null;
}
}
public GameEngine createEngine(String mode, GameEnvironment gameEnv) {
// TODO Auto-generated method stub
if(mode.compareTo("Solo")==0){
gameEnv.addPlayer(new Human(JOptionPane.showInputDialog("Entrez votre nom", "Playeur"), 1, gameEnv));
return new SoloEngine(gameEnv);
}
if(mode.compareTo("Local")==0)
return new MultiEngine(gameEnv);
if(mode.compareTo("Network")==0)
return new MultiEngine(gameEnv);
if(mode.compareTo("Simulation")==0)
;
if(mode.compareTo("Learning")==0)
;
return null;
}
}