JustGang

Jeu de simulation de gang WEB

a marqué ce sujet comme résolu.

Un seul gang en sortira vainqueur

Concept général

JustGang est un jeu de simulation de gang. Vous incarnez un gangster dans un des deux gangs existants et devrez réaliser nombre de méfaits pour espérer monter au grade de Parrain, créer votre propre gang, et gagner la partie (en remplissant diverses conditions).

Le jeu est découpé en "parties". Une partie se termine quand un gang l'a remporté, et redémarre en mettant tout les joueurs à "0".

Les actions possibles sont diverses : braquages, règlements de comptes, vol de voiture, vente de drogues, gestion de "filles"…

Mais JustGang étant un jeu de gang, il va falloir jouer en équipe et comptez sur les autres joueurs de votre gang pour réaliser certaines de ces actions.

Originalité

Les autres jeux de gang/mafia

Il en existe déjà de nombreux si on regarde sur google. Mais beaucoup ont été créés avec une sorte de template qui permet de créer des jeux de mafia directement. En gros, la majorité se ressemblent tous beaucoup. De plus, il y en a beaucoup de non fonctionnel ou non maintenu.

Mon jeu possède un concept inédit supplémentaire : Une map de déplacement et un système de règlement de compte intéressant !

La map et les règlements de comptes

En effet, dans JustGang, vous pouvez ouvrir une map pour voir les environs et vous déplacer toutes les X secondes. C'est en arrivant sur la case d'un élément (banques, autres joueurs) que vous pourrez effectuer des actions (frapper, braquer…).

Le concept de "règlements de compte" (= frapper un autre joueur) est plutôt inédit parce qu'il se base sur la rapidité des deux joueurs impliqués.

Exemple :

  1. Le joueur A se rend sur la case du joueur B (sur la fenêtre ayant la map)
  2. Le joueur A se rend sur la fenêtre du jeu, rafraîchit la page et clique sur "Attaquer ce joueur"
  3. Le joueur A est redirigé vers une page où il peut lancer l'opération (et pendant ce temps, d'autres personnes de son gang peuvent rejoindre l'attaque !)

MAIS, à partir du moment où le joueur A s'est rendu sur la case du joueur B, ce dernier peut aussi rafraîchir la page de jeu et cliquer sur "Attaquer ce joueur" pour frapper le joueur A AVANT. C'est cette possibilité et ce concept qui fait qu'il faut être extrêmement rapide (au clic sur les liens !), et qu'un règlement de compte important (gros joueur en face par exemple) peut vite vous mettre en état de stress :D

Pour l'originalité, on retrouve aussi un petit côté "RPG" car notre personnage possède des caractéristiques (force, vitesse et autres…) et peut avoir une arme.

Objectifs

A venir

Alors pour le moment, je dispose d'un design plutôt minimaliste et beaucoup de fonctionnalités sont déjà développées. Globalement les objectifs sont les suivants :

  • Terminer quelques fonctionnalités et corriger des bugs existants
  • Refaire une bonne partie du design (notamment: couleurs, tableaux, surtout la carte !)
  • Créer un tutoriel d'aide, proposé à la première connexion (certains concepts peuvent être dur à cerner au départ)
  • Tenter un début de partie avec quelques joueurs afin d'identifier d'éventuels bugs, d'équilibrer certains points (puissance des armes par exemple)

Avant de vous quitter, un passage sur les screenshots !

Screenshots

Rien de mieux qu'un petit album "Screenshots" (au lieu d'alourdir la page) pour illustrer tous mes propos ! https://imageshack.com/a/jQdz/1

Conclusion

N'hésitez pas à donner vos avis, voir conseils (dur d'être une quiche en design…) Si le projet vous intéresse, je peux aussi répondre aux questions et donner plus de détail ! :)

Merci pour votre lecture !

+0 -0

Bonjour à tous,

Un petit UP ! Le projet n'intéresse personne ? C'est pas très grave mais j'aurais aimé quelques avis ! (notamment design mais également ce que vous pensez du concept).

Sans être en direct sur le site, c'est vrai que c'est difficile d'imaginer quelque chose.

