JeuWeb - Crée ton jeu par navigateur
Lié 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 : Lié joueur (/showthread.php?tid=5761)



Lié joueur - Mercenaire - 12-05-2014

Bonjour,

Dans le cadre de mes études, je dois réalisé un jeu en utilisant js,php,mySql.
Et ce jeu n'est autre que Othello.

Mais voila, j'ai réalisé sous js le jeu qui se joue seul.
Et maintenant j'aimerai que plusieurs joueurs puissent s'affrontés en binôme.
Donc j'ai une liste de joueurs connectés(champ dans bd, true ou false), un joueur invite un autre joueur à joué si celui-ci ne joue pas déjà.

Ce que je n'arrive pas à concevoir en php:

Comment lié 2 joueurs à une partie.
Comment informé qu'un joueur joue déjà une partie.
Et comment envoyer la nouvelle disposition des pions qui sont stocké dans la bd(sous forme de string 00110000010-10-11 où le 0 représente une case vide, 1 le pions blanc etc) à l'adversaire quand il a joué son coup.

Merci pour votre aide.


RE: Lié joueur - DrXela - 12-05-2014

Si tu te contentes d'avoir un "true/false" sur la connexion, ca me semble compliqué, je mettrais au moins un autre attribut "playing" que tu peux mettre des true/false et garder que cette table...

Mais pour mieux faire, il te faudrait une table "Partie" en plus. Si joueur A est co et joueur B et que la table "Partie" n'a pas de données dans lequel tu retrouves JA ou JB, tu peux l'inviter. Si tu trouves une partie avec JA ou JB, c'est qu'ils sont déjà en partie. Si tu trouves avec JA ET JB sur la même donnée, c'est qu'ils sont DEJA en partie entre eux.

Bref, JA invite JB, JB accepte, ca crée une "Partie" avec un id, l'id JA et l'id JB, et la partie est "delete" une fois terminé.

Ca, c'est juste pour démarrer une partie, mais vu ta gestion des pions, j'ai un peu peur ^^' Tu devrais revoir ton modèle BDD avant de continuer le codage...


RE: Lié joueur - Mercenaire - 12-05-2014

(12-05-2014, 03:19 PM)DrXela a écrit : Si tu te contentes d'avoir un "true/false" sur la connexion, ca me semble compliqué, je mettrais au moins un autre attribut "playing" que tu peux mettre des true/false et garder que cette table...

Mais pour mieux faire, il te faudrait une table "Partie" en plus. Si joueur A est co et joueur B et que la table "Partie" n'a pas de données dans lequel tu retrouves JA ou JB, tu peux l'inviter. Si tu trouves une partie avec JA ou JB, c'est qu'ils sont déjà en partie. Si tu trouves avec JA ET JB sur la même donnée, c'est qu'ils sont DEJA en partie entre eux.

Bref, JA invite JB, JB accepte, ca crée une "Partie" avec un id, l'id JA et l'id JB, et la partie est "delete" une fois terminé.

Ca, c'est juste pour démarrer une partie, mais vu ta gestion des pions, j'ai un peu peur ^^' Tu devrais revoir ton modèle BDD avant de continuer le codage...

Merci pour ton aide.
Dans js, pour les pions, j'utilise un tableau de boutons qui représente une image correspondant à un nombre.
Je ne vois pas comment je pourrais amélioré la bd.


RE: Lié joueur - DrXela - 13-05-2014

Je dirais en faisant une table pion, avec son id, l'id de la partie (clé étrangère), la position x, la position y, et le proprio du pion.
Sachant que le combo "id partie + x + y" doit être unique. Vu que tu peux pas avoir deux pions sur la même case d'une même partie, non ? A partir de la, tes boutons auront statiquement leur valeur X et Y, et checkeront dans la BDD si pion X/Y de la partie Z existe ou non. Si il existe pas, il crée un pion pour le joueur A ou B...

