La Quête des Héros

Bonsoir @ tous !

Edit : dernier fichier du projet : ici

Pour fêter mon nouveau record de téléchargement mensuel (et oui le 9543 vient d'être dépassé ! ) j'ouvre ce soir un sujet sur mon prochain (actuel, il est déjà commencé ! ) projet :

L'adaptation d'un jeu de plateau sur Excel : Hero Quest

heroquest

Je vous avoue que je commence à me rendre compte de mes capacités réduites en programmation, mais cela avance... Au moins au niveau Apparence !

Voici un screenshot :

la quete des heros

Bon la qualité de l'image n'est pas là mais sur l'écran ça rend plutôt pas mal !

Sur cette image qui est prise lors de la première quêtes (un labyrinthe où les héros doivent se retrouver et découvrir un escalier qui va les mener vers de nouvelles aventures !), on peut y voir les 4 héros : le Barbare, le Nain, l'Elfe et l'Enchanteur. D'ailleurs c'est l'Elfe qui est en cours de jeu du fait de la "lumière" autour de lui, ainsi que le repère bleu sur son nom à droite de l'image.

Les Héros sont séparés, car ils sont partis chacun de leur coin. D'où le fait de devoir se retrouver !

Les monstres sont absents de l'image, mais ils sont bien là, il y en a 8 plus Le Seigneur Des Ténèbres :

les lutins, petits et espiègles, les Orcs coriaces et voraces, les Fimirs puissants et sans état d'âme, la famille des "revenants" avec les Squelettes, les Momies et les Zombis, tout ce petit monde surveillé par les Guerriers du Chaos et les Gargouilles !

Ce premier niveau est fait pour s'adapter à l'application...

Le principe est celui de mon démineur : je met en "papier peint" l'image du niveau et grâce à la mise en forme des cellules je peux afficher ou pas une partie de cette image. Du coup il existe un brouillard d'aventure qui empêche le joueur d'anticiper ce qui va arriver à son héros. C'est le principe du jeu de plateau : le maitre du jeu ne met les éléments de décors qu'une fois que ceux-ci sont visibles par au moins un des joueurs Héros.

Le seul soucis c'est le temps que je peux y consacrer, mais en discutant ici et là sur le forum (ECG par exemple) j'arrive à surmonter les petits et gros problèmes que me pose ce petit jeu.

Alors je vous dis à plus tard, en espérant ne pas mettre trop de temps.

@ bientôt

LouReeD

Yeah la classe

Je regarde un peu le A* d'ailleurs pour le faire sur excel, cela devrait le faire ^^

Courage !

Bonsoir et merci !

En fait le A* ressemble un peu à la "propagation des cellules blanches" du démineur... On regarde si on peut y aller, si on peut pas on revient en arrière et on recommence. Après on s'arrête au chemin qui nous rapproche le plus vite du joueur...

@ bientôt

LouReeD

Le démineur un peu la même chose exactement ^^, on y rajoute un aspect de "cout" pour savoir le chemin le plus rapide

Y a pas mal de vidéo sur le net la dessus de toute façon

Et le A* n'est pas le seul algo de calcule de chemin si j'ai bien compris mais le plus populaire en tout cas

Bonjour,

En plus l'algo de déplacement des monstres n'est pas obligé d'être "intégral" dans le sens où eux aussi sont limité en déplacement, donc pour certain seul 8 cases sont à trouver !

Ce qui va me facilité la tâche je pense. Le seul truc c'est de vérifier que le monstre en question va bien aller sur un joueur visible de sa zone et qu'il n'ira pas vers un joueur qui pourrait se trouver sur une zone distincte de la sienne et qu'il y ait des cellules cachées entre eux. Mais ça c'est une autre histoire, d'autant plus que je crois que les monstres ne quitte pas une pièce tant qu'il reste des joueurs à l'intérieur ! Mais pour ça il faut que je relise les règles.

@ bientôt

LouReeD

C'est sur que juste 8 cases max pour les monstres ça limite la chose mais un A* avec une modif en plus fera l'affaire quand même

Par contre lui le joueur se déplace comment? il peut traverser la map en automatique via un A* ou pas?ou déplacement limités aussi?

Tant que tu trouves une solution technique A* ou pas c'est good de toute façon

Pour les monstres il te faut un attribut pour savoir si le joueur à vu ou non le joueur et donc s'il se déplace j'imagine yes dans une variable ou simplement si cela suffit juste en regardant si la shape est visible ou pas, c'est que le monstre est actif ou pas

Et peut être plus ... dans le sens ou si un joueur voit un monstre et meurt, comment cela se passe après?

  • il va que sur les autres joueur de l'équipe proche de lui?
  • il va n'importe ou sur la map tant que le chemin est dégagé?
  • il va n'importe ou sur la map même si le chemin est pas dégagé pour punir les joueurs qui avancent trop vite sans être assez fort?
  • il revient à sa position de départ?reste sur place?

il faut revoir les règles ou en inventer yes et cela influencera ton code c'est sur ^^

En gros avec un A* pour tes soucis c'est ok je dirais:

1. 8 cases max

Tu calcules le chemin avec l'algo de base, une fois le meilleur chemin trouver au lieu d'avancer de toute les cases point A au point B avec un simple compteur tu arrêtes le déplacement au bout de 8 cases

2. Vérifier qu'il y ait des cellules cachées entre ton joueur et ton monstre

Que ce soit des mur, porte fermée ou brouillard de guerre, pour l'algo A* c'est la même chose, la case ne sera pas possible au déplacement donc pas de chemin possible donc pas de mouvement

Et comme on disait, l'A* y a pas mal de truc sur le net donc je pense autant comprendre et le faire sur excel plutôt que de coder un truc perso moins réutilisable mais si tu as tout en tête c'est toi qui voit

Bonsoir,

j'y ai travaillé un peu aujourd'hui, cela marche bien sauf sur un ou deux truc.

Pour ce qui est des règles c'est simple : un monstre non découvert (un monstre est découvert lorsqu'un joueur entre dans une pièce ou un passage qui "s'allume") ne bouge pas et n'est même pas gérer par le code.

