JeuWeb - Crée ton jeu par navigateur
Création de frontière - 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éation de frontière (/showthread.php?tid=3382)



Création de frontière - biboum - 06-12-2008

Bonjour.
J'ai un petit soucis technique Smile

Dans mon jeu, il y a des pays (France, Pays-Bas, Belgique, peu importe...^^)
J'aimerais faire en sorte de pouvoir fermer-ouvrir les frontières.
Mais comment dire que la Belgique à une frontière avec le Luxembourg, la France, l'Allemagne, etc), que le Danemark que avec L'allemagne ...

Ce n'est pas sur une carte (pas encore), donc j'imagine qu'il va falloir chercher la réponse par la BDD.

J'avais pensé à inscrire pour chaque pays les frontières qu'il possède...mais le problème c'est que mes pays sont composé en térritoire, et que chaque térritoire peut devenir un autre pays du jour au lendemain...donc je ne vois pas trop comment automatiser cela.

Merci de votre aide Smile


RE: Création de frontière - Karedas - 06-12-2008

Est ce que des territoires peuvent se créer en cours de jeu ?


RE: Création de frontière - Nodark - 06-12-2008

Je ne pense pas ! Les territoires seront la dès le début le jeu,la différence,et qu'ils peuvent changer de pays qui les contrôle

C'est bien ça?


RE: Création de frontière - Sephi-Chan - 06-12-2008

En fait, il faut modéliser une relation plusieurs à plusieurs (avec 2 tables, donc).
Une table contients les territoires, l'autre les liaisons d'un territoire à l'autre.

Par exemple, dans la table pays, on a le couple (id | nom) :
Citation :1 | France
2 | Belgique
3 | Allemagne
4 | Suisse
5 | Italie
6 | Espagne
7 | Portugal

Notre table qui lieraient des pays à des pays (qu'on pourrait appeler pays_pays) contiendraient les données suivantes (id_pays_1 | id_pays_2 | distance) :

Citation :1 | 2 | 3 # Signifie que la France (1) touche la Belgique (2) et qu'il y a 3 unités de distance entre les 2.
2 | 1 | 3 # Signifie que la Belgique (2) touche la France (2) et qu'il y a 3 unités de distance entre les 2.
1 | 3 | 3 # Frontière France/Allemagne avec une distance de 3.
3 | 1 | 3 # Frontière Allemagne/France avec une distance de 3.
2 | 3 | 2 # Frontière Allemagne/Belgique avec une distance de 2.
3 | 2 | 2 # Frontière Belgique/Allemagne avec une distance de 3.
Etc. # Ça, ça veut dire que je vais pas tous les faire… Smile

Je ne sais pas si tu as déjà fais de la théorie des graphes, mais c'en est. Avec ça tu modélises un graphe orienté car tu peux faire des frontière à sens unique en retirant une ligne dans la table : si j'enlève la première ligne de la table, les Français ne peuvent plus aller en Belgique, mais les Belges peuvent aller en France. Tu peux également avoir un poids (la distance, en l'occurrence) qui diffère pour aller d'un point à un autre (le trajet Belgique/Allemagne peut être plus court (pour telle ou telle raison) que le trajet Allemagne/Belgique). Tu peux également avoir plusieurs chemins d'un point à un autre, ou plusieurs types de chemin (aérien, maritime, sous-terrain, terrestre, téléportation, etc.)

Enfin bon, ça claque quoi. Et avec ça, tu peux facilement appliquer plein, plein d'algorithme qui concernent cette même théorie des graphes.


Sephi-Chan


RE: Création de frontière - Seren - 06-12-2008

Une question importante avant c'est de se poser la question c'est de savoir comment tu vas représenter des territoires de formes non géométriques.

Pour une forme géométrique, tu peux utiliser des équations. Par exemple, X>38 c'est la Corée du Nord, X<= 38 c'est la Corée du Sud. Les deux pays sont séparés par le parrallèe de 38° Nord. Dans ce cas là ça tombe bien Smile.

Mais si tu as des formes complexes, une solution c'est d'utiliser un masque de territoire, C'est à dire que chaque "case" ou "lieux" à une propriété qui identifie son territoire.

Exemple graphique :

000000022222211111111111
000002222222222111111111
000000022222221111111111
000000022222222211111111
000000022220004440000000
003333333000000444400000
003333330000000004444000
003333300000000000440440
000000000000000000000000

C'est très laid, j'ai essayé de faire grossièrement:
0 = Mer / Ocean
1 = Allemagne/ Autriche / Suisse
2 = France
3 = Péninsule Ibérique
4 = Italie

A partir du moment ou tu as une représentation comme celle ci dans ta base.
tu peux définir un tableau ou une table frontière:
frontiere[3][2] = "ouverte";
frontiere[2][1] = "fermée";

Lors d'un déplacement/ changement de territoire, tu vérifies si la case de départ et d'arrivée sont dans le meme territoire : si c'est le cas pas de test, sinon vérifier l'état de frontière.


RE: Création de frontière - biboum - 06-12-2008

Oui Nodark, C'est bien cela. Le térritoire de Paris peut en cas de guerre devenir Espagnol, Anglais ou Thailandais.

Mes tables térritoires, pays, sont déjà crées. Ainsi qu'une table pour les latitudes/longitudes.

J'avoue que la solution de Seren, j'ai rien compris du tout...
J'avais fait une autre table où chaque térritoire a un numero qui l'identifie comme "mer/terre/ile/territoire cotier, etc" Mais par contre la solution de Sephi-Chan est pas mal, bien qu'un peu longue également à mettre en place.


Je pensais qu'il y aurait une solution plus simple^^, Je vois qu'il n'en est rien...merci Smile

Du coup ca oblige à marquer chaque territoire et ses frontières et sa distance avec chaque térritoire si je comprend bien ?
La France avec ses voisins proches, mais également la france avec la lituanie, la finlande, l'ukraine, bref chaque pays et sa distance en nombre de case...


RE: Création de frontière - Sephi-Chan - 06-12-2008

Moi c'est Sephi-Chan, pas Séphi-phan… Je me suis permis de corriger moi même.

Dans la table pays_pays, tu indiques seulement les territoires limitrophes.
Ensuite, quand tu veux aller de la France à la Lituanie, tu utilises un algorithme de recherche de chemin pour déterminer la meilleur route. L'algorithme de Dijkstra est le plus fiable.

Ensuite, rien ne t'empêche de d'ouvrir des voies directes entre deux pays non limitrophes : il te suffit d'ajouter alors une entrée dans la table pays_pays.


Sephi-Chan


RE: Création de frontière - biboum - 07-12-2008

Je vais tenter de faire ca Smile
C'est un poil compliqué...
Mais bon on va y arriver ^^