Si on continue, tu as sans doute des actions "autour" de ton pion déjà posé, si tu cliques sur un bouton pour sélectionner un pion X/Y qui t'appartient, il est facile de chercher l'existence de pion X-1/Y ou X/Y+1 etc etc... et de vérifier si ces pions "voisins" sont au joueur adverse, dans ce cas, ton js autorise une action d'attaque pour bouffer son pion.

Enfin, en gros, avec une table pion, tu dois pouvoir faire tout ce que tu veux...


RE: Lié joueur - Ter Rowan - 13-05-2014

hello

l'intérêt de la table "pion" me semble très faible.


le pion n'est pas un objet informatique. L'objet physique ne fait que représenter un état de la case => la case est l'objet informatique

Donc pour moi:
soit on part sur une table "case"X, Y, status (vide, blanc, noir)

soit on reste sur un tableau matriciel (ok on n'est pas en n formes normales, mais est ce important pour ce jeu ?).


RE: Lié joueur - Mercenaire - 13-05-2014

(13-05-2014, 09:50 AM)DrXela a écrit : Je dirais en faisant une table pion, avec son id, l'id de la partie (clé étrangère), la position x, la position y, et le proprio du pion.
Sachant que le combo "id partie + x + y" doit être unique. Vu que tu peux pas avoir deux pions sur la même case d'une même partie, non ? A partir de la, tes boutons auront statiquement leur valeur X et Y, et checkeront dans la BDD si pion X/Y de la partie Z existe ou non. Si il existe pas, il crée un pion pour le joueur A ou B...

Si on continue, tu as sans doute des actions "autour" de ton pion déjà posé, si tu cliques sur un bouton pour sélectionner un pion X/Y qui t'appartient, il est facile de chercher l'existence de pion X-1/Y ou X/Y+1 etc etc... et de vérifier si ces pions "voisins" sont au joueur adverse, dans ce cas, ton js autorise une action d'attaque pour bouffer son pion.

Enfin, en gros, avec une table pion, tu dois pouvoir faire tout ce que tu veux...

Le problème est que les pions ne sont pas figés, ils changent constamment.
Si j'ai par exemple dans la bd des valeurs pour x,y :
1 et 4
2 et 6
3 et 8
Et que je le joueur bouffe un pion, qui fait changer la position de certaines coordonnées.
Je dois parcourir tous la table pour vérifier chaque coordonnées pour chaque changement.
ça me semble lourd non?


RE: Lié joueur - DrXela - 13-05-2014

Si tu as 10 cases sur 10 cases, ca correspond à un unique parcours de 100 lignes, ce qui m'a pas l'air "extravagant", si on compare des jeux ou tu dois cherchais un joueur parmi 100.000...
Je pense donc que la différence ne sera que de quelques millisecondes.

A contrario (et selon moi), le fait de faire ton plateau de jeux simplement sous la forme
0001120000
0001022000
0011002220
0000012000

etc etc dans une unique String (tu dois avoir un délimiteur, genre un point ou un "/" pour définir le changement de ligne ?) t'oblige à créer un algo qui va découper ton String via un "split" de ton délimiteur, choisir la bonne ligne selon le X, avancer à la colonne Y, regarder ce qu'il y a, puis proposer des solution. Le soucis ici est que tu dois, si tu veux faire un action vers le haut ou le bas, changer de ligne, donc récupérer la ligne du dessus (en disant que tu as stocké les lignes dans un tableau de String), puis reparcourir la ligne jusqu'a la position Y-1 à Y+1 pour voir ce qu'il y a, et proposer des actions en fonction.

En gros, je trouverais ca lourd comme code, quand on peut faire des actions monocibles en utilisant un peu plus la BDD pour les recherches.

Question vitesse, je ne serais pas dire lequel sera donc plus rapide, entre "plus d'accès BDD" ou "plus de script JS à éxecuter", même si je pense que c'est minime pour un jeux comme le tien.

Je pense juste qu'une bonne BDD permet un codage simplifié.