12-12-2012, 11:48 PM
Je suis pas forcément emballé par ce que tu proposes, si tu souhaites faire des rencontres aléatoires tu peux le faire également. Sinon pour pallier au problème de parties abandonnées, il suffit de donner une durée de vie à tes défis. Si tu dis qu'un défi dure maximum 3 jours, lorsque tu crées un combat, tu lui donne la date et l'heure actuelle, et puis tu fais un cron ou simplement une fonction quelque part dans ton code qui vérifie si il y a des défis en attente de plus de 3j et de les nullifier (soit tu déclares le joueur qui a défié vainqueur, soit tu annules ou supprimes simplement le combat).
Cette solution est utilisée par pas mal de jeux sur Facebook dont SongPop. Tu peux défier tes amis inscrits à SongPop ou bien chercher des adversaires aléatoirement.
Ceci dit je suis pas là pour juger Donc voici comment tu pourrais solutionner ton problème :
Dans la réalité ce qu'il se passe :
Point de vue du code :
Joueur x (peu importe qui et quand) lance une partie à un moment x.
Cette solution est utilisée par pas mal de jeux sur Facebook dont SongPop. Tu peux défier tes amis inscrits à SongPop ou bien chercher des adversaires aléatoirement.
Ceci dit je suis pas là pour juger Donc voici comment tu pourrais solutionner ton problème :
Dans la réalité ce qu'il se passe :
Code :
Joueur 1 lance une partie
Joueur 3 lance une partie
Joueur 4 lance une partie
Joueur 2 lance une partie
Point de vue du code :
Joueur x (peu importe qui et quand) lance une partie à un moment x.
Code :
Vérifier si il y a un combat où id_joueur est différent de id Joueur x ET où id_adversaire est NULL (1ère condition pour éviter de jouer contre soi-même, 2ème pas encore trouvé d'adversaire).
Si non :
Créer un combat avec id_joueur = id du Joueur x [id_adversaire est laissé à NULL (car on ne sait pas contre qui on va jouer)]
Faire jouer Joueur x
Mettre le score de Joueur x dans score_joueur
Sinon :
Le combat que l'on va compléter est le premier combat dans la base de données où l'id_joueur est différent de l'id de Joueur x et que l'id_adversaire est NULL.
Mettre l'id du Joueur x dans id_adversaire.
Faire jouer Joueur x
Mettre le score de Joueur x dans adversaire_score
Calculer et stocker le résultat (comparer le score_adversaire et score_joueur pour définir qui a gagné)
Si résultat = 1 -> id_joueur (Joueur y qui avait joué et créé le défi juste avant que Joueur x joue) a gagné
Si résultat = 0 -> id_adversaire (Joueur x) a gagné
Si résultat = 2 -> les deux joueurs sont a égalité
Fin si