(1) 2 3 4 5 »


système Sid Meyer like (Civilization)
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1796
Bonjour tout le monde,

Je souhaiterais connaître le secret du tour du monde. C'est-à-dire que dans les jeux ancien, on avait la possibilité de déplacer la caméra et de retrouver l'autre extrémité de la carte. Je suis sûr qu'il est possible de faire ça aussi dans le BGE.

Du coup, comment ça marche ?

Ensuite dans les jeux Sid Meier je suppose qu'il n'y a pas de navmesh donc je me demande comment le jeu parvient à créer un chemin à travers les cases et indiquer le nombre de tours ?

Merci pour les éclaircissements que vous pourrez m'apporter.

Contribution le : 23/02/2020 11:27
Créer un fichier PDF de la contribution Imprimer


Re: Tour du monde et pathfiding
OverdOzed
Inscrit:
08/10/2003 09:20
De Annecy
Post(s): 3018
Salut Redstar,
Tu veux dire quoi par "retrouver l'autre extrémité de la carte"?
Il n'y avait peut etre pas de "navmesh" a proprement parler, mais un système similaire de pathfinding a forcément du être mis en place (algorithm A*, ce genre de chose...) Je ne suis pas hyper calé sur le sujet mais tu devrais trouver pas mal d'info sur le net, peut etre que l'algo est trouvable quelque part pour le BGE, sinon tu vas devoir t'y coller ;) J'avais tenté plus jeune d'en faire un sur le BGE... sans aucune expérience je n'ai jamais réussi à le terminer :)

Contribution le : 23/02/2020 17:59
_________________
lucky
www.lucky3d.fr
Auto-Rig Pro Addon: Blender Market - GumRoad
Créer un fichier PDF de la contribution Imprimer


Re: Tour du monde et pathfiding
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1796
Citation :

Tu veux dire quoi par "retrouver l'autre extrémité de la carte"?


Je veux dire ceci.

Pour ma seconde question, j'ai une théorie: en faisant un détecteur entre en collision avec un autre détecteur des cases et la collision génèrera un point de passage. Ça pourrai marcher mais c'est à tester.

Contribution le : 24/02/2020 10:37
Créer un fichier PDF de la contribution Imprimer


Re: Tour du monde et pathfiding
Fou Furieux du Clan
Inscrit:
26/07/2008 22:53
Post(s): 208
Salut !

Pour ton problème de tour du monde, j'ai vu les premières vidéos de cette playlist. C'est un mec qui créé les bases d'un jeu à la civilization. Il explique très bien le tour du monde assez tôt dans la playlist (je sais plus dans quelle vidéo).

C'est en anglais, mais il explique bien ce qu'il fait, comment et pourquoi. Après c'est du C# sous Unity, ça te donnera le principe, mais il faudra l'adapter, si toutefois c'est possible.

Contribution le : 24/02/2020 12:19
Créer un fichier PDF de la contribution Imprimer


Re: Tour du monde et pathfiding
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1796
Merci pour ton partage ! La méthode est claire (partie 2) maintenant, je sais ce que je dois faire comme tests.

Contribution le : 24/02/2020 13:56
Créer un fichier PDF de la contribution Imprimer


Re: Tour du monde et pathfiding
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1796
Bonjour,

Je suis en train de réaliser un générateur de carte comme dans les jeux "Sid Meyer".

J'avance bien dans mon ébauche mais je bloque sur un problème: j'ai un bateau qui apparait sur une case d'eau. Si je clique sur une autre case, un cube apparait et le bateau dois arriver à celui-ci tuile par tuile, en cherchant le chemin le plus court. Le problème, c'est que je n'arrive pas à faire déterminer la case suivant ou dois se déplacer le bateau (ou plutôt faire apparaitre un point de passage).

from bge import logic as gl

scene = gl.getCurrentScene()
obj = gl.getCurrentController().owner
list_dist = []
dist_min = None

for case in scene.objects:
    if 'type' in case:
        # on regarde les cases avoisinante sauf celle sur laquelle on est
        if obj.getDistanceTo(case) < 1 and obj.getDistanceTo(case) > 0.5:
            # on indique dans une liste chaque distances par rapport aux cases concernées
            list_dist.append(case.getDistanceTo('pt_unit'))
        
