Commit 176c22c3 authored by Alexandre DESMONTILS's avatar Alexandre DESMONTILS
Browse files

ajout de la méthode effet dans les lieux et implémentation java de l'effet de abris

parent acad943f
......@@ -4,6 +4,8 @@ import fr.univnantes.alma.carte.lieux.*;
import fr.univnantes.alma.carte.survie.*;
import fr.univnantes.alma.carte.traque.*;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Hashtable;
public class CarteBuilder {
......@@ -104,4 +106,16 @@ public class CarteBuilder {
}
return this.listeLieux[number-1];
}
public Collection<CarteTraque> listeCarteTraque() {
return listeCarteTraque.values();
}
public Collection<CarteSurvie> listeCarteSurvie() {
return listeCarteSurvie.values();
}
public Lieu[] getListeLieux() {
return listeLieux;
}
}
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Abris extends Lieu {
public Abris() {
super(7, "L'Abris");
}
@Override
public void effet(Game game, int idJoueur) {
game.getJoueurs(idJoueur).effetAbris();
}
}
\ No newline at end of file
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Antre extends Lieu {
public Antre() {
super(1, "L'Antre");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Artefact extends Lieu {
public Artefact() {
super(10, "Artefact");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Epave extends Lieu {
public Epave() {
super(8, "L'Epave");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
\ No newline at end of file
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Jungle extends Lieu {
public Jungle() {
super(2, "Jungle");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public abstract class Lieu {
private int id;
private String name;
......@@ -13,6 +15,6 @@ public abstract class Lieu {
return id;
}
//effet
public abstract void effet(Game game, int idJoueur);
}
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Marais extends Lieu {
public Marais() {
super(6, "Marais");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Plage extends Lieu {
public Plage() {
super(4, "La Plage");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
\ No newline at end of file
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Riviere extends Lieu {
public Riviere() {
super(3, "La Rivière");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
\ No newline at end of file
package fr.univnantes.alma.carte.lieux;
import fr.univnantes.alma.game.Game;
public class Rover extends Lieu {
public Rover() {
super(5, "Le Rover");
}
@Override
public void effet(Game game, int idJoueur) {
}
}
\ No newline at end of file
......@@ -43,4 +43,8 @@ public interface GameInterface {
void rendDefausse(int idGame, int id, List<Lieu> defausse);
String piocherTraque(int idGame);
String piocherSurvie(int idGame, int id);
void defausserCarteSurvie(int idGame, CarteSurvie carte);
}
package fr.univnantes.alma.game;
import fr.univnantes.alma.carte.CarteBuilder;
import fr.univnantes.alma.carte.survie.*;
import fr.univnantes.alma.carte.traque.*;
import fr.univnantes.alma.carte.lieux.*;
......@@ -27,6 +28,10 @@ public class Game{
* Counter used to increment player identifications.
*/
private final AtomicInteger idCounter = new AtomicInteger(0);
private Stack<CarteTraque> piocheTraque;
private Stack<CarteSurvie> piocheSurvie;
private List<CarteTraque> defausseTraque;
private List<CarteSurvie> defausseSurvie;
private Hashtable<Integer, String> rolesAsked;
private final AtomicInteger expectedPlayers;
......@@ -56,6 +61,7 @@ public class Game{
private Hashtable<Integer, Traque> listTraque;
private Creature joueurCreature;
//----------------------------------------------------------------------------
//creation et connexion à la partie
public Game(int expectedPlayers) {
......@@ -91,11 +97,50 @@ public class Game{
if (expectedPlayers == 3) this.assimilation = 8;
if (expectedPlayers == 2) this.assimilation = 7;
this.piocheSurvie = new Stack<>();
this.piocheTraque = new Stack<>();
this.defausseSurvie = new Stack<>();
this.defausseTraque = new Stack<>();
//remplissage de la pioche survie
this.initPiocheSurvie();
//remplissage de la pioche traque
this.initPiocheTraque();
play = new Thread(() -> this.start());
play.start();
}
private void initPiocheTraque() {
CarteBuilder builder = new CarteBuilder();
Collection<CarteTraque> cartes = builder.listeCarteTraque();
List<CarteTraque> listeCarteTraque = new ArrayList<>();
for (CarteTraque i : cartes) {
listeCarteTraque.add(i);
}
Random rand = new Random();
while (listeCarteTraque.size() > 0) {
int CarteChoisie = rand.nextInt(listeCarteTraque.size());
this.piocheTraque.push(listeCarteTraque.get(CarteChoisie));
listeCarteTraque.remove(CarteChoisie);
}
}
private void initPiocheSurvie() {
CarteBuilder builder = new CarteBuilder();
Collection<CarteSurvie> cartes = builder.listeCarteSurvie();
List<CarteSurvie> listeCarteSurvie = new ArrayList<>();
for (CarteSurvie i : cartes) {
listeCarteSurvie.add(i);
}
Random rand = new Random();
while (listeCarteSurvie.size() > 0) {
int CarteChoisie = rand.nextInt(listeCarteSurvie.size());
this.piocheSurvie.push(listeCarteSurvie.get(CarteChoisie));
listeCarteSurvie.remove(CarteChoisie);
}
}
//rentre l'appel dans la liste des demandes en cours de traitement
public int join(GameJoinRequest request) {
int id = idCounter.getAndIncrement();
......@@ -196,7 +241,6 @@ public class Game{
this.lieux.put(id, lieu);
}
public synchronized void setCarteSurvie(int id, CarteSurvie carte) {
while (this.cartesSurvies.contains(id)){
this.cartesSurvies.remove(id);
......@@ -204,14 +248,12 @@ public class Game{
this.cartesSurvies.put(id, carte);
}
public void setCarteTraque(CarteTraque carte) {
if (!this.cartesTraques.contains(carte)){
this.cartesTraques.add(carte);
}
}
public synchronized boolean wantRole(int id,String role) {
return rolesAsked.put(id, role) == role;
......@@ -223,7 +265,56 @@ public class Game{
return true;
}
public Traque getJoueurs(int idJoueur) {
return this.listTraque.get(idJoueur);
}
//pioche si la pile n'est pas vide, si vide alors on mélange la défausse, mais si la défausse est aussi vide, on ne peut pas piocher
public String piocherTraque() {
return "";
if (piocheTraque.size() == 0) {
if (defausseTraque.size() == 0) {
return null;
}
melangerCarteTraque();
}
defausseTraque.add(this.piocheTraque.peek());
return this.piocheTraque.pop().getName();
}
public void defausserCarteTraque(CarteTraque carte) {
this.defausseTraque.add(carte);
}
private void melangerCarteTraque() {
Random rand = new Random();
while (this.defausseTraque.size() > 0) {
int CarteChoisie = rand.nextInt(this.defausseTraque.size());
this.piocheTraque.push(this.defausseTraque.get(CarteChoisie));
this.defausseTraque.remove(CarteChoisie);
}
}
public void defausserCarteSurvie(CarteSurvie carte) {
this.defausseSurvie.add(carte);
}
private void melangerCarteSurvie() {
Random rand = new Random();
while (this.defausseSurvie.size() > 0) {
int CarteChoisie = rand.nextInt(this.defausseSurvie.size());
this.piocheSurvie.push(this.defausseSurvie.get(CarteChoisie));
this.defausseTraque.remove(CarteChoisie);
}
}
//pioche si la pile n'est pas vide, si vide alors on mélange la défausse, mais si la défausse est aussi vide, on ne peut pas piocher
public String piocherSurvie(int id) {
if (piocheSurvie.size() == 0) {
if (defausseSurvie.size() == 0) {
return null;
}
melangerCarteSurvie();
}
return piocheSurvie.pop().getName();
}
}
......@@ -98,4 +98,14 @@ public class GameController implements GameInterface {
return this.games.get(idGame).piocherTraque();
}
@Override
public String piocherSurvie(int idGame, int id) {
return games.get(idGame).piocherSurvie(id);
}
@Override
public void defausserCarteSurvie(int idGame, CarteSurvie carte) {
this.games.get(idGame).defausserCarteSurvie(carte);
}
}
......@@ -238,6 +238,24 @@ public class PlayerProxy implements PlayerInterface, Creature, Traque {
}
}
}
//---------------------------------------------------------------------------------
//effet carte Lieu sur le traqué
@Override
public void effetAbris() {
CarteSurvie carte1 = new CarteBuilder().buildCarteSurvie(gameController.piocherSurvie(this.idGame, this.id));
CarteSurvie carte2 = new CarteBuilder().buildCarteSurvie(gameController.piocherSurvie(this.idGame, this.id));
//choix d'une carte
//client.choixAbris(carte1, carte2) : void
if (new Random().nextBoolean()) {
mainSurvie.add(carte1);
gameController.defausserCarteSurvie(this.idGame, carte2);
} else {
mainSurvie.add(carte2);
gameController.defausserCarteSurvie(this.idGame, carte1);
}
}
//---------------------------------------------------------------------------------
//si le joueur est la Créature
......
......@@ -20,4 +20,6 @@ public interface Traque extends PlayerInterface{
void lacherPrise();
void resister(List<Integer> cartes);
void effetAbris();
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment