Package ingsw.proj.cluedo.logica

Source Code of ingsw.proj.cluedo.logica.InitGioco

package ingsw.proj.cluedo.logica;

import ingsw.proj.cluedo.componenti.ArmiEnum;
import ingsw.proj.cluedo.componenti.Carta;
import ingsw.proj.cluedo.componenti.CartaArma;
import ingsw.proj.cluedo.componenti.CartaSospetto;
import ingsw.proj.cluedo.componenti.CartaStanza;
import ingsw.proj.cluedo.componenti.Casella;
import ingsw.proj.cluedo.componenti.CasellaPassaggioSegreto;
import ingsw.proj.cluedo.componenti.CasellaPorta;
import ingsw.proj.cluedo.componenti.Giocatore;
import ingsw.proj.cluedo.componenti.HaDestinazione;
import ingsw.proj.cluedo.componenti.Pedina;
import ingsw.proj.cluedo.componenti.Soluzione;
import ingsw.proj.cluedo.componenti.Stanza;
import ingsw.proj.cluedo.componenti.StanzeEnum;
import ingsw.proj.cluedo.componenti.Tabellone;

import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

class InitGioco {

  private List<CartaArma> carteArmi;
  private List<CartaSospetto> carteSospetti;
  private List<CartaStanza> carteStanza;
  private Casella[][] caselle;
  private List<Giocatore> giocatori;
  private HashMap<Integer, ArrayList<Carta>> mazzi;
  private List<String> nomiGiocatori;
  private int numGioc;
  private List<Pedina> pedineArmi;
  private Soluzione soluzione;
  private List<Stanza> stanze;

  public InitGioco(String[] nomiGiocatori) throws NullPointerException {
    if (nomiGiocatori != null) {
      stanze = new ArrayList<Stanza>();
      this.nomiGiocatori = new ArrayList<String>();
      for (String string : nomiGiocatori) {
        this.nomiGiocatori.add(string);
      }
      generaCarteArmi();
      generaCarteStanze();
      generaCarteSospetti(this.nomiGiocatori);
      numGioc = this.nomiGiocatori.size();
      generaTabellone();
      creaSoluzione();
      daiCarte();
      generaPedineArmi();
      generaGiocatori();
    } else
      throw new NullPointerException("Nessun riferimento ai nomi giocatori passato.");
  }

  private void creaSoluzione() {
    int arma_delitto = (new Random()).nextInt(carteArmi.size());
    CartaArma arma = carteArmi.get(arma_delitto);
    carteArmi.remove(arma_delitto);
    int stanza_delitto = (new Random()).nextInt(carteStanza.size());
    CartaStanza stanza = carteStanza.get(stanza_delitto);
    carteStanza.remove(stanza_delitto);
    int colpevole = (new Random()).nextInt(carteSospetti.size());
    CartaSospetto sospetto = carteSospetti.get(colpevole);
    carteSospetti.remove(colpevole);
    soluzione = new Soluzione(arma, sospetto, stanza);
  }

  private void daiCarte() {
    mazzi = new HashMap<Integer, ArrayList<Carta>>();
    ArrayList<Carta> mazzoGlobale = new ArrayList<Carta>();
    int rand = 0;
    int i = 0;
    mazzoGlobale.addAll(carteArmi);
    mazzoGlobale.addAll(carteStanza);
    mazzoGlobale.addAll(carteSospetti);

    while (mazzoGlobale.size() > 0) {
      for (i = 0; i < numGioc; i++) {
        if (mazzoGlobale.size() > 0) {
          rand = (new Random()).nextInt(mazzoGlobale.size());
          if (mazzi.get(i) == null)
            mazzi.put(i, new ArrayList<Carta>());
          mazzi.get(i).add(mazzoGlobale.get(rand));
          mazzoGlobale.remove(rand);
        }
      }
    }
  }

  private void generaCarteArmi() {
    carteArmi = new ArrayList<CartaArma>();
    for (int i = 0; i < ArmiEnum.values().length; i++) {
      carteArmi.add(new CartaArma(ArmiEnum.values()[i]));
    }
  }

  private void generaCarteSospetti(List<String> nomiGiocatori) {
    carteSospetti = new ArrayList<CartaSospetto>();
    for (String string : nomiGiocatori) {
      carteSospetti.add(new CartaSospetto(string));
    }
  }

  private void generaCarteStanze() {
    carteStanza = new ArrayList<CartaStanza>();
    for (int i = 0; i < StanzeEnum.values().length; i++) {
      carteStanza.add(new CartaStanza(StanzeEnum.values()[i]));
    }
  }

  private void generaGiocatori() {
    giocatori = new ArrayList<Giocatore>();
    ArrayList<Stanza> copia = new ArrayList<Stanza>();
    for (int i = 0; i < stanze.size(); i++)
      if (stanze.get(i).getNome() != StanzeEnum.CORRIDOIO)
        copia.add(stanze.get(i));
    Collections.shuffle(copia);
    for (int i = 0; i < numGioc; i++) {
      String nome = nomiGiocatori.get(i);
      Casella posizione = copia.get(i).getCasellaVuotaRandom();
      giocatori.add(new Giocatore(nome, posizione, mazzi.get(i)));
      giocatori.get(i).cambiaPosizione(posizione);
    }
  }

