JeuWeb - Crée ton jeu par navigateur
Création du placement du joueur - 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 du placement du joueur (/showthread.php?tid=1245)

Pages : 1 2 3


RE: Création du placement du joueur. - denisc - 17-03-2008

Pense aussi à ne pas trop éloigner les villages les un des autres, surtout si c'est le tout début du jeu!!!
Genre, il faut placer le nouveau village à au moins 10 cases du village le plus proche, mais à 15 cases du plus éloigné... Comme ça, tes joueurs pourront se rencontrer assez rapidement!


RE: Création du placement du joueur. - Kassak - 17-03-2008

Veille aussi a laisser toujours une case d'écart entre les villages, les voisinages des fois c'est pas top moumoute!

Non mais pour poser une question comme ça tu piges rien a la programmation php toi...si? Tu peux faire un rand sur x et y, et tu test le résultat pour voir si la case est occupée, sinon tu recommences etc...compliqué non?


RE: Création du placement du joueur. - Shudrum - 18-03-2008

Je suis d'accord dans le principe, mais la création d'un village n'est pas si facile que ca question optimisation.

Ce que je conseille :

_ Tu créé une table pour la liste des cases disponibles, c'est à dire qu'en gros, à la naissance du serveur, toutes les cases y sont répertoriées.

Ensuite, pour l'optimisation, il faut qu'une seule case soit testée, sinon, en testant à chaque fois un rand et la disponibilité, si y'a beaucoup de joueurs / nombre de cases totales, tu peux tomber sur une infinité de tests.

Donc, pour tester la case, tu fais une simple requete sur ta table de cases vides, et pour les distances, c'est toi qui voit, mais pour genre une selection de 10x10 cases max, tu fais *genre* :

SELECT x , y FROM tbl_cases_vides WHERE x > -10 AND x < 10 AND y > -10 AND y < 10 ORDER BY rand()

Du premier coup tu tomberas donc sur une case vide ^^

Ensuite, tu crée dans ta table village ton village sur les coordonnées retournées, et tu supprime cette case de la liste des cases vides.

Voilà !


RE: Création du placement du joueur. - keke - 18-03-2008

Moa j'p têt don la rép méfo kt pr1 l'tan d'm'lyr. tu 1sèr 1 chen ds l'bas pi t kré l'id ki corsp à t d'jouer.

N'hésite pas ensuite à soigner ton orthographe et ta grammaire. La structure lexicale est aussi importante.

Bon courage dans ce monde édicté par les lois de la communication.

kéké.


RE: Création du placement du joueur. - Eluox - 18-03-2008

pour tester je fait
do
{
mes rand
je regarde ds la bdd si une personne a cette position x et y de mon rand
}while(et un mysql_result)


RE: Création du placement du joueur. - Shudrum - 18-03-2008

dark vengeur a écrit :pour tester je fait
do
{
mes rand
je regarde ds la bdd si une personne a cette position x et y de mon rand
}while(et un mysql_result)

Justement, c'est riqué, imagine la chose :

Une map 10x10 cases / 90 joueurs

Donc 10 cases de libres sur 100, tu n'as que 10% de chances de stopper ta boucle ... C'est super mauvais !


RE: Création du placement du joueur. - Harparine - 19-03-2008

Je pense que, si tu raisonnes en termes de cartes de 10x10 ou 15x15, tu devrais créer une table cartes contenant les infos sur la carte et surtout un champ avec le nombre de villages dessus. Après, si tu limites le nombre de village à 20 par exemple, tu peux faire une seule requête pour connaître la liste des cartes "non pleines" et en choisir une au hasard pour le joueur. Ensuite, tu récupères les positions des villages déjà placés sur la carte vide et tu les exclus du placement aléatoire sur la carte elle même. De cette manière, tu es sûr de ne pas avoir plus de deux requêtes (que des spécialistes de SQL pourraient peut-être ramener à une seule).

Donc pour résumer, deux requêtes :
1. les cartes dont le nombre de villages est inférieur à 20
2. les positions occupées par les villages déjà présents sur la carte sélectionnée
et 3 tables :
- joueurs
- cartes (contient le nombre de villages)
- villages (lié au joueur possesseur du village et à l'index de la carte).

Je pense que c'est un système relativement peu gourmand en ressources et facile à mettre en place pour un débutant. Cela suppose bien sur de connaître les bases de php...


RE: Création du placement du joueur. - denisc - 19-03-2008

Ou une table supplémentaire contenant une liste de position pour les villages! Après tout, tu peux aussi choisir, à la création de ta carte, de l'emplacement de tous les villages qui pourront être créés...

Ensuite, un random sur cette table en ne choisissant que parmi les non encore affectés à un joueur.

Finalement, ce ne sont pas les solutions qui manquent!!!


RE: Création du placement du joueur. - XyQrTw - 20-03-2008

heuu moi j'aurais ...

Code :
SELECT `X`, `Y`, MAX(`X`) as X_Max, MAX(`Y`) as Y_Max, CAST(RAND() * X_Max AS UNSIGNED) as X_Rand, CAST(RAND() * Y_Max AS UNSIGNED) as Y_Rand FROM la_table WHERE 1 HAVING  X <> X_Rand AND Y <> Y_Rand LIMIT 10;

Je pensse que sa fonctionne ...


RE: Création du placement du joueur. - gaby - 24-03-2008

XyQrTw a écrit :heuu moi j'aurais ...

Code :
SELECT `X`, `Y`, MAX(`X`) as X_Max, MAX(`Y`) as Y_Max, CAST(RAND() * X_Max AS UNSIGNED) as X_Rand, CAST(RAND() * Y_Max AS UNSIGNED) as Y_Rand FROM la_table WHERE 1 HAVING  X <> X_Rand AND Y <> Y_Rand LIMIT 10;

Je pene que sa fonctionne ...

Bonjour,
Tu peux expilquer un peu ta requête ?
Merci