Skip to content

Commit

Permalink
Ligne dans Tools
Browse files Browse the repository at this point in the history
  • Loading branch information
QuentinBeauchet committed Mar 20, 2021
1 parent f1407b8 commit 91cebe7
Show file tree
Hide file tree
Showing 12 changed files with 154 additions and 83 deletions.
17 changes: 16 additions & 1 deletion src/main/java/Code en Vrac
Original file line number Diff line number Diff line change
Expand Up @@ -435,4 +435,19 @@ public boolean suppX(int x, int y) {
sb.append("\u001b[38;5;94m").append(" \\\\_ |||").append(Affichage.RESET).append(" 888888 ║ ║\n");
sb.append("\u001b[38;5;94m").append(" '-\\/ '/_(").append(Affichage.RESET).append(" `Y88P' ╚═══════════════════════════════╝\n");
return sb.toString();
}
}

public static void testAstar() {
Position posPlayer = player.getPosition();
Position posTarget = Procedure.getAccesibleRandomPosition(false, etage);
for (int i = 0; i < 2; i++) {
Etage test = etage.copyOf();
ArrayList<Position> chemin = Tools.Astar(test,posPlayer, posTarget, i);
for (Position p : chemin) {
test.get(p).updateCell(true, Cell.CellType.PATH);
}
System.out.println("Taille chemin : " + chemin.size());
test.get(posTarget).updateCell(true, Cell.CellType.SPECIAL);
System.out.println(test);
}
}
2 changes: 1 addition & 1 deletion src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1 +1 @@
import Model.Entitys.BasicPlayer;import Model.Map.Cell;import Model.Map.Etage;import Model.Map.Map;import Model.Utils.Affichage;import Model.Utils.Position;import Model.Utils.Procedure;import Model.Utils.Tools;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Random;public class Main { private static long seed; private static Map map; private static BasicPlayer player; private static Etage etage; public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); init(reader); testAstar(); affichage(); System.getProperty("os.name"); while (true) { Tour(reader.readLine()); } } public static void testAstar() { Position posPlayer = player.getPosition(); Position posTarget = Procedure.getAccesibleRandomPosition(false, etage); for (int i = 0; i < 2; i++) { Etage test = etage.copyOf(); ArrayList<Position> chemin = Tools.Astar(test,posPlayer, posTarget, i); for (Position p : chemin) { test.get(p).updateCell(true, Cell.CellType.PATH); } System.out.println("Taille chemin : " + chemin.size()); test.get(posTarget).updateCell(true, Cell.CellType.SPECIAL); System.out.println(test); } } private static void init(BufferedReader reader) throws IOException { System.out.print("Numero seed ? "); long seed_value; try{ seed_value = Long.parseLong(reader.readLine()); } catch (NumberFormatException e){ seed_value =new Random().nextLong(); } seed=seed_value; Procedure.setSeed(seed); map = new Map(); etage = map.getCurrent(); player = map.getPlayer(); } private static void Tour(String input){ switch (input) { case "z" , "\u001B[A" -> player.moveUp(); case "q" , "\u001B[D" -> player.moveLeft(); case "s" , "\u001B[B" -> player.moveDown(); case "d" , "\u001B[C" -> player.moveRight(); case "exit" -> System.exit(0); default -> System.out.println("Wrong key:"+input); } switch (etage.get(map.getPlayer().getPosition()).getType()){ case UP : map.UP(); break; case DOWN : map.DOWN(); break; case TRAP_ROOM : map.TRAP_ROOM(); break; default: break; } etage=map.getCurrent(); affichage(); } private static void affichage(){ System.out.print(Affichage.CLEAR); System.out.println(seed); System.out.println(etage); System.out.print(Affichage.RESET+"Etage n°"+(map.getIndexCurrent()+1)); System.out.println("\n\n\n\n\n\n\n\n\n\n\n"); System.out.print("Enter your key: "); }}
import Model.Entitys.BasicPlayer;import Model.Map.Cell;import Model.Map.Etage;import Model.Map.Map;import Model.Utils.Affichage;import Model.Utils.Position;import Model.Utils.Procedure;import Model.Utils.Tools;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Random;public class Main { private static long seed; private static Map map; private static BasicPlayer player; private static Etage etage; public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); init(reader); affichage(); System.getProperty("os.name"); while (true) { Tour(reader.readLine()); } } private static void init(BufferedReader reader) throws IOException { System.out.print("Numero seed ? "); long seed_value; try{ seed_value = Long.parseLong(reader.readLine()); } catch (NumberFormatException e){ seed_value =new Random().nextLong(); } seed=seed_value; Procedure.setSeed(seed); map = new Map(); etage = map.getCurrent(); player = map.getPlayer(); } private static void Tour(String input){ switch (input) { case "z" , "\u001B[A" -> player.moveUp(); case "q" , "\u001B[D" -> player.moveLeft(); case "s" , "\u001B[B" -> player.moveDown(); case "d" , "\u001B[C" -> player.moveRight(); case "exit" -> System.exit(0); default -> System.out.println("Wrong key:"+input); } switch (etage.get(map.getPlayer().getPosition()).getType()){ case UP : map.UP(); break; case DOWN : map.DOWN(); break; case TRAP_ROOM : map.TRAP_ROOM(); break; default: break; } etage=map.getCurrent(); affichage(); } private static void affichage(){ System.out.print(Affichage.CLEAR); System.out.println(seed); System.out.println(etage); System.out.print(Affichage.RESET+"Etage n°"+(map.getIndexCurrent()+1)); System.out.println("\n\n\n\n\n\n\n\n\n\n\n"); System.out.print("Enter your key: "); }}
Expand Down
34 changes: 6 additions & 28 deletions src/main/java/Model/Map/Etage.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import Model.Utils.Affichage;
import Model.Utils.Position;
import Model.Utils.Procedure;
import Model.Utils.Tools;