Une fois découvert, les joueurs ne peuvent pas faire "d'action" dans la pièce ou le passage tant qu'il y a des monstres, donc combat s'ils veulent trouver des choses. Le déplacement des monstres est donc fait pour aller au contact des joueurs pour les attaquer, seul les joueurs peuvent "fuir".

Le 8 était un exemple, en fonction du monstre ce déplacement est variable.

Donc pour le déplacement du monstre :

  • il est forcément "visible" d'un joueur car c'est le joueur qui allume la partie de la map où se trouve le monstre
  • à son tour de jeu, déplacement pour se rapprocher du joueur présent dans la zone allumé, il n'ira pas courir vers un autre joueur si celui-ci n'est pas dans la zone allumée.
  • une fois sur l'une des 4 cases possibles en vertical ou horizontal, le combat pourra commencer.
  • un monstre qui attaque ne se déplace pas à l'issue, mais il peut se déplacer avant puis attaquer.
  • une fois mort, le monstre disparaît.

Certaine aventure prévoit un monstre qui s'échappe pour attirer les joueurs vers un piège, mais là ça commence à être trop pour moi !

Surtout que j'essaie de faire que l'application soit évolutive, j'entends par là que les utilisateurs puissent faire leur propre quêtes et ce le plus simplement possible, voir avec la possibilité de faire des "exportations" de feuilles Excel qui contiendraient la map de la quête, ainsi que les données de jeu, et que ce soit compatible avec le module de base... Mais là je rêve !

Vu ma construction du classeur ce n'est pas impossible :

  • une feuille d'affichage du jeu (qui serait alors communes à toutes les quêtes, seul l'image d'arrière plan changerait)
  • une feuille Map qui défini les point de blocage (mur, zone de la map inaccessible, mobilier...) position des monstres, positions des portes, position des bonus et des pièges etc, et tout ceci avec un code numérique :
0 mur, 1à9 les différents monstres, par dizaine 10,20 etc jusqu'à 90 les 9 types de porte qui avec 10 est fermée à clef et 11 est ouvrable, à partir de 100 ce sera le reste, mobilier, passage secret, coffre, équipement, "événement" etc...

- une feuille paramètre, avec la définition des différentes zones à allumer, c'est grâce à elle que lors d'un déplacement dans un couloir, le couloir s'allume au fur et à mesure de l'avancée du joueur, par exemple le jouer se trouve en B2, cela allume C2 et D2, et là en D2 il y a une porte, et s'il ouvre la porte alors c'est D4:G8 qui s'allume. En plus il y aurait toutes les données texte en fonction des numéro de la MAP : numéro 110 = texte "vous taper dans une pierre, mais en fait c'est un rubis ! 50 Po !"

Donc un "éditeur" pourrait faire ces deux feuilles excel avec toutes les données, il suffirait de les coller dans le classeur jeu et hop ! une nouvelle quête !

Voilà l'idée !

@ bientôt

LouReeD

Yes un éditeur de level serait super !

Et pour le déplacement, les monstres ne se déplaçant pas en diagonale cela simplifie pas mal les calcules je pense

Bonsoir,

je pense que je vais réduire la voile...

En fait ils iront au plus vite vers le joueur, puisqu'il va se trouver dans la même pièce et/ou même passage.

Du coup calcul de différence en H et V puis premier déplacement pour réduire le plus grand des deux, ensuite si le déplacement pas possible alors changement de direction (si V alors H et inversement) et toujours dans le but de réduire la distance de ce nouvel axe, et ainsi de suite, si pas bloqué sur cette nouvelle direction, alors lorsque le monstre se trouve sur la même ligne ou colonne, il rechange de direction afin de réduire de nouveau l'ancienne différence...Malgré cela s'il y a blocage, alors on reprend l'autre axe et ainsi de suite, et peu de chance de blocage ou répétition vu que le déplacement des monstre "est limité".

@ bientôt

LouReeD

Si c'est dans la même pièce en effet c'est aussi efficace et rapide à mettre en place carrément, un point technique de réglé

Bonjour,

un point technique "hypothèse" de régler, mais dans la pratique...

Bref, en plus maintenant je me freine car je commence à vouloir "développer" de façon globale pour que la création de niveau soit la plus simple et "ouverte" possible.

Et la taille du plateau de jeu est en cour de ré évaluation afin de créer une interface homogène avec les infos qu'il faut.

J'ai vu des adaptations où il y avait un historique "tour après tour" de ce qui a été fait dans le jeu.

En gros je vais essayer de travailler comme il le faut, pour un développement sans accros !

@ bientôt

LouReeD

Dans la pratique? un souci pour faire l'algo ou tu ne sais pas encore comment seront fait les salles ? par exemple tu auras plein d'obstacle potentiellement?

Bonsoir,

en effet mon "envole" pour les jeux qui date de 2019, s'est estompé... Là je sèche... J'avais trouvé un "petit" truc, mais dès que j'ai mis un obstacle, le déplacement s'est mis "à tourner en rond" !

En plus mon code me permettait d'atteindre l'objectif sans pour autant mettre en mémoire le chemin le plus court !

Donc le monstre allait se promener partout !

Sinon au niveau gestion des niveaux, j'ai réussi à créer un code qui me permet d'extraire l'arrière plan d'une feuille pour la recopier sur la feuille de jeu où se trouvera l'interface pour le (les) joueurs.

Comme dit "plus haut", j'avance petit à petit afin de créer quelque chose de viable pour la création d'un "éditeur de niveau".

Attention ! Un éditeur de niveau pour ma vision c'est l'utilisateur mais en lui simplifiant le codage du niveau...

@ bientôt

LouReeD

en effet sans faire un A* cela peut vite devenir embêtant ^^

Après si tu as juste 1 case ou 2 interdite dans la pièce c'est facile, il faut stocker d’où tu viens pour continuer dans cette direction tant que tu es bloquée

Par exemple, ton monstre dans la case jaune 0 qui veut aller sur ton joueur vert avec des murs rouge X

algo1

tu va donc te déplacer vers le joueur qui est à droite du monstre mais tu rencontres une case interdite arrivé en 1, tu choisis au hasard ou arbitrairement vers le haut ou vers le bas pour esquiver cette case (vers le bas soit 2 dans notre cas) et tu continues dans cette direction tant que tu ne peux pas aller vers la droite (3) ce qui aura pour effet de pouvoir "éviter" plusieurs case qui bloque.

Après si tu as des zones complexes avec des culs de sac ou juste 1 case de passage qui entour le joueur etc, la sans algo A* ça va être très tendu surement oui, tu as quoi comme restrictions? tu veux faire quoi comme genre de salle?

Bonsoir,

Je recommence tout ce que j'ai fais afin d'intégrer le plus facilement la possibilité de créer ses quêtes.

Du coup, les quêtes seront programmées sur une voir deux feuilles.

La première, c'est la représentation du donjon avec ses différentes salles et couloirs.

Cette feuille permet de créer les murs secteur par secteur de forme quadrilatère de type rectangle ou carré. :

on sélectionne la plage de cellules, puis on clic sur "création du mur", un bouton permet de l'effacer.

Ce n'est pas ergonomique mais c'est ce que j'ai réussi à faire...

Cette feuille permet également de définir les zones "de jeu", c'est à dire les zones où le brouillard s'efface lorsque le joueur arrive dessus. Ces zones pour ce qui est des couloirs, devraient se superposées afin d'avoir une disparition du brouillard au fur et à mesure de l'avancée du joueur. Par contre les pièces équipées d'une porte, ne seront allumées que si le joueur entre dans la pièce.