C'est pour ça que je vais bientôt proposer une petite bêta. Le soucis majeur c'est que pour que le jeu soit intéressant et actif, il faut plusieurs joueurs connectés en même temps (pour pouvoir faire des coups/actions intéressants comme les braquages). Si je donne l'adresse en ouvrant une Bêta comme ça, il risque d'y avoir quelques inscrits mais si les personnes ne sont pas co' en même temps, ça risque de pas donner beaucoup d'actions.

Je pensais donc faire des petites "parties" de Bêta, par exemple :

  • Tel date, de 20h a 22h
  • Le lendemain, de 20h a 22h

Etc.. Pour ramener les gens le plus possible sur ces horaires.

Qu'en pensez-vous ?

Merci encore !

+0 -0

Salut, j'ai été dans le même cas que toi (avoir besoin d'avis), donc je me permets de te donner mon opinion par rapport à ce que j'ai pu voir.

Au niveau du concept, l'idée des règlements de compte est pas mal (un ou deux screenshots pour illustrer le déroulement seraient bienvenus), par contre je trouve dommage qu'il faille rafraîchir la page à chaque fois… Ça peut désavantager le joueur avec la plus faible connexion, ou créer des problèmes si le serveur subit une trop lourde charge à un moment donné et ne peut plus servir tout le monde rapidement.

En ce qui concerne le design, la structure générale est bonne, mais ça manque selon moi clairement de couleurs, de reliefs et de profondeur. Actuellement, ça fait un peu vide. Pourquoi ne pas t'inspirer du design des sites existants sur ce thème ? De plus, la carte est, je pense, à revoir : elle n'est pas très jolie.

Peux-tu également nous parler de ce que tu utilises comme techno, comme bonnes pratiques, etc. Étant ici sur un forum d'informatique, nous pourrions également te donner des conseils à ce niveau-là ;)

Bonne journée !

Salut Theo,

Merci de ta réponse, ça fait plaisir d'avoir quelques critiques ! :)

Alors oui, le concept des règlements de compte est peut-être un peu flou sans screenshots pour le déroulement. En voici donc quelques un pour illustrer comment se passe un RC (règlements de compte) :

  • Sur la map, présence des deux joueurs, dont un s'apprête à aller sur l'autre : Map_RC
  • Une fois fait, il rafraîchit la page "Observer" pour le voir apparaître, puis clique sur "Attaquer ce joueur" : Observer RC
  • Il est redirigé dans la page "gang" où sont présents tous les coups. Ceux du même gang qui sont connectés peuvent rejoindre le coup pendant ce court laps de temps pour ajouter de la puissance. (Ici pas de screens, il y a un petit bug :D ).

Pour le "refresh" trop lourd, effectivement, c'est un soucis. Ca peut désavantager le joueur avec la plus faible connexion, j'y ai pensé, mais j'essaye de faire le jeu le plus fluide possible et le moins chargé pour qu'il soit accessible au plus grand nombre. J'ai également pris en compte le fait qu'aujourd'hui, beaucoup d'utilisateurs ont un PC et une connexion plutôt suffisante pour négliger la part des utilisateurs "faible connexion". Evidemment, je ne les écarte pas, je vais essayer de rendre tout le plus fluide et optimisé possible !

Pour cela, j'ai déjà commencé à instaurer un "Rafraichir" en Ajax pour par exemple voir si quelqu'un se déplace sur notre case ou pour rafraichir la page "Gang" pour rejoindre un coup rapidement (Ca évite de tout charger). De plus, je vais tenter d'instaurer un système de cache pour ne pas lancer des requêtes SQL inutiles (par exemple, actuellement je recharge les Stats du joueur même s'il n'y a aucun changement à chaque chargement de page…). C'est un gros point sur lequel je compte me donner à fond.

Tout à fait d'accord pour le design. La structure est exactement ce que je souhaite (le menu en haut est simple, épuré, et permet de naviguer rapidement), mais j'ai du mal avec les reliefs, couleurs etc.. Je vais cependant m'y mettre un peu plus ! La carte, c'est une hérésie graphique, je dois absolument faire quelque chose de plus joli :D

