15-10-2015, 11:56 AM
(Modification du message : 15-10-2015, 12:03 PM par OursGroumy.)
Bonjour à tous.
Je suis actuellement entrain de travailler sur un projet avec un ami. Nous nous sommes donnés comme idée de faire un jeu sur navigateur, il ressemblerait sur certains points a un Ogame ou Travian. Mais nous voulons développer un jeu un peu plus tactique.
Nous sommes parti sur l'idée de développer en PHP avec Symfony2.
Pour donner une idée de notre niveau, nous sommes étudiants en master informatique. Nous n'avons pas une grande expérience dans le Web (seulement des projets perso), mais une bonne connaissance des concepts informatiques.
L'idée est que chaque joueur puisse posséder des flottes (de bateaux). Et affecter des missions à ses flottes (Comme se déplacer, attaquer, transporter, patrouiller ...).
Chaque actions prenant un temps variable pouvant aller a plusieurs heures.
La carte sur laquelle ils évoluent est une grille de case d'eau ou de terre (un bateau ne se déplaçant que sur l'eau ...). Et les cases de terre peuvent être occupées par des forts ou des villes.
Un bateau ou un fort possède une zone de contrôle qui représente les cases qu'il peut protéger. Si un bateau patrouille et qu'un bateau ennemi rentre dans sa zone de contrôle, il y a combat.
Nous tenons vraiment a implémenter ce principe car le jeu se baserait beaucoup sur l'attaque et la défense de certains point (convois, villes ...).
Notre problème est le suivant. Imaginons que 2 joueurs soient adversaire. j1 envoi sa flotte en un point A. J2 envoi la sienne en un point B. Ces deux actions vont prendre un certain temps. Les deux joueurs se déconnectent et il ne reste plus aucun joueur de connecté sur le serveur (et plus de requêtes PHP envoyés au serveur).
Seulement les deux flottes se croisent en un point C et devraient se battre. Comment détecter cette rencontre ?
Je vois deux solutions.
Une qui m'a été matraqué a chaque fois que j'ai parlé de ce problème, mais qui ne me semble pas bonne :
_Calculer les collisions à l'avance et les résoudre lorsqu'une requête est envoyée au serveur.
Seulement cela demande de stocker toutes les collisions possible. Si on imagine que la flotte du J1 interceptée par un autre bateau (appelons le J3). Alors deux possibilité. Soit la flotte de J1 gagne, et alors elle continue et rencontre la flotte de J2. Soit elle perd et c'est celle du J3 qui continue sa route. Et ira pourquoi pas rencontrer d'autres flottes.
Cela demanderait d’implémenter un arbre des possibilités. Et de le faire résoudre lorsqu'une requête est envoyée au serveur. Ce qui voudrait dire qu'une requête lambda envoyée par un joueur devrait faire résoudre tout l'arbre. Ca ne me semble pas être une bonne idée.
_Un mécanisme qui permettrait de faire tourner une boucle infinie sur le serveur dans laquelle on résous les positions et les événements. Seulement je ne vois pas comment l’implémenter. Cela voudrait dire qu'il tourne sur le serveur sans qu'il n'y ait de requêtes PHP.
Seulement je ne sais pas du temps comment implémenter ça. Ni même si c'est possible en utilisant PHP.
_Un timer qui envoi régulièrement l'ordre au serveur de remettre a jour les positons et de résoudre les événements. Là encore je ne sais pas si c'est implementable (vu qu'aucune requête ne vient verifier que le timer s'est écoulé
Ce problème est une grosse barrière a l'avancement de notre projet. Et je serai très reconnaissant si vous pouviez m'éclairer. Parce que j'avoue que personnellement je patauge ... J'en appelle donc à votre expérience des jeux sur navigateurs.
Je suis actuellement entrain de travailler sur un projet avec un ami. Nous nous sommes donnés comme idée de faire un jeu sur navigateur, il ressemblerait sur certains points a un Ogame ou Travian. Mais nous voulons développer un jeu un peu plus tactique.
Nous sommes parti sur l'idée de développer en PHP avec Symfony2.
Pour donner une idée de notre niveau, nous sommes étudiants en master informatique. Nous n'avons pas une grande expérience dans le Web (seulement des projets perso), mais une bonne connaissance des concepts informatiques.
L'idée est que chaque joueur puisse posséder des flottes (de bateaux). Et affecter des missions à ses flottes (Comme se déplacer, attaquer, transporter, patrouiller ...).
Chaque actions prenant un temps variable pouvant aller a plusieurs heures.
La carte sur laquelle ils évoluent est une grille de case d'eau ou de terre (un bateau ne se déplaçant que sur l'eau ...). Et les cases de terre peuvent être occupées par des forts ou des villes.
Un bateau ou un fort possède une zone de contrôle qui représente les cases qu'il peut protéger. Si un bateau patrouille et qu'un bateau ennemi rentre dans sa zone de contrôle, il y a combat.
Nous tenons vraiment a implémenter ce principe car le jeu se baserait beaucoup sur l'attaque et la défense de certains point (convois, villes ...).
Notre problème est le suivant. Imaginons que 2 joueurs soient adversaire. j1 envoi sa flotte en un point A. J2 envoi la sienne en un point B. Ces deux actions vont prendre un certain temps. Les deux joueurs se déconnectent et il ne reste plus aucun joueur de connecté sur le serveur (et plus de requêtes PHP envoyés au serveur).
Seulement les deux flottes se croisent en un point C et devraient se battre. Comment détecter cette rencontre ?
Je vois deux solutions.
Une qui m'a été matraqué a chaque fois que j'ai parlé de ce problème, mais qui ne me semble pas bonne :
_Calculer les collisions à l'avance et les résoudre lorsqu'une requête est envoyée au serveur.
Seulement cela demande de stocker toutes les collisions possible. Si on imagine que la flotte du J1 interceptée par un autre bateau (appelons le J3). Alors deux possibilité. Soit la flotte de J1 gagne, et alors elle continue et rencontre la flotte de J2. Soit elle perd et c'est celle du J3 qui continue sa route. Et ira pourquoi pas rencontrer d'autres flottes.
Cela demanderait d’implémenter un arbre des possibilités. Et de le faire résoudre lorsqu'une requête est envoyée au serveur. Ce qui voudrait dire qu'une requête lambda envoyée par un joueur devrait faire résoudre tout l'arbre. Ca ne me semble pas être une bonne idée.
_Un mécanisme qui permettrait de faire tourner une boucle infinie sur le serveur dans laquelle on résous les positions et les événements. Seulement je ne vois pas comment l’implémenter. Cela voudrait dire qu'il tourne sur le serveur sans qu'il n'y ait de requêtes PHP.
Seulement je ne sais pas du temps comment implémenter ça. Ni même si c'est possible en utilisant PHP.
_Un timer qui envoi régulièrement l'ordre au serveur de remettre a jour les positons et de résoudre les événements. Là encore je ne sais pas si c'est implementable (vu qu'aucune requête ne vient verifier que le timer s'est écoulé
Ce problème est une grosse barrière a l'avancement de notre projet. Et je serai très reconnaissant si vous pouviez m'éclairer. Parce que j'avoue que personnellement je patauge ... J'en appelle donc à votre expérience des jeux sur navigateurs.