Cette feuille permettra également d'indiquer où et quel type de monstre se trouve sur le chemin des héros.

Il y aura également la position des pièges, des objets interférant avec les joueurs, les portes et leur type, les pièges...

Pour ce qui est du mobilier de "décoration" ils seront directement incrustés dans l'image d'arrière plan (il y aura un peu de travail à faire avec Paint© par exemple )

La deuxième feuille contiendra un tableau qui recensera tout ce qui peut arrivée lors d'une partie, le but, l'objectif, mais ça ce n'est pas encore bien défini. Il se peut par exemple qu'il y ait sur la première feuille un code du type M3, qui voudrait dire : Monstre n°3, du coup sur cette deuxième feuille, à la ligne M3, sur les colonnes définies, on trouverait le type de monstre, sa capacité de déplacement, son endurance, son attaque, sa réaction devant un héro, etc...

Il y aurait aussi éventuellement un texte d'accompagnement qui serait affiché en bas de l'écran, avec plus d'un million de ligne sur une feuille, il y a de quoi faire un historique de la partie en cour !

Bref encore du pain sur la planche !

Ci joint mon "nouveau" fichier de recherche :

Il y a deux feuilles : la feuille jeu, sur laquelle vous allez pouvoir voir le fonctionnement du brouillard d'aventure. Pour cela, en cliquant sur le bouton [Test], la feuille s'initialise et place la cellule active en B2 (entourée du cadre vert), c'est ce qui symbolise le héro. Il ne vous reste plus qu'à jouer avec les touches de direction. Petit à petit, pas après pas, vous verrez s'afficher les couloirs et les pièces... OK, il n'y a pas les portes, il n'y a pas les monstres, mais c'est un bon début, enfin je pense.

La deuxième feuille est utilisable, et pour vous rendre compte de l'ergonomie, n'hésitez pas à la tester !

Le code n'est pas finalisé, car actuellement, la création des zones de jeu se fait "en directe", mais à l'avenir, se sera un tableau qui se remplira des différentes référence, comme cela, lors de l'initialisation d'une quête le programme sera autonome pour mettre "à jour" ses zones nommées pour l'aventure en question.

Le fichier : Effacé par LouReeD Il ne restera pas longtemps en téléchargement...

Le plateau se rapproche du plateau original du jeu, mais j'ai déjà préparé un plateau rempli de pavés, sur lequel on peut "coller" avec une application dessin, toutes sortes de tuile pour créer ses propres donjons et support d'aventures !

@ECG : vous pouvez voir que la taille des pièces n'est pas énorme (sauf dans le cas d'une feuille vierge d'aventure, sans prendre le support d'origine du jeu) et dans ces pièces il y a éventuellement un mobilier qui sont pour certain le long des murs, donc oui la gestion "agressive" des monstres devrait être assez simple.

Voilà. Il me reste pas mal de chose à récupérer de mon ancien fichier (celui qui a servi pour les screenshot des message précédent), et je vais également revoir son ergonomie "interface machine/joueur, en effet j'ai trouvé qu'il y avait trop de USF pour la gestion des actions du joueur, peut-être qu'une série de boutons accessibles directement ou pas en fonction du déroulement serait plus judicieux... Et je me suis lancé dans la création de lancé de dès en GIF animé avec les combinaison possibles avec deux et trois dès, plus les dés spéciaux, et tout ceci avec Paint3D© ! Je ne m'en sort pas !

@ bientôt

LouReeD

c'est en bonne voie tout ça

Pour la création du mur faut juste prendre le coup, y a surement moyen de faire mieux mais on peut faire une map en faisant gaf à ce qu'on fait quand même

Pour le moment 2 points:

  • on peut se téléporter à la souris, faudrait empêcher cela (surement dans ta to-do list)
  • je pense que les couloirs devraient avoir aussi un brouillard de guerre et que le joueur doit faire un pied dedans au minimum pour tout découvrir, comme ça au début il ne sait pas si c'est une salle ou juste un embranchement de couloir et peut hésiter ^^ mais bon je ne sais pas si ça colle au jeu

je vais regarder un petit algo pour le déplacement tient, ça me tente bien ^^

Evidemment, pour le fichier test c'est une activation de cellule qui déclenche tout, mais dans mon premier fichier, impossible de se téléporter !

Après les zones de jeu je les ai fait au plus simple avec un minimum de zone. Mais en fait on peut très bien faire du cellule par cellule même pour les pièces !