Pour les technos et outils :

  • On va passer le classique html/css plus qu'évident. Le jeu est developpé en PHP avec quelques touches de Javascript (notamment Ajax). Par contre, c'est en procédural, et sous Notepad++. Aucun framework et pas de POO pour le PHP (j'utilise par contre la classe PDO pour les requêtes préparées).

  • Je suis sur une base de données PostgreSQL. Au départ parce que je le maîtrise beaucoup mieux que MySQL (grâce au boulot) puis au final, je le trouve beaucoup plus pro' et pratique.

Pour les bonnes pratiques, je pense pas en avoir justemment :D J'essaye de m'approcher d'une architecture MVC pour mon code, ça a beaucoup d'avantages. L'ajout d'une fonctionnalité est plutôt rapide du coup (bon, après faut la penser ! ). J'ai des petits problèmes d'optimisation cependant. Le procédural m'embête car j'ai parfois beaucoup de code à la suite pour faire des "vérifications", que je devrais plutôt foutre dans des fonctions réutilisables. C'est aussi un point que je vais attaquer.

Le système de cache pour éviter de tout recharger sur une page (comme les infos du joueur) lors d'une Session est pour moi un élément principal et donc si vous avez des conseils ou des liens pratiques pour ça.. N'hésitez pas. (J'ai vu des choses comme Zend Opcache je crois, en natif sur PHP5.5 mais j'ai pas encore assez lu pour comprendre tout à fait comment ça marche).

Je vous remercie de votre attention et merci de ta réponse Théo.

A bientot !

+0 -0

Merci pour la description des règlements de compte, c'est beaucoup plus clair à présent.

En ce qui concerne les technos, tu n'utilises pas de framework par choix ou par manque de temps pour apprendre ?

Si c'est par manque de temps alors je t'encourage à continuer de développer ton site en procédural jusqu'à arriver à une v1, et ensuite, lorsqu'il sera suffisamment stable, de te pencher sur un framework afin de proposer une v2 plus facile à maintenir, qui pourra éventuellement attirer des contributeurs si tu libères le code (c'est toujours plus facile pour quelqu'un de contribuer à une structure standard, typiquement un framework, que sur du code maison).

Pour le cache, penche-toi peut-être sur APC. Utilisant beaucoup Symfony2, je ne m'en occupais pas trop vu qu'il le faisait à ma place, mais APC est une bonne base.

Toujours dans les bonnes pratiques, utilises-tu un gestionnaire de version ?

En tout cas tu as l'air motivé et la tête sur les épaules donc je ne peux que te souhaiter bon courage pour ton projet. :)

Pour les technos, j'ai déjà utilisé un framework (CakePHP) lors d'un stage et donc j'ai conscient des avantages que cela peut apporter. Cependant, j'avais pas assez de connaissances et le projet était déjà bien avancé quand je me suis dis "ça serait bien un framework et même de la POO en fait !".. :D

Au final, c'est plus par manque de temps du coup (l'impression d'être "bloqué" quand on a déjà bien commencé le boulot).

Maintenant que tu me le dis, je vais peut-être tenté de passer sous Symfony 2. Ca sera du travail mais je suis sur que ça sera extrêmement positif pour la suite, quitte à repousser ma bêta ou une sortie "officielle". Ca me permettra de passer le problème du cache si Symfony 2 le gère (tu m'apportes une bonne nouvelle là).

Pour le gestionnaire de version, je n'en utilise pas pour le moment. Je suis tellement dans l'optique de développement => tests => correction bug => développement… Que je prends pas le temps de gérer mes versions.

J'utilise également en entreprise Subversion (alalah, on apprends tellement plus en entreprise qu'en cours :D ), et je compte aussi mettre en place un gestionnaire de version dès que j'ai une version vraiment stable pour suivre les améliorations du jeu d'une manière plus "pro" et efficace.

(Je connais rien à Github mais il me semble qu'il est populaire et qu'il fait bien le boulot ? :o )

Et enfin, oui je suis plutôt motivé. Après avoir abandonné 1-2 projets pourtant avancés, j'ai appris de mes erreurs et à être le plus rationnel possibles : faire petit à petit, ne pas voir trop grand, prendre du recul sur son boulot, sur les connaissances requises etc..

+0 -0

À toi de voir, mais passer sous Symonfy2 simplement pour une histoire de cache est loin d'être le top à mon avis. De plus, la courbe d'apprentissage de Symonfy2 est assez violente, et il est parfois difficile de trouver des infos à jour étant donné que le framework évolue assez vite1. Si, en plus, tu dois refactorer tout ton code en orienté objet, pèse bien le pour et le contre de Symfony2 (j'aime beaucoup Symfony2, mais je suis pas un fanboy donc je ne pense pas que l'adapter à tout prix soit une bonne chose).

De plus, ce serait dommage de tout arrêter maintenant si tu disposes d'une bonne base de code en procédural. Selon moi tu devrais plutôt essayer de le terminer puis d'avoir des retours utilisateurs, une petite communauté. À partir de là, tu pourras évoluer vers une v2 tout en étant motivé par des gens intéressés par ton jeu, ce qui est bien mieux que de travailler "dans le vide".

(Je connais rien à Github mais il me semble qu'il est populaire et qu'il fait bien le boulot ? :o )

GitHub n'est pas un système de versionnage, mais Git tout court l'est. GitHub te permet, tout comme d'autres sites notamment BitBucket, d'avoir un hébergement pour tes dépôts. Il y a quelques différences entre Git et SVN, à toi de voir celui que tu préfères. Je ne sais pas si il existe des hébergements en ligne pour dépôts SVN (j'imagine que oui) étant donné que j'ai toujours travaillé avec Git ^^.

En espérant avoir pu t'aider ;)

Hum, attendre serait plus sage étant donné que j'approche d'une V1. Mais un framework m'aiderait peut etre a être plus rigoureux dans mes projets (en général).

Merci pour tes infos sur Git.

Je communiquerai les prochains avancements sur mon projet !

Question game design, ce n'est clairement pas optimal pour un jeu web : il te faut introduire un système de tours de jeu/délai d'action, sinon tu va forcer tes joueurs à être connectés 24/7 et à rafraîchir la page tout le temps.

Cela apporte un déséquilibre entre les joueurs capables de rester plusieurs heures sur ton jeu, et ceux qui n'ont qui vont n'y passer que quelques minutes par jour. Les jeux à attaque ne marchent pas si le joueur attaqué est incapable de se défendre lorsqu'il est absent.

Limiter le nombre d’agressions sur un joueur afin d'éviter l'acharnement (Clash of Clans), appliquer un délai entre le lancement de l'attaque et son exécution réelle pour permettre au défenseur de mettre en place des défenses ou de lancer une contre-offensive (Ogame), il y a plusieurs solutions qui ont déjà été exploitées pour pallier à ce problème, inspire-t-en !

Si tu souhaites rester sur ton idée de base parce qu'elle n'a pas encore été vue nulle-part, demande-toi pourquoi aucun jeu web populaire ne l'utilise ;)

Bonjour à toi,

Bien sur, ça serait absurde de se faire attaquer si on ne peut rien faire. C'est un jeu PHP en quelque sorte "temps réel" donc je vais pas laisser les joueurs "dans la ville" sans défense quand ils sont absents.

En gros, le principe :

  • Le joueur n'est pas connecté : il n'apparaît pas sur la carte et ne peut pas être attaqué
  • Le joueur se connecte et "entre dans la ville" : il apparaît sur la carte, peut être attaqué, peut réaliser des actions
  • Le bouton "Planque" permet de "planquer" le joueur, c'est à dire de le déconnecter et de le protéger

A partir de ce moment là, pas besoin de rester 24/7 sur le jeu pour se défendre, quand on veut quitter le jeu, il suffit de "Planquer" et on est tranquille jusqu'à la prochaine sortie en ville (connexion).

Et ça vient ensuite sur le fait "limiter le nombre d'agressions" : si un joueur va se faire attaquer (il voit un joueur à 1-2cases de lui), il peut soit décider d'aller à l'affrontement et de frapper le joueur avant (question de vitesse), soit planquer et esquiver l'affrontement => Pas forcement besoin de limiter le nombre d'agressions.

Ce que je reprends sur le "vue nulle-part", c'est le système de rapidité sur les règlements de compte (frapper un autre joueur) :

  • Le joueur A "saute" sur le joueur B et tente de l'attaquer : soit le joueur B tente de frapper le joueur A avant en rafraichissant sa page pour voir quand il arrive sur sa case, soit il planque. Dans les deux cas, faut être plutôt rapide car si le joueur A clique sur les 2 liens rapidement, il peut frapper le joueur en à peine 1-2secondes !

C'est un concept qui existait sur un jeu web précédent (qui date d'il y a 10 ans environ), et qui n'a plus été maintenu et a donc disparu. Je le reprends car je pense qu'il a du potentiel.

Mon jeu est en ligne mais pas encore assez peaufiné pour être présenté (petit bug par-ci par-là etc…)

Je passe actuellement en Objet sous Symfony 2. J'en ai pour quelques jours je pense. Dès qu'il y a de l'avancement je vous présenterai le jeu et vous vous ferez une meilleure idée du concept, plus clair et plus poussé :)

Je te remercie de ton intervention, ça fait plaisir d'avoir quand même des petites indications !

OK, je comprends mieux ^^ As-tu éventuellement pensé à utiliser une autre techno que PHP ? Parce que je ne vais pas te cacher que PHP n'est pas du tout adapté pour du temps réel et des refreshs rapides (surtout avec Symfony 2 qui malgré son système de cache a des temps de processing de requête HTTP assez long). NodeJS ou JavaEE avec utilisation de sockets seraient carrément plus adaptés pour un jeu en temps réel ;)

Reste le problème que tu as besoin de connexions simultanées pour la main-feature de ton jeu. Tu as d'autres features intéressantes qui ne nécessitent pas d'avoir plusieurs personnes connectées en même temps ?

Bah en fait, la problématique du "trop de refresh" se pose surtout quand il va y avoir de l'action. C'est à dire que s'il y a 4-5 joueurs côte à côte, ça va bien rafraichir "Observer" pour pouvoir se défendre ou planquer au bon moment. A part ça, je pense que le rafraichissement de pages sera un peu plus bas (mais existant quand même).

Du coup, dans la page "Observer" j'ai mis un lien "Rafraichir" qui lance de l'Ajax pour rafraichir qu'une partie de la page (celle qui affiche les joueurs uniquement) vu que ça sera la chose la plus refresh du jeu. Je vais également me baser sur le système de cache de Symfony 2 pour les infos qui bougent très peu, comme tu l'as évoqué (j'espère que ça passera niveau temps).

Sinon, si le joueur se retrouve seul sur le jeu et ne peut donc pas faire de braquages ou de règlements de compte, il a des actions beaucoup plus limités mais il peut par exemple chercher des "filles" sur la carte et les recruter ou il peut acheter/vendre de la drogue pour se faire de l'argent.

Je vais peut-être instaurer un système de "bots" qui représenteront des "faux joueurs" pour que le joueur seul puisse s'occuper et évoluer un peu même s'il est dans une période "creuse".

Un système de "missions" est également prévue, ce qui pourrait permettre à un joueur seul d'effectuer quand même des actions.

Quant aux technos NodeJS ou JavaEE, je n'ai aucune compétence dans celles-ci (à part Java tout simple que je maitrise un peu) et je pense que ça serait encore plus long de passer sous ces technos. Mais c'est une idée que je mets de côté, au cas ou je vois que ça commence à devenir tendu niveau temps de réponse etc.. par exemple :)

+0 -0

Même en AJAX, il s'agit de requêtes HTTP, du coup rafraîchir la vue te prendra peut-être entre 200 et 300ms (voir plus si ton serveur reçoit trop de requêtes en même temps), ce qui est trop long pour du temps réel.

J'avais travaillé sur un jeu de quizz "versus" en PHP + AJAX avec des salons de 15-20 joueurs simultanés. On a installé un memcache et même avec ça les requêtes prenaient quand même un peu de temps, du coup on a effectué énormément de travail sur la resynchronisation des timers afin d'éviter que des joueurs avec une connexion moyenne se retrouvent avec des questions en décalé (afin d'éviter la triche). Je le referais aujourd'hui, le système de salons de quizz ce serait directement du NodeJS ou du JavaEE avec des sockets, parce que PHP via des requêtes HTTP c'est juste trop lent et trop compliqué pour avoir des performances correctes sur ce genre de jeu (même de base, PHP n'est pas fait pour du jeu qui nécessite des bonnes performances).

Rien ne t'empêche de faire un prototype ou une alpha avec du PHP, ne serait-ce que pour pouvoir tester ton game design. Mais si ça fonctionne et que tu commences à avoir des joueurs, il te faudra sans doute envisager de changer de techno afin de booster les perfs ;)

Hm, je vois ! Merci de ces conseils sur les performances :)