  private void generaPedineArmi() {
    pedineArmi = new ArrayList<Pedina>();
    ArrayList<Stanza> copia = new ArrayList<Stanza>();
    for (int i = 0; i < stanze.size(); i++)
      if (stanze.get(i).getNome() != StanzeEnum.CORRIDOIO)
        copia.add(stanze.get(i));
    Collections.shuffle(copia);
    for (int i = 0; i < ArmiEnum.values().length; i++) {
      Casella posizione = copia.get(i).getCasellaVuotaRandom();
      pedineArmi.add(new Pedina(posizione, ArmiEnum.values()[i].toString()));
      pedineArmi.get(i).cambiaPosizione(posizione);
    }
  }

  private void generaStanza(int xMin, int xMax, int yMin, int yMax, StanzeEnum nomeStanza) {
    ArrayList<Casella> tempStanza = new ArrayList<Casella>();
    for (int i = yMin; i <= yMax; i++)
      for (int j = xMin; j <= xMax; j++) {
        if (!(caselle[i][j] instanceof HaDestinazione))
          caselle[i][j] = new Casella(nomeStanza, new Point(j, i));
        tempStanza.add(caselle[i][j]);
      }
    stanze.add(new Stanza(nomeStanza, tempStanza));
  }

  private void generaTabellone() {
    caselle = new Casella[24][24];
    // Le Stanze
    for (int i = 0; i < caselle.length; i++)
      for (int j = 0; j < caselle[0].length; j++) {
        caselle[i][j] = new Casella(StanzeEnum.CORRIDOIO, new Point(j, i));
      }
    // Le Porte
    caselle[2][4] = new CasellaPorta(StanzeEnum.CAMERA_LETTO, new Point(4, 2), new Point(5,2));
    caselle[2][5] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(5, 2), new Point(4,2));
    caselle[5][9] = new CasellaPorta(StanzeEnum.SALA_GIOCHI, new Point(9, 5), new Point(9,6));
    caselle[6][9] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(9, 6), new Point(9,5));
    caselle[6][15] = new CasellaPorta(StanzeEnum.BIBLIOTECA, new Point(15, 6), new Point(15,7));
    caselle[7][15] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(15, 7), new Point(15,6));
    caselle[3][20] = new CasellaPorta(StanzeEnum.STUDIO, new Point(20, 3), new Point(19,3));
    caselle[3][19] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(19, 3), new Point(20,3));
    caselle[12][6] = new CasellaPorta(StanzeEnum.SALA, new Point(6, 12), new Point(7,12));
    caselle[12][7] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(7, 12), new Point(6,12));
    caselle[11][17] = new CasellaPorta(StanzeEnum.INGRESSO, new Point(17, 11), new Point(16,11));
    caselle[11][16] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(16, 11), new Point(17,11));
    caselle[19][5] = new CasellaPorta(StanzeEnum.CUCINA, new Point(5, 19), new Point(6,19));
    caselle[19][6] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(6, 19), new Point(5,19));
    caselle[16][11] = new CasellaPorta(StanzeEnum.BAGNO, new Point(11, 16), new Point(11,15));
    caselle[15][11] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(11, 15), new Point(11,16));
    caselle[20][19] = new CasellaPorta(StanzeEnum.CANTINA, new Point(19, 20), new Point(18,20));
    caselle[20][18] = new CasellaPorta(StanzeEnum.CORRIDOIO, new Point(18, 20), new Point(19,20));
    // I Passaggi Segreti
    // TODO AGGIUNGERE I PASSAGGI SEGRETI
    caselle[0][0] = new CasellaPassaggioSegreto(StanzeEnum.CAMERA_LETTO, new Point(0, 0), new Point(23, 23));
    caselle[23][23] = new CasellaPassaggioSegreto(StanzeEnum.CANTINA, new Point(23, 23), new Point(0, 0));
    caselle[0][23] = new CasellaPassaggioSegreto(StanzeEnum.STUDIO, new Point(23, 0), new Point(0, 23));
    caselle[23][0] = new CasellaPassaggioSegreto(StanzeEnum.CUCINA, new Point(0, 23), new Point(23, 0));
    generaStanza(0, 4, 0, 5, StanzeEnum.CAMERA_LETTO);
    generaStanza(7, 11, 0, 5, StanzeEnum.SALA_GIOCHI);
    generaStanza(13, 17, 0, 6, StanzeEnum.BIBLIOTECA);
    generaStanza(20, 23, 0, 6, StanzeEnum.STUDIO);
    generaStanza(0, 6, 8, 15, StanzeEnum.SALA);
    generaStanza(17, 23, 9, 14, StanzeEnum.INGRESSO);
    generaStanza(0, 5, 18, 23, StanzeEnum.CUCINA);
    generaStanza(8, 14, 16, 23, StanzeEnum.BAGNO);
    generaStanza(19, 23, 17, 23, StanzeEnum.CANTINA);
  }

  public ControlloreDiGioco getControllore() {
    return new ControlloreDiGioco(giocatori, soluzione, new Tabellone(caselle, stanze), pedineArmi);
  }
}
TOP

Related Classes of ingsw.proj.cluedo.logica.InitGioco

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.