From 42737899cdde06dcb58021b6c635a129bf5cc5ba Mon Sep 17 00:00:00 2001 From: guezoloic Date: Thu, 23 May 2024 18:27:14 +0200 Subject: [PATCH] Ajout de channel --- src/Main.java | 6 ++-- src/connexion/Channel.java | 55 ++++++++++++++---------------- src/connexion/Reseau.java | 20 +++++++---- src/game/Terminal.java | 69 +++++++++++++++++++++++++++++++++++--- 4 files changed, 107 insertions(+), 43 deletions(-) diff --git a/src/Main.java b/src/Main.java index a9461e7..fbb1547 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,24 +1,24 @@ import connexion.Channel; +import connexion.Reseau; import environnements.*; import game.Terminal; import personnages.*; import types.Item; public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { Personnage.n = 2; Map map = new Map(20, 20); Personnage[] personnages = new Personnage[] { new Player(new int[] {0, 0}, "Philippe Etchebest"), - new Channel(map, "23", "24") }; // map.addObjects(Item.FRAISE, 0, 0); // map.addObjectsRandomize(new Item[] {Item.FRAISE}, 1); - new Terminal(map, personnages).run("24"); + new Terminal(map, personnages).run(new String(), new String()); } } diff --git a/src/connexion/Channel.java b/src/connexion/Channel.java index 74e95ec..ca43073 100644 --- a/src/connexion/Channel.java +++ b/src/connexion/Channel.java @@ -10,33 +10,22 @@ import personnages.Personnage; public class Channel extends Personnage { private Reseau reseau; private static Reseau adversaire; + private String channel; private Map map; public Channel(Map map, String channel, String autreChannel) { - super(new int [] {map.getGrid()[0].length, map.getGrid().length}); + super(new int [] {map.getGrid()[0].length - 1, map.getGrid().length - 1}); this.map = map; this.name = autreChannel; + this.channel = channel; + reseau = new Reseau(channel); adversaire = new Reseau(autreChannel); } - - public Grid[][] getInverseGridChannel() { - Grid[][] grid = map.getInverseGrid(); - Grid[][] inverseGrid = new Grid[grid.length][grid[0].length]; - - for (int j = grid.length - 1; j >= 0; j--) { - for (int i = grid[j].length - 1; i >= 0; i--) { - inverseGrid[j][i] = grid[j][grid[j].length - 1 - i]; - } - } - - return inverseGrid; - } - /** * Méthode permettant l'envoi de message, grâce à celle de Réseau * @param String contenant la direction voulue @@ -59,27 +48,30 @@ public class Channel extends Personnage { * @return Mouvement */ public Mouvement conversionMouvement(String s){ - if (s.equals("U") || s.equals("u")){ - return Mouvement.HAUT; - }else if (s.equals("D") || s.equals("d")){ - return Mouvement.BAS; - }else if (s.equals("L") || s.equals("l")){ - return Mouvement.GAUCHE; - }else if (s.equals("R") || s.equals("r")){ - return Mouvement.DROITE; + if (s != null) { + if (s.equals("U") || s.equals("u")){ + return Mouvement.HAUT; + }else if (s.equals("D") || s.equals("d")){ + return Mouvement.BAS; + }else if (s.equals("L") || s.equals("l")){ + return Mouvement.GAUCHE; + }else if (s.equals("R") || s.equals("r")){ + return Mouvement.DROITE; + } } + return null; } private static String conversionString(Mouvement mouvement){ if (mouvement == Mouvement.HAUT) { - return "U"; - } else if (mouvement == Mouvement.BAS) { return "D"; + } else if (mouvement == Mouvement.BAS) { + return "U"; } else if (mouvement == Mouvement.GAUCHE) { - return "L"; - } else if (mouvement == Mouvement.DROITE) { return "R"; + } else if (mouvement == Mouvement.DROITE) { + return "L"; } return null; } @@ -93,10 +85,13 @@ public class Channel extends Personnage { */ @Override public boolean round(Map map, String channel){ - int[] coordinate=this.getHeadCoordinate(); + Mouvement mouvement; - this.moveSnake(conversionMouvement(recupererMessage())); - + System.out.println("Attente de l'autre joueur."); + while ((mouvement = conversionMouvement(recupererMessage())) == null) reseau.reconnexion(this.channel); + this.moveSnake(mouvement); + + int[] coordinate=this.getHeadCoordinate(); if (map.isGameOver(coordinate) || this.applyEffects(map.getEffect(coordinate))){ return true; } diff --git a/src/connexion/Reseau.java b/src/connexion/Reseau.java index 8b30758..ca8bf80 100644 --- a/src/connexion/Reseau.java +++ b/src/connexion/Reseau.java @@ -42,6 +42,7 @@ import static java.util.Arrays.copyOfRange; */ public Reseau(String channel) { this.CHANNEL = channel; + this.wordArrayList = new ArrayList(); this.newerWordArrayList = new ArrayList(); @@ -112,10 +113,17 @@ import static java.util.Arrays.copyOfRange; * @return il renvoie le {@link ArrayList} de la liste */ public ArrayList searchContentSorted() { - ArrayList localNewerArrayList = this.searchContent(); - if (this.getArrayContent().isEmpty()) this.addContentToContent(localNewerArrayList); - else this.searchDuplicates(localNewerArrayList); - return this.wordArrayList; + ArrayList notsorted; + + if ((notsorted = this.searchContent()) != null) { + ArrayList localNewerArrayList = new ArrayList<>(notsorted); + + if (this.getArrayContent().isEmpty()) this.addContentTonewerArrayList(localNewerArrayList); + else this.searchDuplicates(localNewerArrayList); + return this.wordArrayList; + } + + return null; } /** @@ -129,7 +137,7 @@ import static java.util.Arrays.copyOfRange; */ public ArrayList searchArrayListNotSorted() { ArrayList localNewerArrayList = this.searchContent(); - this.addContentToContent(localNewerArrayList); + this.addContentTonewerArrayList(localNewerArrayList); return this.wordArrayList; } @@ -193,7 +201,7 @@ import static java.util.Arrays.copyOfRange; } } - private void addContentToContent(ArrayList localArrayList) { + private void addContentTonewerArrayList(ArrayList localArrayList) { int arrayListLength = this.getArrayContent().size(); this.newerWordArrayList.clear(); diff --git a/src/game/Terminal.java b/src/game/Terminal.java index d1e9b71..8a10e55 100644 --- a/src/game/Terminal.java +++ b/src/game/Terminal.java @@ -1,33 +1,71 @@ package game; +import connexion.Channel; import display.Display; import environnements.Map; import personnages.Personnage; + +/** + * cette classe permet en tout de tout lancer dans le jeu, + * un tournoi local ou un tournoi multijoueur en ligne grâce + * au site donnée par l'université. + * + *

Pour lancer en local, vous devez juste lancer le programme + * en faisant : + * + *

 
+ * new Terminal(new Map(...), new Personnage[] {...}).run();
+ * 
+ * + * Pour lancer en Multijoueur, vous devez lancer en faisant : + * + *
 
+ * new Terminal(new Map(...), new Personnage[] {...}).run("channeluser", "channeladversaire"); 
+ * 
+ */ public class Terminal { Map map; Personnage[] personnages; - private void placePersonnages() { + private void placePersonnages(Personnage[] personnages) { for(Personnage personnage : personnages) { map.placePersonnages(personnage); } } + /** + *

Pour lancer en local, vous devez juste lancer le programme + * en faisant : + * + *

 
+     * new Terminal(new Map(...), new Personnage[] {...}).run();
+     * 
+ * + * Pour lancer en Multijoueur, vous devez lancer en faisant : + * + *
 
+     * new Terminal(new Map(...), new Personnage[] {...}).run("channeluser", "channeladversaire"); 
+     * 
+ */ public Terminal(Map map, Personnage[] personnages) { this.personnages = personnages; this.map = map; } - public void run(String channel) { + public void run(String channel, String channelAdversaire) { int i = 0; + Personnage[] personnageChannel = new Personnage[] { + personnages[0], + new Channel(map, channel, channelAdversaire) + }; while(true) { - for(Personnage personnage : personnages) { + for(Personnage personnage : personnageChannel) { Display.clearTerminal(); map.placeObjects(); - placePersonnages(); + placePersonnages(personnageChannel); Display.printInformation(i++, personnage); Display.printMap(map.addEdges()); @@ -41,4 +79,27 @@ public class Terminal { } } } + + public void run() { + int i = 0; + + while(true) { + for(Personnage personnage : personnages) { + Display.clearTerminal(); + + map.placeObjects(); + placePersonnages(personnages); + + Display.printInformation(i++, personnage); + Display.printMap(map.addEdges()); + + if(personnage.round(map, null)) { + Display.clearTerminal(); + System.out.println(personnage.getName() + " à perdu!"); + return; + } + map.clearMap(); + } + } + } } \ No newline at end of file