Vu le travail abattu, je vais tenter les débuts avec le PHP effectivement, puis si ça commence à prendre du "volume", j'irais vers une de ces technos (j'entends beaucoup parler de NodeJS en ce moment.. Ca sera peut-être l'occasion d'être dans la "tendance").

Merci encore :)

PS : Vous pouvez éventuellement accéder au jeu par JustGang . L'inscription n'est pas fonctionnelle (petit bug pas réglé en prod' ^^ ) mais vous pouvez vous connectez avec l'user/mdp : nounard/nounet OU test/test

Comme je l'ai dit, le design n'est pas encore travaillé totalement (surtout la map, berk) et il peut y avoir des bugs mais ça permet de voir globalement le principe du jeu. (D'ailleurs, en prenant 2 navigateurs, on peut simuler un règlement de compte tout seul avec 2 comptes).

+0 -0

Après 3 mois, JustGang est sur le point d'ouvrir en Bêta-Test dans peu de temps !

Un designer m'a accompagné pour réaliser un design plus pro' et plus sympa. Le travail est d'ailleurs toujours en cours.

Il ne reste que quelques fonctionnalités et vérifications à développer et implémenter avant de lancer une Bêta-Test qui pourra faire découvrir aux joueurs le concept de JustGang et son potentiel ! :)

La Bêta était censé se situé vers le 28 Novembre 2014. Cependant, vu les ralentissements niveau Design et quelques occupations perso', celle-ci sera certainement repoussé à mi-décembre, pour être sûr de proposer quelque chose de propre.

Je reviens vers vous dès que j'ai des nouvelles ! A cet effet, j'éditerai le premier post de ce topic pour tout mettre à jour (infos, screenshots, principe du jeu).

N'hésitez pas à poser des questions pour découvrir JustGang :)

+1 -0

Gros UP !

Le développement ne s'est pas arrêté. (du coup la bêta c'était pas pour "dans peu de temps" :D )

