Quel language choisir pour un jeux "in-browser" ?

Résolu
Signaler
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
-
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
-
Bonjour tout le monde,

Je viens ici pour chercher de l'aide concernant un petit dilemme.

Pour résumer, je souhaite me lancer dans un MMO. Donc oui je sais, c'est ultra dur, on n'a aucune reconnaissance de la part des joueurs, on paye de sa poche pour financer le serveur, toussa.

Le dilemme viens du design du jeu : étant programmeur Assembleur/C, j'étais partit sur un classique jeux avec un client à installer, mais en fouillant sur les forum dans les sujets types "Quel serait votre MMO idéal ?" il est apparut que les jeux utilisant passant par un navigateur (RuneScape et Dofus en tête) obtenais un succès supérieur à la technique "classique" ... du notamment au fait qu'on peut ainsi jouer au boulot, ou tester le jeu directement depuis google au lieu de se taper un long chargement et une installation hasardeuse. Sans compter que passer par le navigateur permet de zapper pas mal de problèmes de compatibilité.

J'envisage donc de suivre cette méthode, mais je suis perdu sur les langages à utiliser. Java semble le choix "évidemment", mais en fouillant google je lis régulièrement que "Java c'est mort" et que Flash se débrouille de mieux en mieux.

Bref, la question finale est :
Pour un petit MMO amateur en 2D, avec un gameplay type Zelda, quel serait le langage le plus adapté pour jouer via le navigateur internet ?

Je rappel encore une fois que je suis parfaitement au courant de la difficulté démentielle de ce genre de projet, mais c'est un simple passe temps. Et en plus j'aime bien apprendre de nouveau language informatique.

Merci de votre attention.

12 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

C'est pour cà que je te disais qu'une architecture web ne suffit plus dans mon premier post : l'utilisation du protocole HTTP sera bien trop lourd pour avoir une communication efficace entre les clients et le serveur. Il vaut mieux passer par des sockets entre les clients et le serveur (et donc tu as le choix de la technologie à utiliser : C, ASM, ou autre).

Un serveur Java J2EE te permettrait de gagner beaucoup de temps dans ton développement mais tu y perds en optimisation.

L'idéal, c'est d'optimiser au maximum la taille des messages échangés entre le serveur et le client, d'alléger au maximum les traîtements niveau serveur pour chaque requête envoyée par les clients, d'utiliser des threads (voir même des processus) pour paralléliser les traîtements niveau serveur. Bref, tu beaucoup de boulot, mais c'était ce que tu pensais dès que tu as posé ta question ;)

La programmation d'un jeu n'est pas chose facile, ca demande énormément de connaissances dans de très nombreux domaines. Encore plus lorsqu'il s'agit d'un jeu en réseau temps réel !
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

Tout dépend du type d'interraction que tu veux avoir entre les joueurs : est-ce que c'est du temps réel ou du tour par tour ?

Pour du tour par tour, pas besoin de faire très compliqué : tu codes niveau serveur (donc PHP, Java, .NET, ruby, python ou autre), tu fait des pages web "classiques" (HTML + CSS + javascript).

Pour du temps réel, la technique web ne suffit plus, surtout s'il y a beaucoup de joueurs ! A ce moment là, il faut opter pour du client/Serveur : un client lourd (applet Java, programme JavaFX, flash ou silverlight) qui communique avec le serveur (là encore pour le serveur tu as le choix, même en C si tu veux).

Mais dis nous déjà si tu veux un jeu temps réel ou pas, combien de joueurs estimes-tu avoir, et quelles sortes d'interraction entre les joueurs il y aura.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

Pour le nombre de joueur, entre 10 et ... 1000 (on a le droit de rêver).

Et niveau interaction ... du combat en temps réel avec déplacement au clavier en lancement de sorts/autres en même temps. Comme Alundra ou Diablo ou les anciennes versions GameBoy de Zelda pour ceux qui connaissent. Donc quelque chose de très dynamique qui sera hélas assez peu tolérant au niveau latence.

Je pensais opter pour les applet Java, mais je préférerais avoir confirmation que c'est optimum pour ce genre de chose avant de me lancer dans l'apprentissage d'un nouveau langage.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

Je ne vois pas en quoi Java serait en voie d'extinction : une applet n'a pas à rougir face à un objet flash intégré au browser.

N'ayant jamais fait de flash, je ne connais pas les avantages de flash par rapport à java ou silverlight (niveau performance, niveau facilité d'utilisation pour la communication Client/Server, etc.).

Mais regarde du côté de JavaFX qui te facilitera sûrement ton apprentissage de Java : il permet de faire des animations/effets et des interfaces en pseudo xml. C'est la nouvelle techno de sun/oracle qui permet de faire un programme java et le lancer comme applet ou comme application lourde.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

D'accord. Je vais donc probablement me lancer dans la technologie Java.
Merci pour la confirmation.

Et c'est partit pour une séance de "Hello World" \o/
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

Bon, je me suis plongé dans les tutoriaux et autres, mais il y a un truc qui m'inquiète.

Le client, prévu en Java, n'a pas besoin d'être top rapide (simple affichage 2D), donc pas de problème. En revanche le serveur va devoir gérer des tonnes de choses aussi rapidement que possible pour éviter la latence : je comptais donc le faire en ASM/C pour un maximum de performance.

Hors apparemment, il est possible (et "classique") de faire le client et le serveur en Java (applet vs servlet), mais impossible d'utiliser des sockets via applet ... et donc de faire une communications entre le client en Java situé sur le navigateur et le serveur optimisé en ASM.

Quelqu'un aurait un avis éclairé ?

