JeuWeb - Crée ton jeu par navigateur
Créer des altérations d'état flexibles - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Créer des altérations d'état flexibles (/showthread.php?tid=3015)



Créer des altérations d'état flexibles - Sephi-Chan - 05-09-2008

Bonjour tout le monde,

Sur de nombreux projets, j'utilise des altérations d'états qui affectent les personnages de diverses manières.

Quelques exemples :
  • La compétence "Levée de bouclier" augmentera la défense initiale du défenseur de X% pendant N tours.
  • La compétence "Toucher d'agonie" fera subir X points de dégâts de type Ombre à la cible à chaque tour pendant N tours.
  • La compétence "Sanguinaire" permet au lanceur de gagner P points de santé (P valant X% des dégâts infligés) lors des N prochaines attaques qu'il portera.
  • La compétence "Rétablissement" rend P points de santé à sa cible à chaque tour pendant N tours. Quand l'effet s'achève, la cible reçoit X points de santé supplémentaires.

Ma question est donc : comment codez/coderiez-vous ce genre d'effet pour que ce soit le plus flexible possible ? Aussi bien en base de données que dans le script de résolution.


Sephi-Chan


RE: Créer des altérations d'état flexibles - MdE - 05-09-2008

Personnellement, j'ai un système d'effet temporaire mais relatif au temps donc assez lourd pour du php. Mais avec un système de tour, ça doit être plus simple. Faudrait peut-être qu'on en sache plus sur ton système de tour mais en lisant ce que tu me dis, l'idée qui me vient c'est une table "Effet_temporaire" avec l'id du joueur, le nombre de tour restant, et l'effet en question. Une autre table avec la liste des effets avec tous ce qui est modifiable en colonnes et un 0 correspond à aucun effet, et 10 en PV représentera +10 PV par exemple

A chaque tour, tu décrémentes le nombre de tour restant et quand c'est à 0, tu supprimes.

Pour faire la différence entre effet pendant X tours, et effet chaque tour pendant X tours, j'aurais mis juste une petit donnée binaire dans la table Effet_temporaire.

Bon voilà, ça n'engage que moi tout ça ^^ je suis loin de coder de la manière la plus optimale Smile


RE: Créer des altérations d'état flexibles - Ter Rowan - 05-09-2008

j'aurais pas pensé à la formule, mais bien travaillée ça doit être pas mal

pour ma part :
(je me mets dans une config bdd ou tableau ne sachant si un combat est géré en une seule passe serveur ou nécessite des échanges)

1) la structure de données concernant les personnages :
SUJET : celui qui subit l'effet (qu il soit positif ou négatif)

ainsi si le personnage lance un effet :
si l'effet est sur lui, c'est l'id du personnage qui portera l'effet
si l'effet est sur un (des) autre(s) personnage(s) un effet sera porté sur chacun d'eux (une ligne par sujet)

DUREE : le nombre de tours restant avant la disparition de l'effet

FREQUENCE : tous les combien de tours se déclenche l'effet (ex : vous saignez tous les 3 tours pendant 15 tours, cela donne 5 déclenchements)

TEMPS : le nombre de tours depuis l'arrivée de l'effet (potentiellement inutile, mais plus pratique pour savoir où on en est dans le jeu fréquence / durée)

EFFET : l'id de l'effet

COMPLEMENT : une chaine de caractères, avec autant de paramètres que voulus (séparateur, blablabla)


l'intérêt de faire porté l'effet par le sujet, c'est de faire du multicible
de plus agissant ainsi, on peut prévoir qu'un "effet" lancé se traduise par plusieurs effets reçus (ex: soigne pendant 2 tours et augmente l attaque pendant 10 tours)

2) traitement de l'effet

deux solutions
soit l'id envoie vers une fonction spécifique à l effet, qui interprète le "complément"

soit l'id envoie vers une fonction générique qui fait tout

tout dépend : si tous les effets sont du même genre ou de peu de genre différents ( baisse/hausse de points de vie/caractéristiques) on peut faire du générique

si les effets sont beaucoup plus variés comme "être intouchable (bloc de glace sur wow par ex) " ou "faire perdre le focus" ou .... je pense que tu devrais te diriger vers du spécifique, le générique marcherait mais au pif, je dirais trop lourd Smile