Il a juste été un peu ralenti pour plusieurs raisons (à la fois personnelles, professionnelles, et à cause des cours !).

Mais ça continue, et le développement a bien avancé. De nouvelles fonctionnalités ont vu le jour et le design avance toujours aussi bien (et même encore mieux).

Le design est bientôt fini, globalement on est peut-être a 70-80% du travail de fait sur ce point.

En ce qui concerne les fonctionnalités pour la Bêta, on doit bien être a 90% étant donné que la majorité du développement restant, c'est des petits points d'ergonomie, de support (FAQ, Aide, Tutoriel) et d'optimisation (mise en place de cache et autres…).

J'espère au mieux sortir une bêta pour fin mars (enfin !!)

Je vais d'ailleurs bientôt commencer à rechercher des bêta-testeurs, si des gens sont intéressés pour tester le jeu .. :) N'hésitez pas à me MP !

Bonne soirée à vous !

A bientot sur JustGang :)

Salut ! Il y a eu de très très grosses modif's sur le design, ce que j'ai présenté en intro de ce topic n'a quasiment plus rien à voir avec le design actuel :) Mais oui, ta petite touche design m'a quand même bien inspiré ;)

Exemple de changement du design : http://www.hostingpics.net/viewer.php?id=419953screenJG.png

(il reste des choses à peaufiner, mais ça aura cette tête là).

Au niveau Technique j'utilise :

  • Framework Symfony2 donc structure MVC + utilisation de POO (PHP donc)

  • Bases de données PostgreSQL

  • Pas mal d'ajax/javascript pour la majorité des actions en jeu

  • Des petits bouts de code NodeJS pour faire du temps réel sur certains points du jeu (indicateur lorsqu'on se fait attaquer, ou chat en temps réel par exemple)

Et je crois que c'est à peu près tout :p

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte