Je me suis donné comme petit objectif de coder un RPG avec un système de cases. J'ai avancé un peu, mais je suis bloqué par un problème qui m'énerve un peu..
En gros, tout d'abord, ce crée une classe World qui va contenir entre autre la liste des personnages disponibles et le "plateau de jeu" (enfin la map, les dimensions, les items au sol, etc..).
Puis je crée une classe Perso qui va représenter.. bah un personnage. Donc ce personnage pour l'instant doit juste savoir se déplacer. Seul problème, le personnage ne peut pas se déplacer en fonction des obstacles présents sur le sol puisqu'il ne connait pas la valeur de son World (oui, World est instancié, pas de static, j'ai oublié de préciser).
Du coup comme c'est le World qui possède les infos de la carte et en même temps la liste des Perso, je peux créer une fonction dans la classe World qui va déplacer tel Perso dans telle direction... sauf s'il y a un obstacle devant.
Sauf qu'une classe chargée d'en gérer une autre c'est pas terrible. Je voulais savoir s'il existait un moyen (autre que de rendre World static) pour pouvoir mettre les fonction de déplacement dans la classe Perso et en même temps se déplacer "normalement" (genre pas dans les murs..).
A noter : j'y ai pensé, mais envoyer une copie de son World à un Perso lorsqu'on le crée (le Perso) ne fonctionnerait pas car si le World original est modifié la copie que possède le Perso ne le sera pas :/.
Voilà, en gros c'est ça le souci. Si quelqu'un a une solution, merci d'avance !
En fait mon code (j'avais pensé que c'était pas la peine de préciser) est un peu différent. La classe World est une classe abstraite qui va être instanciée et modifiée par des classes filles, qui vont justement servir à faire la différence entre tous les niveaux.
Ici, la classe s'appelle SpawningForest. Il y aura plein de trucs à rajouter après mais pour l'instant avec ta méthode créer une instance de SpawningFortest bugge. Voici les fichiers :
public class Main {
public static void main(String[] args) {
World world = new SpawningForest();
}
}
import java.util.List;
public abstract class World {
private List<Perso> persos;
protected final void addPerso(Perso p) {
this.persos.add(p);
}
}
public class SpawningForest extends World {
public SpawningForest() {
this.addPerso(new Perso(this));
}
public int getWidth() {
return 5;
}
public int getHeight() {
return 5;
}
public String getName() {
return "Spawning Forest";
}
}
public class Perso {
private World world;
public Perso(World world) {
this.world = world;
}
public World getWorld() {
return this.world;
}
}
Voila, c'est les 4 classes qui sont appelées.
Et le résultat est toujours :
Exception in thread "main" java.lang.NullPointerException
Plus précisément ça ne les modifie pas partout, mais simplement au même endroit
Tous les personnages référencent le même objet Map, c'est à dire qu'ils ont simplement un 'lien' pour accéder à cet objet. En Java, seul les types primitifs sont passés par copie
Le singleton consiste à avoir un objet statique, il le protège juste en assurant qu'il soit unique. L'idéal serait de le gérer comme montré plus haut (ou via des interfaces, pour limiter les actions de l'objet à ce qu'il peut faire sur la map). Si par la suite tu as besoin de plusieurs maps, ça limiterait les changements à apporter.
L'idée était justement d'éviter à avoir à passer les informations de la map à tout ce qui en avait besoin, vu qu'une seul devait etre créée à la fois. Je pensais faire une classe Map singleton et publiquement accessible, et une classe comme MapInfo ou MapFactory qui contienne plusieurs contructeurs pour chaque map, et qui initialise le singleton.
Le mieux serait de pouvoir instancier plusieurs maps (World en fait) à la fois. Ca servira pas forcément pour un programme client mais on sait jamais si ce tout petit truc évoluait et donnait un jeu multi ce serait pas mal (.. indispensable en fait ) de pouvoir instancier plusieurs Worlds à la fois.
Ou même en jeu solo, on peut instancier plusieurs maps comme des maisons dans un village, histoire de pas avoir à charger un nouveau World chaque fois qu'on va dans une zone différente (même si c'est pas très long je l'admet).
Nan nan pas de souci de toute façon c'est résolu !
Salut les zéros !
Gérer le déplacement d'un personnage
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
CTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr
CTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr
CTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr
CTO Co-fondateur @ My Talent Manager : boostez votre carrière d'artiste | https://mytalentmanager.fr