Commit bda6db50 authored by Alexandre DESMONTILS's avatar Alexandre DESMONTILS
Browse files

préparation du player java pour essayer d'implementer les effets des differents types de cartes.

parent 55617c4d
......@@ -41,4 +41,6 @@ public interface GameInterface {
void wantRole(int idGame,int id, String role);
void rendDefausse(int idGame, int id, List<Lieu> defausse);
String piocherTraque(int idGame);
}
package fr.univnantes.alma.common;
import fr.univnantes.alma.player.PlayerProxy;
import fr.univnantes.alma.thrift.JoinRequest;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
//un player proxy a mettre + joinRequest
public class GameJoinRequest {
......@@ -32,4 +35,13 @@ public class GameJoinRequest {
public int getId() {
return this.id;
}
public PlayerProxy getPlayer() {
try {
return new PlayerProxy(this.getAddress(), this.getPort(), this.getId(), this.getName());
}catch (TTransportException e) {
e.printStackTrace();
}
return null;
}
}
......@@ -123,7 +123,7 @@ public class Game{
private void handleRequest(GameJoinRequest request) {
try {
PlayerProxy newPlayer = new PlayerProxy(request.getAddress(), request.getPort(), request.getId(), request.getName());
this.players.add(newPlayer);
this.players.add(request.getPlayer());
//newPlayer.askRole();
} catch (TTransportException e) {
......@@ -222,4 +222,8 @@ public class Game{
return true;
}
public String piocherTraque() {
return "";
}
}
......@@ -93,4 +93,9 @@ public class GameController implements GameInterface {
this.games.get(idGame).rendDefausse(id,defausse);
}
@Override
public String piocherTraque(int idGame) {
return this.games.get(idGame).piocherTraque();
}
}
......@@ -21,6 +21,7 @@ public class GameServiceHandler implements GameService.Iface {
@Autowired
GameInterface service;
@Autowired
final CarteBuilder builder = new CarteBuilder();
@Override
......
......@@ -5,11 +5,13 @@ import java.util.List;
public interface Creature extends PlayerInterface {
void troisCartes();
void placerArtemia(int gameId, int lieu);
void defausserMainTraque();
void placerCreature(int gameId, int lieu);
void placerArtemia();
void placerCible(int gameId, List<Integer> lieux);
void placerCreature();
void askCarteTraque(int gameId, String carte);
void placerCible();
void askCarteTraque();
}
package fr.univnantes.alma.player;
import ch.qos.logback.core.util.COWArrayList;
import fr.univnantes.alma.carte.CarteBuilder;
import fr.univnantes.alma.carte.lieux.Lieu;
import fr.univnantes.alma.carte.survie.CarteSurvie;
import fr.univnantes.alma.carte.traque.CarteTraque;
import fr.univnantes.alma.common.GameInterface;
import fr.univnantes.alma.game.GameController;
import fr.univnantes.alma.thrift.PlayerService.Client;
import org.apache.commons.codec.digest.MurmurHash3;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
......@@ -10,9 +16,9 @@ import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
//JOUEUR !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//appel des mehtodes du joueur dessus
......@@ -21,18 +27,33 @@ public class PlayerProxy implements PlayerInterface, Creature, Traque {
private Client client;
private int id;
private String name;
private String role;
GameInterface gameController;
private int idGame;
private int pv;
private List<Lieu> defausseLieu;
private List<Lieu> mainLieu;
private List<CarteSurvie> mainSurvie;
private List<CarteTraque> mainTraque;
private boolean surlieuxadjacentsCible;
private boolean surlieuxadjacentsArtemia;
private boolean surlieuxadjacentsCreature;
public int getId() {
return id;
}
public void setIdGame(int idGame) {
this.idGame = idGame;
}
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;
this.gameController = new GameController();
}
//permet de passer un player dans le type traqué (initialisation de la partie)
public Traque playerToTraque() {
......@@ -45,48 +66,102 @@ public class PlayerProxy implements PlayerInterface, Creature, Traque {
@Override
public void startGame(int gameId) {
try {
this.setIdGame(gameId);
/*try {
client.startGame(gameId);
} catch (TException e) {
e.printStackTrace();
}
}*/
}
@Override
public void yourRole(String role) {
//client.yourRole(role);
CarteBuilder builder = new CarteBuilder();
this.role = role;
if (role.equals("Créature")) {
this.mainLieu = null;
this.mainSurvie = null;
this.defausseLieu = null;
this.mainTraque = new ArrayList<>();
this.pv = 0;
} else {
this.mainLieu = new ArrayList<>();
this.mainLieu.add(builder.buildCarteLieu(1));
this.mainLieu.add(builder.buildCarteLieu(2));
this.mainLieu.add(builder.buildCarteLieu(3));
this.mainLieu.add(builder.buildCarteLieu(4));
this.mainLieu.add(builder.buildCarteLieu(5));
this.mainSurvie = new ArrayList<>();
this.defausseLieu = new ArrayList<>();
this.mainTraque = null;
this.pv = 3;
}
}
@Override
public void askRole() {
//TODO askrole
gameController.wantRole(this.idGame, this.id, "Créature");
}
//-----------------------------------------------------------------------------------
//si je joueur est un traqué
@Override
public void recupLieuxFromDefausse() {
try {
client.recupLieuxFromDefausse();
if (this.role.equals("Traqué")) {
gameController.rendDefausse(this.idGame, this.id, this.defausseLieu);
}
/*try {
//client.recupLieuxFromDefausse();
} catch (TException e) {
e.printStackTrace();
}
}*/
}
@Override
public void askCardSurvie() {
try {
if (mainSurvie.size() > 0) {
gameController.setCarteSurvie(this.idGame, this.id, this.mainSurvie.get(0));
if (this.mainSurvie.get(0).getName().equals("Cavale")) {
//TODO effet de la carte speciale
}
} else {
gameController.setCarteSurvie(this.idGame, this.id, null);
}
/*try {
client.askCardSurvie();
} catch (TException e) {
e.printStackTrace();
}
}*/
}
@Override
public void askCardLieux() {
try {
if (mainLieu.size() > 0) {
gameController.setLieu(this.idGame, this.id, mainLieu.get(0));
this.defausseLieu.add(this.mainLieu.get(0));
this.mainLieu.remove(0);
} else {
if (this.pv == 1) {
this.lacherPrise();
gameController.avancerAssimilation(this.idGame);
askCardLieux();
} else {
if (pv > 1) {
List<Integer> liste = new ArrayList<>();
liste.add(2, 3);
this.resister(liste);
this.askCardLieux();
}
}
}
/*try {
client.askCardLieux();
} catch (TException e) {
e.printStackTrace();
}
}*/
}
@Override
......@@ -104,49 +179,152 @@ public class PlayerProxy implements PlayerInterface, Creature, Traque {
@Override
public void perdrePionsVolonte(int nbPerdus) {
try {
/*try {
client.perdrePionsVolonte(nbPerdus);
} catch (TException e) {
e.printStackTrace();
} }
}*/
this.pv -= nbPerdus;
if (this.pv <= 0) {
this.lacherPrise();
}
}
@Override
public void recupLieuFromDefausse(List<Integer> cartes) {
CarteBuilder builder = new CarteBuilder();
for (Integer c : cartes) {
if (defausseLieu.contains(builder.buildCarteLieu(c))) {
defausseLieu.remove(builder.buildCarteLieu(c));
mainLieu.add(builder.buildCarteLieu(c));
}
}
}
@Override
public void lacherPrise(int gameId) {
public void lacherPrise() {
this.pv = 3;
this.mainLieu = this.defausseLieu;
this.defausseLieu = new ArrayList<>();
}
@Override
public void resister(int gameId, List<Integer> cartes) {
public void resister(List<Integer> cartes) throws IllegalArgumentException{
if (cartes.size() == 2) {
int baseMain = this.mainLieu.size();
recupLieuFromDefausse(cartes);
if (baseMain + 2 == this.mainLieu.size()) {
this.pv -= 1;
if (this.pv <=0) {
this.lacherPrise();
}
} else {
throw new IllegalArgumentException("essai de reprendre des cartes qui ne sont pas dans la défausse");
}
} else {
if (cartes.size() == 4) {
int baseMain = this.mainLieu.size();
recupLieuFromDefausse(cartes);
if (baseMain + 4 == this.mainLieu.size()) {
this.pv -= 2;
if (this.pv <= 0) {
this.lacherPrise();
}
} else {
throw new IllegalArgumentException("essai de reprendre des cartes qui ne sont pas dans la défausse");
}
} else {
throw new IllegalArgumentException("résister ne peut pas se faire pour " + cartes.size() + " cartes");
}
}
}
//---------------------------------------------------------------------------------
//si le joueur est la Créature
@Override
public void troisCartes() {
while (mainTraque.size() < 3) {
String carte = gameController.piocherTraque(this.idGame);
mainTraque.add(new CarteBuilder().buildCarteTraque(carte));
}
}
@Override
public void defausserMainTraque() {
this.mainTraque = new ArrayList<>();
}
@Override
public void placerArtemia(int gameId, int lieu) {
public void placerArtemia() {
List<Lieu> listeRetour = new ArrayList<>();
listeRetour.add(new CarteBuilder().buildCarteLieu(new Random().nextInt(10)));
if (this.surlieuxadjacentsArtemia) {
Lieu carteAdjacente;
if (listeRetour.get(0).getId() > 5) {
carteAdjacente = new CarteBuilder().buildCarteLieu(listeRetour.get(0).getId()-5);
} else {
carteAdjacente = new CarteBuilder().buildCarteLieu(listeRetour.get(0).getId()+5);
}
surlieuxadjacentsArtemia = false;
listeRetour.add(carteAdjacente);
}
gameController.placerArtemia(this.idGame, listeRetour);
}
@Override
public void placerCreature(int gameId, int lieu) {
public void placerCreature() {
List<Lieu> listeRetour = new ArrayList<>();
listeRetour.add(new CarteBuilder().buildCarteLieu(new Random().nextInt(10)));
if (this.surlieuxadjacentsCreature) {
Lieu carteAdjacente;
if (listeRetour.get(0).getId() > 5) {
carteAdjacente = new CarteBuilder().buildCarteLieu(listeRetour.get(0).getId()-5);
} else {
carteAdjacente = new CarteBuilder().buildCarteLieu(listeRetour.get(0).getId()+5);
}
surlieuxadjacentsCreature = false;
listeRetour.add(carteAdjacente);
}
gameController.placerCreature(this.idGame, listeRetour);
}
@Override
public void placerCible(int gameId, List<Integer> lieux) {
public void placerCible() {
List<Lieu> listeRetour = new ArrayList<>();
listeRetour.add(new CarteBuilder().buildCarteLieu(new Random().nextInt(10)));
if (this.surlieuxadjacentsCible) {
Lieu carteAdjacente;
if (listeRetour.get(0).getId() > 5) {
carteAdjacente = new CarteBuilder().buildCarteLieu(listeRetour.get(0).getId()-5);
} else {
carteAdjacente = new CarteBuilder().buildCarteLieu(listeRetour.get(0).getId()+5);
}
surlieuxadjacentsCible = false;
listeRetour.add(carteAdjacente);
}
gameController.placerCible(this.idGame, listeRetour);
}
@Override
public void askCarteTraque(int gameId, String carte) {
public void askCarteTraque() {
if (mainTraque.size() > 0) {
gameController.setCarteTraque(this.idGame, this.mainTraque.get(0));
if (this.mainTraque.get(0).getName().equals("Gargantua") || this.mainTraque.get(0).getName().equals("Mirage") || this.mainTraque.get(0).getName().equals("Virus")) {
if (this.mainTraque.get(0).getName().equals("Virus")) {
this.surlieuxadjacentsArtemia = true;
} else {
if (this.mainTraque.get(0).getName().equals("Gargantua")) {
this.surlieuxadjacentsCreature = true;
} else {
this.surlieuxadjacentsCible = true;
}
}
}
} else {
gameController.setCarteTraque(this.idGame, null);
}
}
}
......@@ -17,7 +17,7 @@ public interface Traque extends PlayerInterface{
void recupLieuFromDefausse(List<Integer> cartes);
void lacherPrise(int gameId);
void lacherPrise();
void resister(int gameId, List<Integer> cartes);
void resister(List<Integer> cartes);
}
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