Skip to content

Commit

Permalink
SNAKE terminé
Browse files Browse the repository at this point in the history
  • Loading branch information
QuentinBeauchet committed Apr 17, 2021
1 parent de82a54 commit a772b71
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 50 deletions.
2 changes: 1 addition & 1 deletion src/main/java/Model/Entitys/Monsters/MonsterFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public static AbstractMonster getNewMonster(Etage etage, MonsterType m){
return new BigMonster(etage,Procedure.getAccesibleRandomPosition(true,etage),"BigMonster",10,18,15,20,900,Tools.PATH_CROSS,getBaseLvl()+5);
}
case SNAKE -> {
return new Snake(etage,Procedure.getAccesibleRandomPosition(true,etage),"Snake",10,18,15,20,900,Tools.PATH_CROSS,getBaseLvl()+5,10);
return new Snake(etage,Procedure.getAccesibleRandomPosition(true,etage),"Snake",10,1,15,20,900,Tools.PATH_NOMOBS,getBaseLvl()+5,10);
}
case INVOQUEUR -> {
return new Invoqueur(etage,Procedure.getAccesibleRandomPosition(true,etage),"INVOQUEUR",10,18,15,20,1000,Tools.PATH_CROSS,getBaseLvl()+5);
Expand Down
71 changes: 54 additions & 17 deletions src/main/java/Model/Entitys/Monsters/Snake.java
Original file line number Diff line number Diff line change
@@ -1,37 +1,74 @@
package Model.Entitys.Monsters;

import Model.Map.Etage;
import Model.Utils.Affichage;
import Model.Utils.Position;
import Model.Utils.*;

import java.util.ArrayList;


public class Snake extends AbstractMonster{
private ArrayList<Tail> snakeTail = new ArrayList<>();
private static class Tail extends AbstractMonster{
protected Tail(Etage m, Position pos, String nom, int pv, int path_type, int lvl) {
super(m, pos, nom, pv, 0,0,0,60000, path_type, lvl);
}

@Override
public void updateMonster() {}

@Override
public String toString() {
return Affichage.BRIGTH_BLUE+Affichage.BOLD+"O";
}

@Override
public void move(Position pos) {
if(getEtage().get(pos).getEntity()==null){
super.move(pos);
}
}
}

private final ArrayList<Tail> snakeTail = new ArrayList<>();
private final int size_of_tail;
protected Snake(Etage m, Position pos, String nom, int pv, int force, double vision_radius, int agro, int update_rate_ms, int path_type, int lvl, int size_of_tail) {
super(m, pos, nom, pv, force, vision_radius, agro, update_rate_ms, path_type, lvl);
int posX = pos.getX();
int posY = pos.getY();
for (int i = 0; i <size_of_tail ; i++) {
if (m.get(posX-1,posY).isAccesible() && m.get(posX-1,posY).getEntity() == null )posX-=1;
else if (m.get(posX,posY-1).isAccesible() && m.get(posX,posY-1).getEntity() == null )posY-=1;
else if (m.get(posX,posY+1).isAccesible() && m.get(posX,posY+1).getEntity() == null )posY+=1;
else posX+=1;
snakeTail.add(new Tail(m, new Position(posX,posY), "Tail", pv, force, vision_radius, agro, update_rate_ms, path_type, lvl));
this.size_of_tail=size_of_tail;
setTail(m,pos,pv,path_type);
}

private void setTail(Etage m, Position pos,int pv, int path_type){
Position random_pos = Procedure.getAccesibleRandomPosition(true, m);
while (pos.Distance(random_pos)<size_of_tail+1){
random_pos = Procedure.getAccesibleRandomPosition(true, m);
}
ArrayList<Position> astar = Tools.Astar(m, pos, random_pos, path_type);
for (int i = 0; i < size_of_tail; i++) {
Tail tail = new Tail(m, astar.get(astar.size() - (2 + i)), "Tail", pv, path_type, lvl);
snakeTail.add(tail);
m.addMonster(tail);
}
}

@Override
public void move(Position pos) {
Position oldPos = this.getPosition().copyOf();
super.move(pos);
moveTail(oldPos);

Position old_pos = getPosition();
super.move(pos);
for (Tail t : snakeTail){
Position acc = t.getPosition();
t.move(old_pos);
old_pos = acc;
}
}

private void moveTail(Position p ){

@Override
public boolean updatePV(int pv) {
boolean Alive = super.updatePV(pv);
if(!Alive){
for(Tail t : snakeTail){
t.updatePV(-Integer.MAX_VALUE);
}
}
return Alive;
}

@Override
Expand Down
30 changes: 0 additions & 30 deletions src/main/java/Model/Entitys/Monsters/Tail.java

This file was deleted.

1 change: 1 addition & 0 deletions src/main/java/Model/Map/Map.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package Model.Map;

import Model.Entitys.Monsters.MonsterFactory;
import Model.Map.Etage_Strategy.EtageStrategy;
import Model.Map.Etage_Strategy.TrapEtageStrategy;
import Model.Utils.Start;
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/Model/Utils/Start.java
Original file line number Diff line number Diff line change
@@ -1 +1 @@
package Model.Utils;import Model.Entitys.BasicPlayer;import Model.Map.Map;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Random;public class Start { private static Map map; private static BasicPlayer player; public static void startGame() throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); TourManager tm = getInfo(reader); while (true) { tm.playTour(); } } private static TourManager getInfo(BufferedReader reader) throws IOException { Affichage.start(); switch (reader.readLine()) { case "1" -> { return init(reader); } case "2" -> //TODO sauvegarde System.exit(1); case "3" -> System.exit(0); } return getInfo(reader); } private static TourManager init(BufferedReader reader) throws IOException { System.out.print(Affichage.BLUE+"JOUEUR: "+Affichage.RESET); String nom = reader.readLine(); player=new BasicPlayer(20,nom.length()==0 ? "Tu" : nom,100,1); System.out.print(Affichage.BRIGTH_PURPLE+"Numero seed: "+Affichage.RESET); long seed_value; try{ seed_value = Long.parseLong(reader.readLine()); } catch (NumberFormatException e){ seed_value =new Random().nextLong(); } Procedure.setSeed(seed_value); map = new Map(); return new TourManager(reader, player, map, map.getCurrent()); } public static BasicPlayer getPlayer(){ return player; } public static Map getMap() { return map; }}
package Model.Utils;import Model.Entitys.BasicPlayer;import Model.Entitys.Monsters.AbstractMonster;import Model.Entitys.Monsters.MonsterFactory;import Model.Map.Map;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Random;public class Start { private static Map map; private static BasicPlayer player; public static void startGame() throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); TourManager tm = getInfo(reader); getPlayer().getEtage().addMonster(MonsterFactory.getNewMonster(getPlayer().getEtage(), MonsterFactory.MonsterType.SNAKE)); while (true) { tm.playTour(); } } private static TourManager getInfo(BufferedReader reader) throws IOException { Affichage.start(); switch (reader.readLine()) { case "1" -> { return init(reader); } case "2" -> //TODO sauvegarde System.exit(1); case "3" -> System.exit(0); } return getInfo(reader); } private static TourManager init(BufferedReader reader) throws IOException { System.out.print(Affichage.BLUE+"JOUEUR: "+Affichage.RESET); String nom = reader.readLine(); player=new BasicPlayer(20,nom.length()==0 ? "Tu" : nom,100,30); System.out.print(Affichage.BRIGTH_PURPLE+"Numero seed: "+Affichage.RESET); long seed_value; try{ seed_value = Long.parseLong(reader.readLine()); } catch (NumberFormatException e){ seed_value =new Random().nextLong(); } Procedure.setSeed(seed_value); map = new Map(); return new TourManager(reader, player, map, map.getCurrent()); } public static BasicPlayer getPlayer(){ return player; } public static Map getMap() { return map; }}
Expand Down
15 changes: 14 additions & 1 deletion src/main/java/Model/Utils/Tools.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package Model.Utils;

import Model.Entitys.Monsters.AbstractMonster;
import Model.Map.Cell;
import Model.Map.Etage;

Expand All @@ -12,6 +13,7 @@ public class Tools {
public static final int PATH_CROSS = 0;
public static final int PATH_DIAG = 1;
public static final int PATH_GHOST = 2;
public static final int PATH_NOMOBS = 3;

/**
* Algoritme A* qui permet de trouver le plus court chemin entre la Position de depart et celle d'arrivé.
Expand Down Expand Up @@ -87,6 +89,16 @@ private ArrayList<Noeud> getNoClipStandardNeighboors(){
// Filtrage pour obtenir un voisin valide (dans la map, accessible...)
return voisins.stream().filter(p -> ((p.getX() >= 0 && p.getY() >= 0 && p.getX() < etage.getWidth() && p.getY() < etage.getHeigth()))).collect(Collectors.toCollection(ArrayList::new));
}

private ArrayList<Noeud> getStandardNoMobsNeighboors(){
ArrayList<Noeud> voisins = new ArrayList<>();
voisins.add(new Noeud(getX() - 1,getY()));
voisins.add(new Noeud(getX() + 1,getY()));
voisins.add(new Noeud(getX(),getY() - 1));
voisins.add(new Noeud(getX(),getY() + 1));
// Filtrage pour obtenir un voisin valide (dans la map, accessible...)
return voisins.stream().filter(p -> ((p.getX() >= 0 && p.getY() >= 0 && p.getX() < etage.getWidth() && p.getY() < etage.getHeigth()) && !(etage.get(p.getX(),p.getY()).getEntity() instanceof AbstractMonster) && etage.get(p.getX(),p.getY()).isAccesible())).collect(Collectors.toCollection(ArrayList::new));
}
}

ArrayList<Noeud> closedList = new ArrayList<>();
Expand All @@ -113,7 +125,8 @@ private ArrayList<Noeud> getNoClipStandardNeighboors(){
ArrayList<Noeud> voisins = switch (pathType) {
case 0 -> u.getStandardNeighboors();
case 1 -> u.getDiagonalNeighboors();
default -> u.getNoClipStandardNeighboors();
case 2 -> u.getNoClipStandardNeighboors();
default -> u.getStandardNoMobsNeighboors();
};

//Parcous voisins
Expand Down
1 change: 1 addition & 0 deletions src/main/java/Model/Utils/TourManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import Model.Entitys.Monsters.AbstractMonster;
import Model.Entitys.BasicPlayer;
import Model.Entitys.Monsters.MonsterFactory;
import Model.Map.Etage;
import Model.Map.Map;

Expand Down

0 comments on commit a772b71

Please sign in to comment.