JeuWeb - Crée ton jeu par navigateur
Position de départ d'une ville sur une carte - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Gameplay, gamedesign (https://jeuweb.org/forumdisplay.php?fid=48)
+--- Sujet : Position de départ d'une ville sur une carte (/showthread.php?tid=5637)



Position de départ d'une ville sur une carte - Maz - 14-08-2011

Bonjour, y songeant actuellement pour mon jeu, je viens discuter un peu de ce qui pour moi est un problème irrésolu: la position de départ des joueur dans un jeu de développement de cité.
Je trouves difficile de définir une "distance" entre joueurs, d'autant que sans aléatoire, les joueurs serais positionné comme sur une grille, donc il serais facile d'attaquer un joueur puisque l'on sait que les autres joueurs se trouvent X cases dans les 4directions:


Code :
x x x x x o x x x x x
x x x x x x x x x x x
x x x x x x x x x x x
x x x x x x x x x x x
x x x x x x x x x x x
o x x x x o x x x x o
x x x x x x x x x x x
x x x x x x x x x x x
x x x x x x x x x x x
x x x x x x x x x x x
x x x x x o x x x x x

Ou alors dans le genre plus compliqué on peut utiliser un algorithme formant la spirale d'archimède, mais là encore, c'est sans aléatoire.

De surcroît, dans les deux cas, le joueur positionné au centre sur la carte seras en théorie le joueur le plus attaqué.

Mais si l'on utilises l'aléatoire, les joueurs risqueraient d'être beaucoup trop éloignée pour inter-agir entre eux ou au contraire trop rapproché, ce qui en cas de conflit pourrais être ennuyeux pour le joueur le plus faible.

Et vous, quel est votre avis? Quel méthode avez-vous adopter?


RE: Position de départ d'une ville sur une carte - Sephi-Chan - 14-08-2011

Pourquoi ne pas découper ton plateau en une multitude de carrés et de placer aléatoirement chaque joueur dans un carré ? Ainsi tu as quelque chose d'assez prévisible sans l'être totalement (selon la taille desdits carrés) et ta distribution est plutôt équilibrée : aucun joueur ne peut se retrouver dans un désert ou une fourmilière.


RE: Position de départ d'une ville sur une carte - Maz - 14-08-2011

(14-08-2011, 05:21 PM)Sephi-Chan a écrit : Pourquoi ne pas découper ton plateau en une multitude de carrés et de placer aléatoirement chaque joueur dans un carré ? Ainsi tu as quelque chose d'assez prévisible sans l'être totalement (selon la taille desdits carrés) et ta distribution est plutôt équilibrée : aucun joueur ne peut se retrouver dans un désert ou une fourmilière.
Tu veut dire un peu comme ceci?
x x x x x x x x x x
x o x x x x x x x x
x x x x x x x x x x
x x x x x x x o x x
x x x x x x x x x x
x x x x x x x x x x
x x x x x x x x x x
x x x x x x o x x x
x x x o x x x x x x
x x x x x x x x x x

Le problème que j'ai c'est que ma carte se crée au fur et a mesure autour des cités, s'il n'y a pas de joueur, il n'y a pas de carte. à l'inscription du premier joueur, il est placé sur la case 0;0, le second joueur, avec un système pareil est relativement facile à placer, genre:

x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x 1 x x x x x x x
x x x x x x x x x x x x x x x
x 2 x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x
x x x x x x x x x x x x x x x

Je peut placer autour du joueur 1, 4joueur. Mais pour placer ceux autour du joueur 2 par exemple, qui est "collé" au carré du bas et non pas "à deux case". Le calcul se compliques.

Edit: Je pourrais aussi pour cette solution définir les carrés fictifs depuis la case source 0;0, mais il me faudrait à chaque fois vérifier que la case fictif n'est pas "utilisé", jusqu'à en trouver une vide. D'autant que la requête devrais vérifier les cases en formant une "spirale carré", sinon, il n'y auras jamais personne dans les positions négatives.

Edit²: Dans l'optique d'utiliser cette solution de carrés fictifs avec un zeste d'aléatoire, j'ai coder la formule pour la "spirale carré" en php pour ceux que ça intéresses:
<?php
// J'ai défini une case à trouver pour que la spirale ne tournes pas indéfiniment
// La variable $tailleCarreFictif peut être modifié à souhait
// Les coordonnées de la case à trouver peuvent être modifié, attention à saisir un multiple de la taille des carrés fictifs pour qu'elle soit trouvé,
// sinon boucle infini <img src="images/icons//2.gif" style="vertical-align: middle;" border="0" alt="2" title="2" />
$tailleCarreFictif = 11;
$decalage = 1;
$caseATrouver = array(55, 33);
$caseCourrante = array(0, 0);
while($caseATrouver != $caseCourrante) {
for($i = 1; $i <= $decalage; $i++) {
$caseCourrante[0] = (is_int($decalage/2)) ? $caseCourrante[0] + $tailleCarreFictif : $caseCourrante[0] - $tailleCarreFictif;
if($caseCourrante == $caseATrouver)
break;
}
if($caseCourrante != $caseATrouver) {
for($y = 1; $y <= $decalage; $y++) {
$caseCourrante[1] = (is_int($decalage/2)) ? $caseCourrante[1] + $tailleCarreFictif : $caseCourrante[1] - $tailleCarreFictif;
if($caseCourrante == $caseATrouver)
break;
}
}
$decalage++;
}
?>
Si quelqu'un veut des explications ou a des suggestions d'améliorations, n'hésitez pas.

Edit^3: couplé à GD2 pour visualiser le rendu: http://mazdesign.free.fr/spiralecarre/

Edit^4: amélioré pour pouvoir commencer après quelques itérations (défini par la variable $decalage). Ainsi un gain de ressource important: il suffit de stocker lors du placement de la dernière ville sur la carte la dernière itération et la boucle ne repart pas de 0,0. Dispo ici: http://mazdesign.free.fr/spiralecarre/ameliorer.php

Edit^5: Je persiste et signe avec une fonction générant le point d'origine du prochain carré fictif à partir de n'importe quel point. Sans aucune boucle. Dispo ici: http://www.jeuweb.org/showthread.php?tid=7905