Commit 55617c4d authored by Alexandre DESMONTILS's avatar Alexandre DESMONTILS
Browse files

premières modfis pour l'impelmentation de la partie

parent 48c0e509
......@@ -6,6 +6,8 @@ import fr.univnantes.alma.thrift.JoinRequest;
//un player proxy a mettre + joinRequest
public class GameJoinRequest {
private JoinRequest request;
private int id;
public GameJoinRequest(JoinRequest req) {
request = req;
......@@ -14,4 +16,20 @@ public class GameJoinRequest {
public String getName() {
return request.name;
}
public String getAddress() {
return request.address;
}
public int getPort() {
return request.port;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
}
......@@ -4,13 +4,13 @@ import fr.univnantes.alma.carte.survie.*;
import fr.univnantes.alma.carte.traque.*;
import fr.univnantes.alma.carte.lieux.*;
import fr.univnantes.alma.common.GameJoinRequest;
import fr.univnantes.alma.player.Creature;
import fr.univnantes.alma.player.PlayerProxy;
import fr.univnantes.alma.player.Traque;
import org.apache.thrift.transport.TTransportException;
import org.atlanmod.commons.log.Log;
import java.util.Hashtable;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.ArrayList;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
......@@ -43,11 +43,19 @@ public class Game{
private List<Lieu> cible;
//sauvegarde des lieux joués par les joueurs
private Hashtable<Integer, Lieu> lieux;
//idem que pour les lieu mais appliqué aux cartes survies
private Hashtable<Integer, CarteSurvie> cartesSurvies;
//les cartes jouées par la créature (stockées dans une liste si une carte lui permet d'en jouer deux en un tour
private List<CarteTraque> cartesTraques;
//le thread dans lequel sera exécutée la partie
private Thread play;
//la liste de joueur de la partie
private List<PlayerProxy> players;
//liste des traqués (initialisé après les demandes de roles
private Hashtable<Integer, Traque> listTraque;
private Creature joueurCreature;
//----------------------------------------------------------------------------
//creation et connexion à la partie
public Game(int expectedPlayers) {
......@@ -66,7 +74,7 @@ public class Game{
this.cartesTraques = new ArrayList<CarteTraque>();
//liste des joueurs
this.players = new ArrayList<>();
//les roles demandés par les utilisateurs
this.rolesAsked = new Hashtable<>();
if (expectedPlayers == 7) this.secours = 18;
......@@ -88,8 +96,10 @@ public class Game{
play.start();
}
//rentre l'appel dans la liste des demandes en cours de traitement
public int join(GameJoinRequest request) {
int id = idCounter.getAndIncrement();
request.setId(id);
requests.offer(request);
return id;
}
......@@ -101,6 +111,7 @@ public class Game{
while (requests.size() < expectedPlayers.intValue()) {
try {
//prend une requete et appelle le traitement de la requete
request = requests.take();
this.handleRequest(request);
} catch (InterruptedException e) {
......@@ -111,7 +122,10 @@ public class Game{
private void handleRequest(GameJoinRequest request) {
try {
this.players.add(new PlayerProxy("", 0));
PlayerProxy newPlayer = new PlayerProxy(request.getAddress(), request.getPort(), request.getId(), request.getName());
this.players.add(newPlayer);
//newPlayer.askRole();
} catch (TTransportException e) {
e.printStackTrace();
}
......@@ -121,9 +135,29 @@ public class Game{
//gestion de la partie
private void start() {
this.waitForPlayers();
distributionDesRoles();
Log.info("We can start !");
}
private void distributionDesRoles() {
//combien de demande de role créature
List<Integer> nbDemandeCréature = new ArrayList<>();
;
for (Enumeration<Integer> i = rolesAsked.keys(); i.hasMoreElements();) {
if (rolesAsked.get(i) == "Créature" || rolesAsked.get(i) == "les deux") {
int id = i.nextElement();
nbDemandeCréature.add(id);
}
}
Random rand = new Random();
int selectedPlayer = rand.nextInt(nbDemandeCréature.size());
this.joueurCreature = players.get(selectedPlayer).playerToCreature();
joueurCreature.yourRole("Créature");
players.remove(joueurCreature);
for (PlayerProxy i : players) {
listTraque.put(i.getId(), i.playerToTraque());
i.yourRole("Traqué");
}
}
public void avancerAssimilation() {
......@@ -134,21 +168,28 @@ public class Game{
this.secours--;
}
//retourne vrai si la partie est finie
public boolean isFinished() {
return assimilation == 0 || secours == 0;
}
//place la créature dans les lieux passés en paramètres
public void placerCreature(List<Lieu> lieux) {
this.creature = lieux;
}
//idem que pour le jeton créature
public void placerCible(List<Lieu> lieux) {
this.cible = lieux;
}
//idem que pour le jeton créature
public void placerArtemia(List<Lieu> lieux) {
this.artemia = lieux;
}
public void setLieu(int id, Lieu lieu) {
//set un lieu pour un joueur donné
public synchronized void setLieu(int id, Lieu lieu) {
while (this.lieux.contains(id)){
this.lieux.remove(id);
}
......@@ -156,7 +197,7 @@ public class Game{
}
public void setCarteSurvie(int id, CarteSurvie carte) {
public synchronized void setCarteSurvie(int id, CarteSurvie carte) {
while (this.cartesSurvies.contains(id)){
this.cartesSurvies.remove(id);
}
......
......@@ -2,7 +2,7 @@ package fr.univnantes.alma.player;
import java.util.List;
public interface Creature {
public interface Creature extends PlayerInterface {
void troisCartes();
void placerArtemia(int gameId, int lieu);
......
......@@ -11,5 +11,7 @@ public interface PlayerInterface {
void yourRole(String role);
void askRole();
}
......@@ -19,12 +19,28 @@ import java.util.List;
public class PlayerProxy implements PlayerInterface, Creature, Traque {
private Client client;
private int id;
private String name;
public PlayerProxy(String addr, int port) throws TTransportException {
public int getId() {
return id;
}
public PlayerProxy(String addr, int port, int id, String name) throws TTransportException {
TTransport transport = new TSocket(addr, port);
TProtocol protocol = new TBinaryProtocol(transport);
client = new Client(protocol);
this.id = id;
this.name = name;
}
//permet de passer un player dans le type traqué (initialisation de la partie)
public Traque playerToTraque() {
return this;
}
//permet de passer le player dans le type créature (initialisation de la partie)
public Creature playerToCreature() {
return this;
}
@Override
......@@ -38,7 +54,12 @@ public class PlayerProxy implements PlayerInterface, Creature, Traque {
@Override
public void yourRole(String role) {
//client.yourRole(role);
}
@Override
public void askRole() {
//TODO askrole
}
@Override
......
......@@ -4,7 +4,7 @@ import fr.univnantes.alma.carte.lieux.Lieu;
import java.util.List;
public interface Traque {
public interface Traque extends PlayerInterface{
void recupLieuxFromDefausse();
void askCardSurvie();
......
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