for test in scene.objects:
    if 'type' in test:
        # on cherche la case ayant la plus petite distance correspondant à la valeur la plus petite dans la liste
        if test.getDistanceTo('pt_unit') == min(list_dist):
            scene.addObject('pt_unit', test, 0)


J'ai un résultat, mais pas celui attendu visuellement.

Deuxième chose: comme c'est une carte générée aléatoirement, je constate tout de même que la répartition est parfois bizzare. Quelle fonction me permettrai d'avoir quelque chose de plus... uniforme ?

Contribution le : 07/04/2020 15:56
Créer un fichier PDF de la contribution Imprimer


Re: Tour du monde et pathfiding
OverdOzed
Inscrit:
19/07/2011 20:39
De Corsica !
Post(s): 1261
Pour le chemin le plus court, tu peux tenter une implémentation d'un algorithme de chemins (pathfinding).
Le A* est très utilisé pour les jeux (c'est ce que j'utilise d'ailleurs), un exemple pour le mettre en place:
https://medium.com/@nicholas.w.swift/easy-a-star-pathfinding-7e6689c7f7b2

++

Contribution le : 07/04/2020 16:13
Créer un fichier PDF de la contribution Imprimer


Re: système Sid Meyer like (Civilization)
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 3040
+1 pour A* (qui est si populaire qu'il en existe de nombreuses variations).

Pour la génération aléatoire, tu peux plus décrire ce que tu veux améliorer ? C'est la génération des tuiles, du genre "terre" et "mer" ? Ou ça concerne un autre aspect de la génération ?

Si tu parles bien de la map et des tuiles, as-tu penser à générer un diagramme de Voronoï ? C'est très utilisé pour la génération de cartes.
Je parle de ce type de map mais tu peux adapter ensuite pour avoir plusieurs continents.
https://www.youtube.com/watch?v=WoBA42n4xO8

Contribution le : 07/04/2020 20:55
Créer un fichier PDF de la contribution Imprimer


Re: système Sid Meyer like (Civilization)
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1796
C'est donc ainsi que ça se dit ? D'accord.

Je vais regarder ça. Bibi09, Je ne sais pas comment générer un diagramme de Voronoï, je n'y ai même pas pensé.

Mais actuellement, j'ai 3 type de tuiles, terre, eau et montagne mais en théorie, il y aurai d'autres types de tuiles comme le sable, les rivières, les marécages...

Effectivement, l'agencement des tuiles est chaotique actuellement, je retrouve parfois mon navire piégé sur une case d'eau sans pouvoir sortir. Normalement, le navire devrai être généré sur la gauche ou sur la droite, l'idée étant que ce navire arrive de l'Europe et trouve le Nouveau monde pour l'explorer et la coloniser.

Mais je sais pas si j'airai plus loin, là, je veux juste faire une ébauche opérationnelle.

Et je viens de penser à trois choses: la répartition des tuiles se fait par "zone", je ne vois pas du tout comment programmer ça. Ensuite, il y à l'apparence des tuiles en fonction des tuiles avoisinantes, j’aurai aimé que ce ne soit pas trop cubiques, c'est à dire que si j'ai une tuile entourée d'eau et d'une seule case de terre, il faut que la "jonction" soie harmonieuse (replace mesh ok mais comment identifier le bon mesh selon la disposition et le sens de la tuile ?).

La dernière chose, c'est le territoire: comment parvient-on à agrandir le territoire, en voyant uniquement les hexagones colorés de la nation montrant les limites et non pas l'intérieur des terres ?

Contribution le : 08/04/2020 08:22
Créer un fichier PDF de la contribution Imprimer


Re: système Sid Meyer like (Civilization)
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 3040
Le diagramme de Voronoï te permet justement de résoudre ce problème de case isolée.
Chaque cellule du diagramme représente un biome comme dans Minecraft.
Chaque cellule peut être elle-même découpée en tuiles. Toutes les tuiles du même biome ont les mêmes propriétés (terre, eau, sable, montagne, ...). Ca c'est pour rester simple dans un premier temps. Ensuite c'est possible de l'améliorer (relief, ...).

Je sais pas si tu peux inclure des bibliothèques Python dans le BGE mais que ce soit Voronoï ou autre (Perlin, etc), ça se trouve facilement.

Commence déjà par ça. Pour les soucis graphiques, ça sera dans un second temps. Je pense qu'il ne faudrait pas voir une case comme un tout. En fait, je découperais la case au moins en 4 mais probablement plus pour gérer les coins.
Exemple pour la transition entre du sable et de l'herbe (il faudrait faire pareil pour les autres côtés et les coins...).


Donc, au niveau de la structure de la map on aurait :
- Voronoï pour les biomes ;
- Cellule pour les cases ;
- Divisions de cellule pour les transitions.

Contribution le : 08/04/2020 09:27
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 3 4 5 »




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses Forme du son 1 25 Aujourd'hui 10:34:14
debutant 
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[17] 165 13253 Hier 18:44:20
moonboots 
[WIP] et travaux terminés [WIP] La gabarre '' Le Gros Ventre''    [1][2][3]...[7] 67 12235 Hier 10:51:04
Guiu 
[WIP] et travaux terminés [terminé] Wild Landscape - Terminé    [1][2] 10 337 29/07 22:36:17
moonboots 
Hors Sujet !! un personnage de Blendman :) - Modélisation a partir de cubes 1 191 29/07 16:05:13
blendman 
Graphisme alternatif faire de la bd avec blender    [1][2][3]...[5] 45 2361 29/07 16:01:24
blendman 
Python & Plugins BlenderGeoAlt - Générer le terrain d'après des coordonnées 0 143 29/07 01:52:10
BlendX 
Python & Plugins Vegetation addon - tree, animation et plus ! 7 1681 27/07 23:26:14
ferrari6 
Python & Plugins [terminé] City pack Cars pour Blender 2 358 27/07 23:22:24
ferrari6 
Questions & Réponses [non résolu] armature qui suit une autre armature 3 182 27/07 13:27:17
Many 
Inkscape Créer des fichiers dxf séparé 0 57 27/07 10:01:46
Redstar 
Moteur de jeu GameBlender et alternatives [non résolu] Cs (vaisseau)    [1][2][3]...[54] 539 163746 26/07 20:38:05
sbkodama 
Python & Plugins Mesh Cranium ( base mesh pour la sculpture 3D ) 0 86 26/07 08:52:22
stev 
[WIP] et travaux terminés Visage humain 4 267 26/07 07:08:36
Guilleto 
The Blender Clan 'tchat Les tutos de Stev ( CG Groovy ) 5 657 26/07 06:16:16
stev 
The Blender Clan 'tchat Impact de la compression sur le temps de rendu 0 98 25/07 09:57:17
Bibi09 
Questions & Réponses [résolu] Png et liseré blanc 5 277 23/07 20:56:32
meltingman 
Hors Sujet !! Sinoceratops project - Ateliers suivies de A à l'Animation    [1][2][3] 28 1598 23/07 16:11:40
meltingman 
The Blender Clan 'tchat Avenir du blender clan    [1][2][3]...[26] 256 30188 20/07 20:56:17
Bibi09 
[WIP] et travaux terminés [WIP] sinocératops    [1][2] 10 553 18/07 21:02:55
meltingman 

Qui est en ligne
122 utilisateur(s) en ligne (dont 90 sur Forums)

Membre(s): 0
Invité(s): 122


plus...
Nouveaux membres

Nemo
11/3/2021
qingjie 10/3/2021
Kask909 9/3/2021
marie-antoinette 7/3/2021
Bugs 7/3/2021
lolorogli75 4/3/2021
Flagiel 4/3/2021
thedeathclown 1/3/2021
Littlespoon 28/2/2021
luxperpetua 27/2/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Aou 4
Anniversaire de xemphra
Aou 7
anniversaire Cem47
Aou 13
Anniversaire Siskas
plus 252 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445