Dans le jeu original, une porte ouverte donne accès à toute la pièce.

@ bientôt

LouReeD

un algo très basique qui fonctionne dans le cas ou il y a que peu d'obstable ou plusieurs mais éloigner et dans des salles rectangulaires/carrés je dirais, cela limite pas mal la chose

  • clic droit sur une case = si case vide mets un X sinon supprime le X qui symbolise une case inaccessible
  • dans la macro NouvelleMap on peut changer la position du monstre et joueur ; le min/max de ligne/colonne étant de la mise en forme grise pour délimiter la zone
  • on voit en vert le chemin du monstre avec ses étapes numérotés
  • on voit en rouge la zone autour du joueur que le monstre doit atteindre pour être au corp à corp (fin de l'algo)

Il faudrait implémenter le "forcage" de direction en cas de situation plus complexes un peu.... mais vu que tu pars sur un éditeur de niveau (ou alors il faudra limiter la mise en place dobjet dans une piece?) il te faudra bien réfléchir je pense.

Un algorithme A* ou du style va être nécessaire pour vraiment être sur que tout les cas seront pris en compte si on peut mettre plein d'obstable/objet sur la map (même si j'ai un doute que ce soit le but dans un Hero Quest)

Et surtout dans le cas ou il y a les 4 heros dans la même pièces alignés, ça peut vite faire des cas spéciaux qui font planter ou tourner en rond pour un algo maison comme je viens de tenter.

Bon cela ne fera pas planter le jeu car au bout de X déplacements le monstre stoppera mais il atteindra jamais la cible ou alors il faut toujours cibler le plus proche ^^

Courage

exemple auto 1

Bonsoir,

merci de vous donner du mal !

Mais je vous avoue avoir du mal avec les variables à rallonge en majuscules...

Pour le déplacement des joueurs, j'avais fait un fichier avec les touches directionnelles du clavier, mais éventuellement je peux faire par "clic souris" avec pour condition : cellule cliquée doit être contiguë à celle du joueur, libre de tout objet ou de monstre, possibilité de passer "par dessus" un autre héros sauf si le déplacement devait se terminer sur ce dernier (donc pour marcher sur un héro, il faut au minimum deux pas restants)

Je vais réfléchir encore sur les déplacements monstres joueurs.

Pour la procédure des murs, j'ai fait plus simple et rapide :

je rempli la plage de cellule augmentée de 1 dans les 4 directions avec des 0, puis j'efface les 0 de la plage de cellule d'origine.

Deux actions, et c'est tout.

A savoir que pour les pièces biscornues, il y a toujours possibilité d'effacer ou d'ajouter "à la main" les 0 que l'on veut !

J'ai ajouté un code de test de validité de sélection de cellules afin de ne pas se retrouver avec un mur au milieu d'un pavés.

Pour ceci j'utilise MOD 2 sur la colonne et/ou la ligne, comme les pavés sont sur des chiffres pairs...Ceci jumelé avec le test d'un nombre de colonne et/ou de ligne impaire ! En effet si 1 pavé sélectionné, alors impaire, si deux pavés sélectionnées alors impaire également car il y a la cellule "du mur" entre les deux ! Du coup plus d'erreur de sélection !

J'avance, j'avance, mais je crois que le plus dure sera de programmer "les objets, actions, évènements" du jeu !

@ bientôt

LouReeD

Bonsoir

une version un peu plus évoluée : Effacé par LouReeD

En effet, sur cette version il est maintenant possible de faire des zones de jeu de la forme voulue et même avec des cellules non consécutives !

L'avantage ? Le brouillard d'aventure est mieux géré : lorsque le joueur arrive à une intersection en "T", il ne voit que le fond du T en s'approchant, puis lorsque sa vue à 45° le permet il voit la première cellule de chaque coté, puis quand il arrive au fond du T il voit une partie des deux couloirs... Sur le fichier je n'ai pas fait ceci, j'ai fait un autre exemple :

le joueur arrive dans une pièce, et dès qu'il entre seule 5 cellules de la pièce s'allument, et on peut imaginer qu'il y verra des monstres !

Un deuxième exemple est que si le joueur passe sur une cellule particulière, alors une zone secrète s'allume et devient accessible alors qu'au premier passage il y avait un mur !

Ce fichier limite les clics en dehors de la zone de jeu mais ce n'est pas le but de ce fichier, il sert à simplifier la création de donjon.

Comme à mon habitude, ce fichier ne restera pas longtemps...

@ bientôt

LouReeD

Rechercher des sujets similaires à "quete heros"