JeuWeb - Crée ton jeu par navigateur
Reflexions sur un système d'achievements - 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 : Reflexions sur un système d'achievements (/showthread.php?tid=6133)

Pages : 1 2 3 4


Reflexions sur un système d'achievements - Maks - 18-05-2012

J'aimerais proposer pour mon jeu un système d'achievements (aka succès ou trophés) mais je me trouve devant un problème technique. En effet, il y a deux problèmes :

- Décrire un succès : mettre dans la base de donnée "tuer votre premier monstre et moquez-vous de lui" ne suffit pas pour exploiter un succès une fois le champ de la table récupéré. Niveau programmation ça se présenterait bêtement :



if (monstre.isDead() && perso.isLaughin()) {

achievements[id].unlock();

}


Une idée pourrait être de stocker les actions souhaitées pour valider un succès


{
"1" : "attack()",
"2" : "isDead()",
"3" : "laugh()"
}

- Ce qui nous amène au deuxième problème, comment savoir quand un succès doit être déclenché ?
Bien sûr on pourrait faire à l'aide de plein de if. Cependant ça encombrerait le code, et obligerait à le modifier à chaque nouveau succès.

L'idéal serait une sorte de surcouche "capturant" chaque action du joueur, et regarderait si elle suivrait le schéma (en JSON par exemple) pour débloquer un achievement.

Si quelqu'un s'est déjà confronté au problème ou a des idées pour le résoudre, je suis preneur Smile


RE: Reflexions sur un système d'achievements - SorenS - 18-05-2012

Regarde du côté de Anthor et de Webgame Achievements


RE: Reflexions sur un système d'achievements - Maks - 18-05-2012

J'avais déjà jeté un oeil oui, mais pas de lien vers l'API...


RE: Reflexions sur un système d'achievements - SorenS - 18-05-2012

http://www.webgame-achievements.com/fr/demonstration


RE: Reflexions sur un système d'achievements - niahoo - 18-05-2012

ça résout pas le problème, il faut toujours détecter les succès qu fur et à mesure que le joueur les fait.



RE: Reflexions sur un système d'achievements - Sephi-Chan - 18-05-2012

Dans ce cas il faut tout logger, et un système analyse le log en background. Ça permet d'avoir un code plus simple puisque les conditions ne sont pas évaluées dedans. Ça permet aussi d'actualiser les achievements a posteriori.


RE: Reflexions sur un système d'achievements - niahoo - 18-05-2012

C'est pas con mais ça en permet pas d'afficher l'unlock sur le moment, ce qui est toujours sympa ! Après c'est la meilleure solution pour alléger le code.

Sinon tu peux faire des fonctions de verif pour chaque (groupe de) succès et les charger au démarrage uniquement si le joueur ne les a pas encore débloqués.


RE: Reflexions sur un système d'achievements - t.bodeux - 18-05-2012

En fait théoriquement ce n'est pas compliqué à condition d'avoir un serveur de push a disposition.
1. Tu définis une fonction qui incrémente ton succès.
def increment_achievement id_achievement
achievement = Achievement.find(id_achievement)
achievement.progress_value.increment
push_successfull_achievement(achievement.name, achievement.description) if achievement.progress_value == achievement.success_value
end
2. la méthode push_successfull_achievement déclenche donc un trigger javascript qui affiche ton infobulle de succès coté client.


RE: Reflexions sur un système d'achievements - Argorate - 18-05-2012

Moi ce que j'ai fait pour mes succès, c'est que j'ai des triggers dans les actions que font les joueurs, et ça enclenche la vérification que des succès en relation avec l'action.
Du coup quand on attaque, ça lance les verif sur les succès lié aux attaques, si un joueurs meurt, ça vérifie que ceux relatif a la mort etc...

Donc, je vérifie que le nécessaire et que au bon moment...

(un retour en JSON me suffit pour gérer l'affichage après le retour AJAX)


RE: Reflexions sur un système d'achievements - t.bodeux - 18-05-2012

Ma solution ressemble fort à celle de Argorate en fait Smile