Salutations,
Je suis confronté à un petit problème avec une situation qui me semble taillée pour de l'héritage multiple, sauf qu'évidemment la chose n'est pas permise en C#. Aussi je me demandais si quelqu'un aurait une idée pour contourner la chose aussi proprement que possible. Détail du problème :
Je travaille actuellement sur un moteur de jeu de scrolling 3d isometrique permettant d'afficher des mondes comparables à ce qu'on peut voir sur Roller Coaster Tycoon : un terrain composé de différentes Tiles donc.
A l'heure actuelle, le moteur graphique est bien avancé et je commence à me poser des questions concernant le code réseau : je souhaite développer un jeu pouvant se jouer à plusieurs selon une architecture client serveur classique.
Histoire de faire les choses proprement, l'idéal serait que le programme serveur n'ait pas à se soucier des composantes graphiques du jeu, et même qu'il ignore jusqu'à l'existence de XNA.
Pour ce faire, je souhaite donc partage ma classe Tile initiale en deux classes : Tile (nouvelle) utilisée à la fois par le client et le serveur, qui contient les informations logiques de la tile en question : sa hauteur, son type, les trucs relatifs aux collisions etc... et TileSprite, qui contient tout ce qui est relatif à l'affichage (apparence de la tile (Sprite), offsets pour l'affichage, etc etc...) qui sera donc utilisé par le client.
Tile est une classe abstraite de laquelle héritent mes tiles concrètes : tile de sol classique, de pente, de coin etc etc..., chaque fille spécifiant les comportement propres (pour les collisions par exemple), mais reprenant des attributs et méthodes de la mère (hauteur de la tile par exemple, accesseurs).
Idem, TileSprite est une classe abstraite de laquelle héritent mes TileSPrite concrètent, qui spécifient le comportement des fonctions de détection d'hovering de la souris, les offsets d'affichage, les positions pour les décros etc...)
Or, idéalement, la TileSprite fille correspondant à une Tile de coin par exemple, devrait hériter à la fois de la Tile de coin (pour sa logique) et de TileSprite (pour l'affichage).
Sauf que bien sûr ca n'est pas possible... Et la je vois pas trop comment faire proprement.
La solution que j'utilise pour l'instant, c'est que mes TileSprites concrètes héritent seulement de TileSprite et possèdent un attribut de Tile (concrète), mais... je trouve ca plutôt moche...
Résumé si vous êtes perdus :
Tile (abstraite, logique d'une tile), de laquelle hérite une Tile concrète TileCoin (par exemple)
TileSprite (abstraite, affichage d'une tile), de laquelle hérite TileCoinSprite (par exemple)
Sauf que TileCoinSprite devrait aussi hériter de TileCoin (si jamais je veux utiliser des mécanismes de prédiction coté client par ex : il faut aussi que j'ai accès à la logique coté client)
Voila, si quelqu'un a une idée :s
Merci d'avance.
Et pour ceux que ca intéresse : [ame="http://www.youtube.com/watch?v=qitkgiP13gw"]YouTube- Isometric1[/ame] (le moteur en question, en l'état actuel)
Partager