171 lines
3.4 KiB
Java
Raw Normal View History

2020-04-17 16:03:59 +02:00
package main;
import java.util.ArrayList;
2020-04-21 15:27:27 +02:00
import java.util.Collections;
2020-04-17 16:03:59 +02:00
import java.util.HashMap;
import java.util.List;
import java.util.Map;
2020-04-21 13:45:45 +02:00
import carte.CarteLieu;
2020-04-17 16:03:59 +02:00
public class Plateau {
2020-04-21 15:27:27 +02:00
2020-04-17 16:03:59 +02:00
private List<Joueur> joueurs;
private List<CarteLieu> lieux;
public static final String NB_HUNTERS = "nb_hunters";
public static final String NB_SHADOWS = "nb_shadows";
public static final String NB_NEUTRES = "nb_neutres";
public static final String NB_MORTS = "nb_morts";
public static final String NB_MORTS_NEUTRAL = "nb_morts_neutral";
public static final String NB_MORTS_HUNTER = "nb_morts_hunter";
public static final String NB_MORTS_SHADOW = "nb_morts_shadow";
public static final String PARTIE_FINIE = "partie_finie";
2020-04-17 16:03:59 +02:00
private Map<String, Integer> stats;
2020-04-17 16:03:59 +02:00
public Plateau(List<Joueur> joueurs) {
this.joueurs = joueurs;
this.lieux = new ArrayList<>();
2020-04-20 12:38:06 +02:00
this.stats = new HashMap<>();
2020-04-17 16:03:59 +02:00
// Initialisation plateau
2020-04-20 12:38:06 +02:00
this.stats.put(NB_HUNTERS, 0);
this.stats.put(NB_SHADOWS, 0);
this.stats.put(NB_NEUTRES, 0);
this.stats.put(NB_MORTS, 0);
this.stats.put(NB_MORTS_NEUTRAL, 0);
this.stats.put(NB_MORTS_HUNTER, 0);
this.stats.put(NB_MORTS_SHADOW, 0);
this.stats.put(PARTIE_FINIE, 0);
2020-04-18 14:05:53 +02:00
2020-04-21 15:27:27 +02:00
2020-04-17 16:03:59 +02:00
}
2020-04-21 13:45:45 +02:00
public void jeu() {
2020-04-21 15:27:27 +02:00
int nbJoueurs = this.joueurs.size()-1;
int i = 1;
2020-04-21 13:45:45 +02:00
while(true) {
Joueur currentJoueur = this.joueurs.get(nbJoueurs % i);
deplacer(currentJoueur);
if(currentJoueur.choisir()) {
currentJoueur.utiliserEffetLieu();
}
if(currentJoueur.choisir()){
Joueur cible = currentJoueur.choisirAdjacents();
attaquer(currentJoueur,cible);
}
i++;
}
2020-04-17 16:03:59 +02:00
}
2020-04-21 15:27:27 +02:00
public void deplacer(Joueur currentJoueur) {
2020-04-17 16:03:59 +02:00
2020-04-21 16:02:01 +02:00
2020-04-21 15:27:27 +02:00
boolean attributed = false;
2020-04-21 13:45:45 +02:00
2020-04-21 15:27:27 +02:00
while(!attributed) {
2020-04-21 16:02:01 +02:00
int roll = sumRolls();
2020-04-21 15:27:27 +02:00
for(CarteLieu cl : lieux) {
2020-04-21 16:02:01 +02:00
2020-04-21 15:27:27 +02:00
if(cl.coordinatesContains(roll) && currentJoueur.getCarteLieu() != cl){
2020-04-21 16:02:01 +02:00
2020-04-21 15:27:27 +02:00
currentJoueur.deplacer(cl);
attributed = true;
break;
}
2020-04-21 13:45:45 +02:00
}
}
2020-04-17 16:03:59 +02:00
}
2020-04-21 13:45:45 +02:00
2020-04-17 16:03:59 +02:00
public void attaquer(Joueur joueur1, Joueur joueur2) {
int attaque = diffRolls();
if(attaque != 0) {
joueur1.attaquer(joueur2,attaque);
}
2020-04-17 16:03:59 +02:00
}
public Joueur selectionnerJoueur() {
return new Joueur("0");
}
public int diffRolls() {
return Math.abs(roll6()-roll4());
2020-04-17 16:03:59 +02:00
}
public int roll4() {
return (int) Math.floor(Math.random() * 3)+1;
2020-04-17 16:03:59 +02:00
}
2020-04-17 16:03:59 +02:00
public int roll6() {
return (int) Math.floor(Math.random() * 5)+1;
2020-04-17 16:03:59 +02:00
}
2020-04-21 13:45:45 +02:00
public int sumRolls()
{
return roll6() + roll4();
}
public List<Joueur> getJoueurs() {
return this.joueurs;
}
2020-04-18 14:05:53 +02:00
2020-04-20 12:38:06 +02:00
public void setStat(String key, int valeur) {
this.stats.put(key, valeur);
}
2020-04-18 14:05:53 +02:00
public int getStat(String key) {
2020-04-20 12:38:06 +02:00
2020-04-18 14:05:53 +02:00
if(this.stats.containsKey(key))
{
2020-04-20 12:38:06 +02:00
return this.stats.get(key);
2020-04-18 14:05:53 +02:00
}else {
//TODO Exception
return -1;
}
}
2020-04-21 15:27:27 +02:00
public void shuffleLieux(){
this.lieux.forEach(x -> x.setVoisin(null));
if(lieux.size() % 2 == 0) {
Collections.shuffle(lieux);
for(int i = 0; i < lieux.size()-2; i += 2) {
lieux.get(i).setVoisin(lieux.get(i+2));
lieux.get(i+2).setVoisin(lieux.get(i));
}
}else {
//TODO Throw exception
}
}
public void setLieux(List<CarteLieu> lieux) {
this.lieux = lieux;
shuffleLieux();
}
2020-04-17 16:03:59 +02:00
}