Je vais vous exposer ici les méthodes que j'ai utilisé pour concevoir un jeu du type starcraft ou warcraft avec le delphiX.
Dans un premier plan nous allons parler du lieu ou évolue les personnages, en clair de la carte du jeu. Supposons que notre carte (espace de jeu) se déroule sur une dizaine d'écran. Il va falloir définir dans un premier temps les ressources de la carte (j'ai choisis ici l'eau, le minerai et le gaz). la teneur de ces ressources n'est bien sur pas identiques sur toute la carte. Pour analyser nos ressources nous allons diviser la carte en parcelle.
Les parcelles : Supposons que notre carte face 6400 * 6400 pixels (ces dimensions sont illogiques, mais elle permettrons de simplifier les explications). Nous allons créer des parcelles de 64*64 pixels. Notre carte se retrouve donc découpée en un "tableau" de 100*100 parcelles. J'ai utilisé le mot tableau car nous allons effectivement pouvoir représenter notre carte sous la forme d'un tableau à 2 dimensions. Pour chaque parcelle donc pour chaque entré du tableau nous allons stocker la quantité d'eau , gaz et minerai disponible. Nous allons alors créer une structure (ou enregistrement) contenant les informations nécessaire aux parcelles), nous l'appellerons "StructTerrain".
La structure (StructTerrain) : Pour l'instant nous allons faire simple. En analysant une parcelle nous avons besoin de savoir la quantité d'eau, de gaz et de minerai disponible. Nous allons vouloir aussi savoir si cette zone (parcelle) est occupé par un objet (machine, personnage,etc...). La structure va donc ressembler à cela :
StructTerrain=record
Eau,Gaz,Minerai:integer; //ici la quantité de ressources disponible
Occupe:boolean; //la zone est-elle occupée?
Occupant:string;//Par qui ou quoi ?
end;
Notre structure est maintenant prête, pour pouvoir l'utiliser en fonction de la carte, nous allons déclarer un tableau ("Terrain") à 2 dimensions représentant les parcelles de notre carte.
Terrain:array [0..99,0..99]of StructTerrain;
Voyons le fonctionnement de ce tableau. Pour analyser une zone du terrain en fonction d'un sprite (machine, personnage,etc...) Il suffit de récupérer les coordonnées du sprite et de les diviser par 64 (taille de nos parcelles). Par exemple si un sprite se trouve à la position 184*250, on divise 184(coordonnées X) et 250 (coordonnées Y) par 64 et on ne conserve que le résultat entier de la division :
x:=sprite.x div 64;
y:=sprite.y div 64;
ce qui nous donnerai selon notre exemple : X=2 et Y=3. Il nous suffit alors de questionner notre tableau "Terrain" pour connaître les ressources disponibles sur cette parcelle :
l'eau est égale à Terrain [2,3].eau
le gaz à Terrain [2,3].gaz
et le minerai à Terrain [2,3].minerai
Voilà, nous pouvons savoir maintenant à n'importe quel moment quels sont les ressources de chaque parcelle du terrain.
Enrichissons notre exemple : dans le jeu j'avais prévu différent niveau de ressources. L'eau pouvait se trouver sur la surface terrestre et/ou dans des nappes sous terraine. Les autres ressources se trouvées à différents niveau de profondeur. Pour représenter cela il suffit de repenser la structure "StructTerrain" en ajoutant :
Eau2,Minerai2,Gaz2:integer;//les niveaux inférieur de ressources.
De même j'avais rajouté la notion de découverte (analyse) pour savoir si cette parcelle de terrain avait été analysé ou non. Pour savoir si le joueur était censé connaître les ressources disponibles ou non.
decouverte:boolean;
En définissant ainsi le décor on vois rapidement qu'elle sont les sprites nécessaire au bon fonctionnement du jeu. nous pouvons ainsi créer des bâtiment extracteur de ressources (1 pour l'eau, 1 pour le gaz, 1pour le minerai). Ces bâtiments aurons des fonctions particulières ainsi nous définirons deux type de bâtiments extracteur par ressources : ceux qui peuvent extraire à plusieurs mètres de profondeur pour accéder au ressources de niveau inférieur et ceux qui ne peuvent travailler qu'en surface ou à très faible profondeur pour les ressources de niveau 1. De même nous allons aussi construire des sondes d'analyse afin de permettre au joueur d'analyser les ressources de chaque parcelles (les informations relative au ressources ne lui seront transmise qu'après analyse).
On peut même insérer une notion de renouvellement ainsi dans le jeu le minerai une fois extrait la sources se tarisse, mais pour l'eau ou le gaz les sources se régénére (à plus ou moins longue échéance).
Astuce : Vous aurez remarqué la notion d'occupé dans la structure (StructTerrain). Ce champs passe de vrai à faux selon le cas ou un sprite se trouve sur la parcelle. Ainsi lors de la gestion des collisions il vous suffit de vérifier ce champ et si la parcelle est occupé de lancer la fonction "collision" du delphiX. En lançant cette fonction seulement à ce moment là vous gagnez en rapidité.
Ceci n'est qu'une approche à vous d'imaginer le reste et de développer le concept pour vous monter que l'on peut faire quelque chose de sympa avec le delphix voici une capture d'écran du jeu réalisé avec cette méthode et le delphix :
