je suis passé a intelj et j'ai ajouter le support de la meulse et la limitation de main

This commit is contained in:
marc barbier
2020-12-17 10:28:05 +01:00
parent 98baa2229a
commit 18b64e929d
114 changed files with 99 additions and 26 deletions
+4 -1
View File
@@ -1,6 +1,7 @@
package game;
public final class Command {
private Command(){} // pas de contructor on ne veut pas instancier cette classe
private Command(){} // pas de contructor on ne veut pas instancier cette classe
public static final String YOURTURN="yourturn";
public static final String DRAW = "draw";
public static final String GET_DECK = "getDeck";
@@ -21,4 +22,6 @@ public final class Command {
public static final String PONG = "pong";
public static final String NOK = "nok";
public static final String OK = "ok";
public static final String MEULE = "meule";
}
+15 -2
View File
@@ -9,17 +9,27 @@ import game.deck.Deck;
public class Hand {
List<Card> hand;
private Deck deck;
private static final int MAX_CARD_IN_HAND = 5;
public Hand(Deck deck) {
this.deck=deck;
this.hand = new ArrayList<>();
}
//TODO limiter le nombre de carte
/**
* permet de piocher des carte depuis le deck et de les mettre dans la main
* @param i nombre de carte pioché
*
* si la main est pleine alors il arettra de pioché et se mettera a meulé
*/
public void draw(int i) {
for(int j=0 ; j < i ; j++)
{
hand.add(deck.getCards().pop());
if(!isFull())hand.add(deck.draw());
else{
//si la main est pleine alors la carte pioché est perdu
deck.draw();
}
}
}
@@ -45,4 +55,7 @@ public class Hand {
return hand.remove(index);
}
public boolean isFull() {
return hand.size() == MAX_CARD_IN_HAND;
}
}
+36 -19
View File
@@ -22,8 +22,8 @@ public class Joueur {
}
public void requestDataEarlyGameData() throws IOException {
coms.send("getDeck");
String deckname = (String) coms.recieve();
coms.send(Command.GET_DECK);
String deckname = coms.recieve();
deck = DeckRegistery.get(deckname);
deck.shuffle();
hand = new Hand(deck);
@@ -51,6 +51,19 @@ public class Joueur {
coms.send(Command.LOSE);
}
/**
* cette commande doit être utilisé a chaque début de tour elle permet d'augmenter la mana du joueur
* @throws IOException
*/
public void prepMana() throws IOException {
//on prepare la mana
if(currentMana < 10)currentMana++;
mana=currentMana;
coms.send(Command.SETMANA);
coms.send(mana);
}
/**
* premiére phase de jeu avant d'attacker
* @param adversaire
@@ -58,19 +71,12 @@ public class Joueur {
* @throws IOException
*/
public void mainPhase1(Joueur adversaire, Board board) throws IOException {
//on prepare la mana
if(currentMana < 10)currentMana++;
mana=currentMana;
coms.send(Command.SETMANA);
coms.send(mana);
//on affiche le debut de tour
coms.send(Command.YOURTURN);
System.out.println("NOW WE SHOULDN'T SEND COMMAND");
boolean phaseActive=true;
//debut de l'écoude des action client
//on retire le time out sur l'adversaire car sa peut causer des désyncronisatoin et des crash
adversaire.getComs().getSocket().setSoTimeout(Integer.MAX_VALUE);
//debut de l'écoude des action client
while(phaseActive)
{
coms.getSocket().setSoTimeout(500);
@@ -104,12 +110,13 @@ public class Joueur {
}
private void putCard(Joueur adversaire, Board board) throws IOException {
//crash here
String info = (String) coms.recieve();
String info = coms.recieve();
//si ce n'est pas un nombre
if(!info.matches("-?\\d+")) {
//alors on affiche l'inforamtion si la sortie d'erreur
System.err.println(info);
}else {
//on recupére la carte
int cardId = Integer.parseInt(info);
Class<? extends Card> cardClass = CardRegistery.get(cardId);
@@ -141,11 +148,6 @@ public class Joueur {
coms.send(zone);
}
public void mainPhase2() {
// TODO Auto-generated method stub
}
public void endPhase() {
// TODO Auto-generated method stub
@@ -171,7 +173,22 @@ public class Joueur {
public void sendMessage(String message) throws IOException
{
coms.send("pupup");
coms.send(Command.POPUP);
coms.send(message);
}
public void yourturn() throws IOException {
//on affiche le debut de tour
coms.send(Command.YOURTURN);
}
public boolean isHandFull() {
return hand.isFull();
}
public void meule(int nbcard) throws IOException {
coms.send(Command.MEULE);
coms.send(nbcard);
deck.draw(1);
}
}
+14 -4
View File
@@ -5,7 +5,6 @@ import java.util.Random;
public class Match extends Thread {
Joueur joueur1, joueur2;
int tour = 1;
private Board board;
private Random rand;
@@ -85,13 +84,24 @@ public class Match extends Thread {
//on affiche le message du debut de tour enemie
Joueur enemy = joueur.equals(joueur1) ? joueur2 : joueur1;
//si la main du joeur n'est pas pleine
if(!joueur.isHandFull())joueur.draw(1); //pioche 1 carte
else{
//sinon on pert une carte
joueur.meule(1);
}
//on prepare la mana
joueur.prepMana();
//on dit au joeur que c'est a lui de jouer
joueur.yourturn();
//et on dit au joueur oposé que ce n'est pas le tien
enemy.debutTourEnemie();
joueur.draw(1); //pioche 1 carte
joueur.mainPhase1(enemy,board); //Joue autant de carte qu'il veut/peut
battlePhase(joueur);//lance des attaques à son adversaire qui peut répliquer
joueur.mainPhase2();//Nouvelle phase ou le @joueur peut jouer ses cartes si il veut/peut
//cette phases ne serira surment pas car nous manquon de temps pour implrementer les fonctionnalité specifique de certaine cartes
joueur.endPhase();//fin du tour du @joueur
}
+17
View File
@@ -1,6 +1,8 @@
package game.deck;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Stack;
import game.cards.Card;
@@ -14,4 +16,19 @@ public abstract class Deck {
Collections.shuffle(getCards());
}
public Card draw()
{
return getCards().pop();
}
public List<Card> draw(int amount)
{
List<Card> cards = new ArrayList<>();
for(int i = 0 ; i < amount ; i++)
{
cards.add(getCards().pop());
}
return cards;
}
}