Parce que faire le programme serveur en Java (donc pas top niveau performance par rapport à l'ASM), je le sens très mal :-/
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

Arf.

Bon, vu que le coté "le client est dans le navigateur Web au lieu d'être une installation classique" était un bonus dans le projet, je pense que je vais laisser tomber l'idée.

Ça ne vaut pas le coup si je me retrouve avec une latence incompressible trop élevé. Surtout que le projet prévois une IA très complexe, donc très gourmande pour le serveur.

Ou alors faut que je revoie mon organisation pour réduire drastiquement la charge ... ils ont bien réussit pour RuneScape, dois y avoir moyen de faire pareil.

Aaaah, les dilemmes du game design
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

Je te dis pas que c'est impossible, il te faut juste la même approche que les jeux "lourds" : c'est au serveur de faire tout le boulot, le client ne fait qu'afficher les images du jeu. Que le jeu soit dans le navigateur ou pas ne change pas grand chose si tu optes pour une applet java (ca doit changer pour flash qui, je pense, ne permet pas la programmation par socket).

Après, tu peux rendre les clients un peu moins bête, et les faire communiquer entre eux directement (en synchronisant de temps en temps avec le serveur tout de même).

Par exemple, un combat entre 2 joueurs :
Le serveur n'a pas besoin de savoir que le joueur1 fait une parade pendant que le joueur2 donne un coup, ces informations ne concernent que les clients (pour afficher le graphisme correspondant). Tout ce qui intéresse le joueur, c'est le nombre de point de vie perdu par l'un ou l'autre des joueurs.

Il y a beaucoup de traitements qui peuvent être fait par les clients. C'est sûrement comme cà qu'ils font pour les jeux massivement multi-joueurs, style WoW.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

ces informations ne concernent que les clients

Sauf que j'ai proscrit ce genre d'astuces de mon architecture, pour des raisons de lutte contre la triche. J'ai tester pas mal de MMO, et j'ai constaté que la moindre décision laissé à la seule gestion du client était immédiatement exploité, même sur des petits jeux amateurs. Et ça demande des efforts considérable pour lutter contre les tricheurs ensuite. Ça donne une mauvaise ambiance au final que je souhaite éviter, quitte à m'arracher un peu plus les cheveux sur l'optimisation du serveur en contrepartie.

Que le jeu soit dans le navigateur ou pas ne change pas grand chose si tu optes pour une applet java (ca doit changer pour flash qui, je pense, ne permet pas la programmation par socket).


Hum, j'ai dut mal comprendre alors. En fait mon inquiétude c'était : est-il vraiment possible d'utiliser les sockets via des applets ?
Ou plus exactement : y a t-il un problème à faire communiquer un client en Java "in-browser" avec un serveur dans un autre langage, via les sockets ?

J'ai lut sur certains forums que les droits des applet était extrêmement restreint pour des raisons de sécurité (pas d'écriture / modification de fichier du disque, mais ça n'est pas un problème) et que cela en était au point de ne pas pouvoir ouvrir une socket depuis un applet Java "in-browser".
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

Tu peux faire quasiment tout ce qu'il est possible de faire avec un programme java, sauf qu'il faut que ton applet soit signée (une confirmation est affichée à l'utilisateur afin qu'il confirme s'il autorise à exécuter l'applet), mais une fois l'applet signée, et que l'utilisateur valide l'exécution, pas de problème, tu peux ouvrir des sockets et faire communiquer l'applet avec un serveur (que ce soit un serveur J2EE, ou un serveur développé dans un tout autre langage : ASM ou C par exemple).

Par contre, si l'applet n'est pas signée, là d'accord, tu ne peux pas faire grand chose, pour des raisons évidentes de sécurité.

Concernant les traîtements niveau client, c'est à toi de voir, mais si tu ne fais pas de communication entre les clients (et donc, que tout passe par le serveur), tu risques encombrer le serveur très rapidement.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

une fois l'applet signée, et que l'utilisateur valide l'exécution, pas de problème, tu peux ouvrir des sockets et faire communiquer l'applet avec un serveur


Ça me rassure. Bon, je retourne au tutoriaux sur le Java alors.

Merci ;-)
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011

Me revoilà, avec de nouvelles questions sur Java.

Je suis arrivé à la question de la "méthode" à utiliser pour l'affichage.
Grosso Modo, il y apparemment le choix entre Swing, qui semble souffrir de mauvaises performances dues à une gestion foireuse des évènements, et JOGL qui tourne très bien mais à apparemment des problèmes de compatibilité (plusieurs démos complexes que j'ai récupéré ne tournent pas sur tout les PC que j'ai pus testé).

Du coup, j'hésite sur lequel apprendre (chacune étant assez complexe, j'aimerai autant ne pas perdre de temps à apprendre les deux juste pour tester) :
_ Swing peut-il fournir de bonnes performances si on s'en sert correctement ? (Apparement on peut feinter avec les fonctions type invokeLater(), mais ça ressemble à du bricolage).
_ OpenGL version Java peut il systématiquement tourner si on ne fait que de la 2D ?
_ Y a-t-il des API plus efficaces que ces 2 là, tous en restant aussi portables que le Java lui-même ?

Pour information, le but est d'afficher un jeu en 2.5D, c'est à dire en 2D avec effet de profondeur (donc plein de modification de la taille des sprites suivant l'éloignement par rapport à la caméra)... le tout animé. Pour donner une idée, ce serait le même genre de chose que Diablo, mais avec la possibilité de changer la hauteur de la caméra pour zoomer / dézoomer.

Merci de votre aide ;-)