import java.util.*;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -44,7 +45,7 @@ public String toString() {
}

public void addRoom(Room r, Position p) {
if (!r.isCollision(this,p)) {
if (r.noCollision(this,p)) {
for (int y = 0; y < r.getHeigth(); y++) {
for (int x = 0; x < r.getWidth(); x++) {
this.set(p.getX() + x, p.getY() + y, r.get(x, y));
Expand Down Expand Up @@ -97,39 +98,16 @@ public ArrayList<Room> getRooms() {
return Rooms;
}

public void ligne(Position p1, Position p2) {
ArrayList<Position> chemin = new ArrayList<>();
chemin.add(p1);
Position lastPos = chemin.get(chemin.size() - 1);
while (lastPos.getX() != p2.getX()) {
if (lastPos.getX() > p2.getX()) {
chemin.add(new Position(lastPos.getX() - 1, lastPos.getY()));
} else if (lastPos.getX() < p2.getX()) {
chemin.add(new Position(lastPos.getX() + 1, lastPos.getY()));
}
lastPos = chemin.get(chemin.size() - 1);
}
while (lastPos.getY() != p2.getY()) {
lastPos = chemin.get(chemin.size() - 1);
if (lastPos.getY() > p2.getY()) {
chemin.add(new Position(lastPos.getX(), lastPos.getY() - 1));
} else if (lastPos.getY() < p2.getY()) {
chemin.add(new Position(lastPos.getX(), lastPos.getY() + 1));
}
}
for (Position p : chemin) {
get(p).updateCell(true, Cell.CellType.NORMAL);
}
}

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);
ligne(milieu, pos2);
//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
Expand Down
20 changes: 9 additions & 11 deletions src/main/java/Model/Map/Room.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,27 @@
import Model.Map.Strategy.RoomStrategy;

public class Room extends Etage implements Comparable<Room> {
private final int nbrMaxMobPerRoom;
private Position AbsolutePos=null;
private RoomStrategy strategy;
private final RoomStrategy strategy;

public Room(int width, int height,int nbrMaxMobPerRoom,RoomStrategy strategy){
public Room(int width, int height,RoomStrategy strategy){
super(width,height);
this.nbrMaxMobPerRoom=nbrMaxMobPerRoom;
this.strategy=strategy;
strategy.composeRoom(this);
}

public boolean isCollision(Etage etage,Position pos){
return strategy.isCollision(etage,this,pos);
public boolean noCollision(Etage etage,Position pos){
return strategy.noCollision(etage,this,pos);
}

public int getNbrMaxRoom() {
return strategy.getNbrMaxRoom();
}

public int getNbrMaxMobPerRoom() {
return strategy.getNbrMaxMobPerRoom();
}

public void setAbsolutePos(Position pos){
AbsolutePos=pos.copyOf();
}
Expand All @@ -31,12 +33,8 @@ public Position getAbsolutePos() {
return AbsolutePos.copyOf();
}

public int getNbrMaxMobPerRoom() {
return nbrMaxMobPerRoom;
}

@Override
public int compareTo(Room o) {
return (int) (this.getAbsolutePos().Distance(new Position(0,0)) - o.getAbsolutePos().Distance(new Position(0,0)));
return (int) (getAbsolutePos().Distance(new Position(0,0)) - o.getAbsolutePos().Distance(new Position(0,0)));
}
}
11 changes: 5 additions & 6 deletions src/main/java/Model/Map/RoomFactory.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package Model.Map;

import Model.Map.Room;
import Model.Map.Strategy.MarchandRoomStrategy;
import Model.Map.Strategy.NormalRoomStrategy;
import Model.Map.Strategy.TresorRoomStrategy;
Expand All @@ -12,20 +11,20 @@ public enum roomType {
}

private static Room getNewMarchandRoom(){
return new Room(5,5,0,new MarchandRoomStrategy());
return new Room(5,5,new MarchandRoomStrategy());
}

private static Room getNewNormalRoom(){
return Procedure.getRandomRoom(5,15,5,new NormalRoomStrategy());
return Procedure.getRandomRoom(5,15,new NormalRoomStrategy());
}

public Room getNewRoom(roomType r, int width , int height, int nbrMaxMob){
public Room getNewRoom(roomType r, int width , int height){
switch (r) {
case TRESOR -> {
return new Room(width,height,nbrMaxMob,new TresorRoomStrategy());
return new Room(width,height,new TresorRoomStrategy());
}
default -> {
return new Room(width,height,nbrMaxMob,new NormalRoomStrategy());
return new Room(width,height,new NormalRoomStrategy());
}
}
}
Expand Down
14 changes: 12 additions & 2 deletions src/main/java/Model/Map/Strategy/LabyRoomStrategy.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,18 @@ public void composeRoom(Room r) {
}

@Override
public boolean isCollision(Etage etage, Room room, Position pos) {
return super.isCollision(etage,room,pos,0);
public boolean noCollision(Etage etage, Room room, Position pos) {
return super.noCollision(etage,room,pos,0);
}

@Override
public int getNbrMaxMobPerRoom() {
return 5;
}

@Override
public int getNbrMaxRoom() {
return 10;
}

}
13 changes: 11 additions & 2 deletions src/main/java/Model/Map/Strategy/MarchandRoomStrategy.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,17 @@ public void composeRoom(Room r) {
}

@Override
public boolean isCollision(Etage etage, Room room, Position pos) {
return super.isCollision(etage,room,pos,0);
public boolean noCollision(Etage etage, Room room, Position pos) {
return super.noCollision(etage,room,pos,0);
}

@Override
public int getNbrMaxMobPerRoom() {
return 0;
}

@Override
public int getNbrMaxRoom() {
return 1;
}
}
9 changes: 7 additions & 2 deletions src/main/java/Model/Map/Strategy/NormalRoomStrategy.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,17 @@ public void composeRoom(Room r) {
}

@Override
public boolean isCollision(Etage etage, Room room, Position pos) {
return super.isCollision(etage, room, pos,0);
public boolean noCollision(Etage etage, Room room, Position pos) {
return super.noCollision(etage, room, pos,0);
}

@Override
public int getNbrMaxRoom() {
return 8;
}

@Override
public int getNbrMaxMobPerRoom() {
return 5;
}
}
14 changes: 6 additions & 8 deletions src/main/java/Model/Map/Strategy/RoomStrategy.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,18 @@ public void composeRoom(Room r){
r.fillMap(new Cell(true, Cell.CellType.NORMAL));
}

protected boolean isCollision(Etage etage,Room room,Position pos,int DistanceMin){
protected boolean noCollision(Etage etage,Room room,Position pos,int DistanceMin){
for (int y = 0; y < room.getHeigth()+DistanceMin*2; y++) {
for (int x = 0; x < room.getWidth()+DistanceMin*2; x++) {
if (etage.get(Math.max(Math.min(pos.getX() + x - DistanceMin, etage.getWidth()-1), 0), Math.max(Math.min(pos.getY() + y - DistanceMin, etage.getHeigth()-1),0)).getType() != Cell.CellType.VOID){
return true;
return false;
}
}
}
return false;
return true;
}

public abstract boolean isCollision(Etage etage,Room room,Position pos);

public int getNbrMaxRoom() {
return 8;
}
public abstract boolean noCollision(Etage etage,Room room,Position pos);
public abstract int getNbrMaxMobPerRoom();
public abstract int getNbrMaxRoom();
}
14 changes: 12 additions & 2 deletions src/main/java/Model/Map/Strategy/TresorRoomStrategy.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,18 @@ public void composeRoom(Room r) {
}

@Override
public boolean isCollision(Etage etage, Room room, Position pos) {
return super.isCollision(etage,room,pos,0);
public boolean noCollision(Etage etage, Room room, Position pos) {
return super.noCollision(etage,room,pos,0);
}

@Override
public int getNbrMaxMobPerRoom() {
return 0;
}

@Override
public int getNbrMaxRoom() {
return 1;
}

}
7 changes: 3 additions & 4 deletions src/main/java/Model/Utils/Procedure.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,11 @@ public static Position getAccesibleRandomPosition(boolean isEntityGeneration,Eta
* Renvoit une Room generé aleatoirement.
* @param MinSize int
* @param MaxSize int
* @param nbrMaxMobPerRoom int
* @return Room
*/
public static Room getRandomRoom(int MinSize, int MaxSize,int nbrMaxMobPerRoom, RoomStrategy strategy) {
public static Room getRandomRoom(int MinSize, int MaxSize, RoomStrategy strategy) {
Position pos = getRandomPosition(MaxSize, MaxSize, MinSize, MinSize);
return new Room(pos.getX(),pos.getY(),nbrMaxMobPerRoom,strategy);
return new Room(pos.getX(),pos.getY(),strategy);
}

/**
Expand Down Expand Up @@ -232,7 +231,7 @@ public static Room RandomRoomType(RoomFactory factory){
}
acc++;
}
return factory.getNewRoom(type, rand.nextInt((20 - 5)) + 5, rand.nextInt((20 - 5)) + 5, 5);
return factory.getNewRoom(type, rand.nextInt((20 - 5)) + 5, rand.nextInt((20 - 5)) + 5);
}


Expand Down
Loading

0 comments on commit 91cebe7

Please sign in to comment.