From 0daf866b5d6bedacc5b69e30c6f657e120ad1b0f Mon Sep 17 00:00:00 2001 From: QuentinBeauchet Date: Sun, 21 Mar 2021 22:49:15 +0100 Subject: [PATCH] Etage Strategy --- src/main/java/Model/Map/Cell.java | 1 + src/main/java/Model/Map/Etage.java | 63 +++++-------------- .../Map/Etage_Strategy/EtageStrategy.java | 60 ++++++++++++++++++ .../Etage_Strategy/NormalEtageStrategy.java | 36 +++++++++++ .../Map/Etage_Strategy/TrapEtageStrategy.java | 25 ++++++++ src/main/java/Model/Map/Map.java | 11 ++-- src/main/java/Model/Map/Room.java | 2 +- src/main/java/Model/Map/RoomFactory.java | 6 +- .../LabyRoomStrategy.java | 2 +- .../MarchandRoomStrategy.java | 2 +- .../NormalRoomStrategy.java | 6 +- .../RoomStrategy.java | 2 +- .../TresorRoomStrategy.java | 2 +- src/main/java/Model/Utils/Procedure.java | 36 ++--------- 14 files changed, 157 insertions(+), 97 deletions(-) create mode 100644 src/main/java/Model/Map/Etage_Strategy/EtageStrategy.java create mode 100644 src/main/java/Model/Map/Etage_Strategy/NormalEtageStrategy.java create mode 100644 src/main/java/Model/Map/Etage_Strategy/TrapEtageStrategy.java rename src/main/java/Model/Map/{Strategy => Room_Strategy}/LabyRoomStrategy.java (93%) rename src/main/java/Model/Map/{Strategy => Room_Strategy}/MarchandRoomStrategy.java (96%) rename src/main/java/Model/Map/{Strategy => Room_Strategy}/NormalRoomStrategy.java (85%) rename src/main/java/Model/Map/{Strategy => Room_Strategy}/RoomStrategy.java (96%) rename src/main/java/Model/Map/{Strategy => Room_Strategy}/TresorRoomStrategy.java (95%) diff --git a/src/main/java/Model/Map/Cell.java b/src/main/java/Model/Map/Cell.java index 6f5e9e9..75a1e28 100644 --- a/src/main/java/Model/Map/Cell.java +++ b/src/main/java/Model/Map/Cell.java @@ -2,6 +2,7 @@ import Model.Utils.Affichage; import Model.Entitys.Entity; +import Model.Utils.Procedure; public class Cell{ public enum CellType { diff --git a/src/main/java/Model/Map/Etage.java b/src/main/java/Model/Map/Etage.java index 503ce81..b4a6a88 100644 --- a/src/main/java/Model/Map/Etage.java +++ b/src/main/java/Model/Map/Etage.java @@ -3,6 +3,7 @@ import Exceptions.CollisionRoom; import Model.Entitys.Entity; +import Model.Map.Etage_Strategy.EtageStrategy; import Model.Utils.Affichage; import Model.Utils.Position; import Model.Utils.Procedure; @@ -17,13 +18,20 @@ public class Etage { public ArrayList> Cells; protected ArrayList Rooms = new ArrayList<>(); protected ArrayList Entitys = new ArrayList<>(); + private EtageStrategy strategy; - public Etage(int Width, int Heigth) { + protected Etage(int Width, int Heigth) { this.Width = Width; this.Heigth = Heigth; fillMap(new Cell(false,Cell.CellType.VOID)); } + public Etage(int Width, int Heigth, EtageStrategy strategy) { + this(Width,Heigth); + this.strategy=strategy; + strategy.composeEtage(this); + } + public void setCells(ArrayList> cells) { Cells = cells; } @@ -75,7 +83,7 @@ public void set(int x, int y, Cell c) { } public Etage copyOf(){ - Etage etage = new Etage(getWidth(), getHeigth()); + Etage etage = new Etage(getWidth(), getHeigth(),getStrategy()); for (int y = 0; y < etage.getHeigth(); y++) { for (int x = 0; x < etage.getWidth(); x++) { etage.Cells.get(y).set(x,get(x,y).copyOf()); @@ -94,55 +102,12 @@ public int getHeigth() { return Heigth; } - public ArrayList getRooms() { - return Rooms; + public EtageStrategy getStrategy(){ + return strategy; } - public void RoomFusion(){ - //Trace du chemin - for (int i = 0; i < getRooms().size()-1; i++) { - Position pos1= Procedure.getRandomPosition(getRooms().get(i)); - Position pos2=Procedure.getRandomPosition(getRooms().get(i+1)); - Position milieu = new Position((pos1.getX() + pos2.getX()) / 2, (pos1.getY() + pos2.getY()) / 2); - //ligne(pos1, milieu, Cell.CellType.NORMAL); - //ligne(milieu, pos2, Cell.CellType.NORMAL); - Tools.ligne(this, pos1, pos2, Cell.CellType.NORMAL,Procedure.getRandomInt(6,0)); - System.out.println(this); - } - - //Ajout des murs aux chemins - for (int y = 0; y < getHeigth(); y++) { - for (int x = 0; x < getWidth(); x++) { - Position pos=new Position(x, y); - if (get(pos).getType().equals(Cell.CellType.VOID)) { - ArrayList voisins = pos.voisins(this); - for (Position p : voisins) { - if (get(p).getType().equals(Cell.CellType.NORMAL)) { - get(x,y).updateCell(false, Cell.CellType.BORDER); - } - } - } - } - } - //Suppression des murs inutiles - for (int y = 0; y < getHeigth(); y++) { - for (int x = 0; x < getWidth(); x++) { - Position pos=new Position(x, y); - ArrayList voisins = pos.voisins(this); - if(voisins.size()>6){ - boolean isUseless=true; - for(Position p : voisins){ - if(get(p).getType().equals(Cell.CellType.VOID)){ - isUseless=false; - break; - } - } - if(isUseless){ - get(pos).updateCell(true, Cell.CellType.NORMAL); - } - } - } - } + public ArrayList getRooms() { + return Rooms; } } \ No newline at end of file diff --git a/src/main/java/Model/Map/Etage_Strategy/EtageStrategy.java b/src/main/java/Model/Map/Etage_Strategy/EtageStrategy.java new file mode 100644 index 0000000..fee0b7e --- /dev/null +++ b/src/main/java/Model/Map/Etage_Strategy/EtageStrategy.java @@ -0,0 +1,60 @@ +package Model.Map.Etage_Strategy; + +import Model.Map.Cell; +import Model.Map.Etage; +import Model.Utils.Position; +import Model.Utils.Procedure; +import Model.Utils.Tools; + +import java.util.ArrayList; + +public abstract class EtageStrategy { + + public abstract void composeEtage(Etage etage); + + protected void RoomFusion(Etage etage){ + //Trace du chemin + for (int i = 0; i < etage.getRooms().size()-1; i++) { + Position pos1= Procedure.getRandomPosition(etage.getRooms().get(i)); + Position pos2= Procedure.getRandomPosition(etage.getRooms().get(i+1)); + Tools.ligne(etage, pos1, pos2, Cell.CellType.NORMAL,Procedure.getRandomInt(6,0)); + } + + //Ajout des murs aux chemins + for (int y = 0; y < etage.getHeigth(); y++) { + for (int x = 0; x < etage.getWidth(); x++) { + Position pos=new Position(x, y); + if (etage.get(pos).getType().equals(Cell.CellType.VOID)) { + ArrayList voisins = pos.voisins(etage); + for (Position p : voisins) { + if (etage.get(p).getType().equals(Cell.CellType.NORMAL)) { + etage.get(x,y).updateCell(false, Cell.CellType.BORDER); + } + } + } + } + } + //Suppression des murs inutiles + for (int y = 0; y < etage.getHeigth(); y++) { + for (int x = 0; x < etage.getWidth(); x++) { + Position pos=new Position(x, y); + ArrayList voisins = pos.voisins(etage); + if(voisins.size()>6){ + boolean isUseless=true; + for(Position p : voisins){ + if(etage.get(p).getType().equals(Cell.CellType.VOID)){ + isUseless=false; + break; + } + } + if(isUseless){ + etage.get(pos).updateCell(true, Cell.CellType.NORMAL); + } + } + } + } + } + + public abstract int getNbrMaxRoom(); + +} diff --git a/src/main/java/Model/Map/Etage_Strategy/NormalEtageStrategy.java b/src/main/java/Model/Map/Etage_Strategy/NormalEtageStrategy.java new file mode 100644 index 0000000..5a52605 --- /dev/null +++ b/src/main/java/Model/Map/Etage_Strategy/NormalEtageStrategy.java @@ -0,0 +1,36 @@ +package Model.Map.Etage_Strategy; + +import Model.Map.Cell; +import Model.Map.Etage; +import Model.Map.RoomFactory; +import Model.Utils.Position; +import Model.Utils.Procedure; +import Model.Utils.Tools; + +import java.util.ArrayList; + +public class NormalEtageStrategy extends EtageStrategy{ + + + @Override + public void composeEtage(Etage etage) { + Procedure.setRandomRooms(etage, this, RoomFactory.roomType.NORMAL); + RoomFusion(etage); + Procedure.setRandomChest(etage,3); + Procedure.setRandomUPnDOWN(etage); + Position accesibleRandomPosition = Procedure.getAccesibleRandomPosition(false, etage); + etage.get(accesibleRandomPosition).updateCell(true, Cell.CellType.TRAP_ROOM); + Procedure.setRandomMob(etage); + } + + @Override + public void RoomFusion(Etage etage) { + super.RoomFusion(etage); + } + + @Override + public int getNbrMaxRoom() { + return 8; + } + +} diff --git a/src/main/java/Model/Map/Etage_Strategy/TrapEtageStrategy.java b/src/main/java/Model/Map/Etage_Strategy/TrapEtageStrategy.java new file mode 100644 index 0000000..103e073 --- /dev/null +++ b/src/main/java/Model/Map/Etage_Strategy/TrapEtageStrategy.java @@ -0,0 +1,25 @@ +package Model.Map.Etage_Strategy; + +import Model.Map.Etage; +import Model.Map.RoomFactory; +import Model.Utils.Procedure; + +public class TrapEtageStrategy extends EtageStrategy{ + @Override + public void composeEtage(Etage etage) { + Procedure.setRandomRooms(etage,this, RoomFactory.roomType.TRAP); + RoomFusion(etage); + Procedure.setRandomUP(etage); + Procedure.setRandomMob(etage); + } + + @Override + public void RoomFusion(Etage etage) { + super.RoomFusion(etage); + } + + @Override + public int getNbrMaxRoom() { + return 3; + } +} diff --git a/src/main/java/Model/Map/Map.java b/src/main/java/Model/Map/Map.java index 811e568..1b3396a 100644 --- a/src/main/java/Model/Map/Map.java +++ b/src/main/java/Model/Map/Map.java @@ -1,6 +1,8 @@ package Model.Map; import Model.Entitys.BasicPlayer; +import Model.Map.Etage_Strategy.NormalEtageStrategy; +import Model.Map.Etage_Strategy.TrapEtageStrategy; import Model.Utils.Position; import Model.Utils.Procedure; @@ -14,8 +16,7 @@ public class Map { private final BasicPlayer player; public Map(){ - Etage etage=new Etage(MapWidth,MapHeigth); - Procedure.BasicEtage(etage); + Etage etage=new Etage(MapWidth,MapHeigth, new NormalEtageStrategy()); etages.add(etage); Position pos = Procedure.getAccesibleRandomPosition(true,etage); player=new BasicPlayer(etage,pos); @@ -38,8 +39,7 @@ public void DOWN(){ Etage etage; int currentIndex = getIndexCurrent(); if(currentIndex == etages.size()-1){ - etage=new Etage(MapWidth,MapHeigth); - Procedure.BasicEtage(etage); + etage=new Etage(MapWidth,MapHeigth, new NormalEtageStrategy()); //etage.addRoom(Procedure.RandomRoomType(new RoomFactory()),new Position(etage.getWidth()/2,etage.getHeigth()/2)); etages.add(etage); } @@ -68,8 +68,7 @@ public void UP(){ } public void TRAP_ROOM(){ - Etage etage = new Etage(MapWidth,MapHeigth); - Procedure.TrapEtage(etage); + Etage etage = new Etage(MapWidth,MapHeigth, new TrapEtageStrategy()); Position pos = Procedure.getAccesibleRandomPosition(true,etage); getPlayer().update(etage,pos); inTemporaryEtage=true; diff --git a/src/main/java/Model/Map/Room.java b/src/main/java/Model/Map/Room.java index 8a5c6a9..47540c2 100644 --- a/src/main/java/Model/Map/Room.java +++ b/src/main/java/Model/Map/Room.java @@ -1,7 +1,7 @@ package Model.Map; import Model.Utils.Position; -import Model.Map.Strategy.RoomStrategy; +import Model.Map.Room_Strategy.RoomStrategy; public class Room extends Etage implements Comparable { private Position AbsolutePos=null; diff --git a/src/main/java/Model/Map/RoomFactory.java b/src/main/java/Model/Map/RoomFactory.java index 537c294..c8ae01c 100644 --- a/src/main/java/Model/Map/RoomFactory.java +++ b/src/main/java/Model/Map/RoomFactory.java @@ -1,8 +1,8 @@ package Model.Map; -import Model.Map.Strategy.MarchandRoomStrategy; -import Model.Map.Strategy.NormalRoomStrategy; -import Model.Map.Strategy.TresorRoomStrategy; +import Model.Map.Room_Strategy.MarchandRoomStrategy; +import Model.Map.Room_Strategy.NormalRoomStrategy; +import Model.Map.Room_Strategy.TresorRoomStrategy; import Model.Utils.Procedure; public class RoomFactory { diff --git a/src/main/java/Model/Map/Strategy/LabyRoomStrategy.java b/src/main/java/Model/Map/Room_Strategy/LabyRoomStrategy.java similarity index 93% rename from src/main/java/Model/Map/Strategy/LabyRoomStrategy.java rename to src/main/java/Model/Map/Room_Strategy/LabyRoomStrategy.java index 3a7d804..ee191fd 100644 --- a/src/main/java/Model/Map/Strategy/LabyRoomStrategy.java +++ b/src/main/java/Model/Map/Room_Strategy/LabyRoomStrategy.java @@ -1,4 +1,4 @@ -package Model.Map.Strategy; +package Model.Map.Room_Strategy; import Model.Map.Etage; import Model.Map.Room; diff --git a/src/main/java/Model/Map/Strategy/MarchandRoomStrategy.java b/src/main/java/Model/Map/Room_Strategy/MarchandRoomStrategy.java similarity index 96% rename from src/main/java/Model/Map/Strategy/MarchandRoomStrategy.java rename to src/main/java/Model/Map/Room_Strategy/MarchandRoomStrategy.java index e8a72df..9a06004 100644 --- a/src/main/java/Model/Map/Strategy/MarchandRoomStrategy.java +++ b/src/main/java/Model/Map/Room_Strategy/MarchandRoomStrategy.java @@ -1,4 +1,4 @@ -package Model.Map.Strategy; +package Model.Map.Room_Strategy; import Model.Map.Cell; import Model.Map.Etage; diff --git a/src/main/java/Model/Map/Strategy/NormalRoomStrategy.java b/src/main/java/Model/Map/Room_Strategy/NormalRoomStrategy.java similarity index 85% rename from src/main/java/Model/Map/Strategy/NormalRoomStrategy.java rename to src/main/java/Model/Map/Room_Strategy/NormalRoomStrategy.java index cc20f04..af8c999 100644 --- a/src/main/java/Model/Map/Strategy/NormalRoomStrategy.java +++ b/src/main/java/Model/Map/Room_Strategy/NormalRoomStrategy.java @@ -1,4 +1,4 @@ -package Model.Map.Strategy; +package Model.Map.Room_Strategy; import Model.Map.Etage; @@ -18,12 +18,12 @@ public void composeRoom(Room r) { @Override public boolean noCollision(Etage etage, Room room, Position pos) { - return super.noCollision(etage, room, pos,0); + return super.noCollision(etage, room, pos,7); } @Override public int getNbrMaxRoom() { - return 8; + return 4; } @Override diff --git a/src/main/java/Model/Map/Strategy/RoomStrategy.java b/src/main/java/Model/Map/Room_Strategy/RoomStrategy.java similarity index 96% rename from src/main/java/Model/Map/Strategy/RoomStrategy.java rename to src/main/java/Model/Map/Room_Strategy/RoomStrategy.java index 1cd5551..d262c41 100644 --- a/src/main/java/Model/Map/Strategy/RoomStrategy.java +++ b/src/main/java/Model/Map/Room_Strategy/RoomStrategy.java @@ -1,4 +1,4 @@ -package Model.Map.Strategy; +package Model.Map.Room_Strategy; import Model.Map.Cell; import Model.Map.Etage; diff --git a/src/main/java/Model/Map/Strategy/TresorRoomStrategy.java b/src/main/java/Model/Map/Room_Strategy/TresorRoomStrategy.java similarity index 95% rename from src/main/java/Model/Map/Strategy/TresorRoomStrategy.java rename to src/main/java/Model/Map/Room_Strategy/TresorRoomStrategy.java index e55d155..5a598af 100644 --- a/src/main/java/Model/Map/Strategy/TresorRoomStrategy.java +++ b/src/main/java/Model/Map/Room_Strategy/TresorRoomStrategy.java @@ -1,4 +1,4 @@ -package Model.Map.Strategy; +package Model.Map.Room_Strategy; import Model.Map.Cell; import Model.Map.Etage; diff --git a/src/main/java/Model/Utils/Procedure.java b/src/main/java/Model/Utils/Procedure.java index c80e850..b85d754 100644 --- a/src/main/java/Model/Utils/Procedure.java +++ b/src/main/java/Model/Utils/Procedure.java @@ -5,10 +5,10 @@ import Model.Entitys.BasicPlayer; import Model.Entitys.Entity; import Model.Map.Etage; +import Model.Map.Etage_Strategy.EtageStrategy; import Model.Map.Room; import Model.Map.RoomFactory; -import Model.Map.Strategy.NormalRoomStrategy; -import Model.Map.Strategy.RoomStrategy; +import Model.Map.Room_Strategy.RoomStrategy; import java.util.Collections; import java.util.Random; @@ -103,11 +103,11 @@ public static Room getRandomRoom(int MinSize, int MaxSize, RoomStrategy strategy * @param etage Etage * @param type RoomFactory.roomType */ - public static void setRandomRooms(Etage etage,RoomFactory.roomType type) { + public static void setRandomRooms(Etage etage, EtageStrategy etageStrategy, RoomFactory.roomType type) { int nbrRooms = 0; long t1 = System.currentTimeMillis(); Room r = RoomFactory.getNewRoom(type); - while (nbrRooms < r.getNbrMaxRoom() && (System.currentTimeMillis()-t1<500)) { + while (nbrRooms < etageStrategy.getNbrMaxRoom() && (System.currentTimeMillis()-t1<500)) { Position pos = getRandomPosition(etage.getWidth()-1 - r.getWidth(), etage.getHeigth()-1 - r.getHeigth(),1,1).somme(1,1); try { etage.addRoom(r, pos); @@ -179,7 +179,7 @@ public static void setRandomUPnDOWN(Etage etage) { * Escalier vers l'etage du dessus. * @param etage Etage */ - private static void setRandomUP(Etage etage){ + public static void setRandomUP(Etage etage){ Position p1 = getAccesibleRandomPosition(false, etage); etage.get(p1).updateCell(true, Cell.CellType.UP); } @@ -193,32 +193,6 @@ private static void setRandomDOWN(Etage etage){ etage.get(p2).updateCell(true, Cell.CellType.DOWN); } - /** - * Genere un Etage de base. - * @param etage Etage - */ - public static void BasicEtage(Etage etage){ - Procedure.setRandomRooms(etage, RoomFactory.roomType.NORMAL); - etage.RoomFusion(); - Procedure.setRandomChest(etage,3); - Procedure.setRandomUPnDOWN(etage); - Position accesibleRandomPosition = getAccesibleRandomPosition(false, etage); - etage.get(accesibleRandomPosition).updateCell(true, Cell.CellType.TRAP_ROOM); - Procedure.setRandomMob(etage); - } - - /** - * Genere un Etage piege. - * @param etage Etage - */ - public static void TrapEtage(Etage etage){ - Procedure.setRandomRooms(etage, RoomFactory.roomType.TRAP); - etage.RoomFusion(); - Procedure.setRandomUP(etage); - Procedure.setRandomMob(etage); - } - - public static Room RandomRoomType(RoomFactory factory){ RoomFactory.roomType type=null; RoomFactory.roomType[] values = RoomFactory.roomType.values();