Question

Je suis intéressé par le montage de mon premier jeu en ligne utilisant Flash en tant que client et l'écriture d'une application back-end en C ++ dans laquelle l'état actuel du jeu est conservé.

J’ai fait beaucoup de jeux en C ++ avant d’utiliser SDL, SFML, Allegro, etc., mais je n’ai jamais réussi à utiliser les bibliothèques réseau. Je cherchais simplement une direction utile pour laquelle les bibliothèques conviennent le mieux aux serveurs de jeux où le serveur actuel n’a pas d’affichage graphique (ou n’a pas besoin mais pourrait avoir). En toute honnêteté, je pense que la réponse sera any et une fois que je maîtriserai les sockets, cela deviendra un jeu d’envoi de données ... mais il ne peut s’empêcher de demander d’abord. / p>

J’ai très peu d’expérience en flash ou en as3, mais comme pour pouvoir accéder au jeu par le biais d’un navigateur, l’apprentissage en flash sera évidemment un obstacle que je devrai surmonter mais mon intérêt principal est de nouveau. des conseils sur les bibliothèques ou les sources, ou des tutoriels utiles pour envoyer / recevoir des données via des sockets ou selon la méthode qui convient le mieux.

J'ai lu des articles sur les arguments entre TCP / UDP, je ne veux donc pas déclencher une guerre comme celle-ci ici; juste des conseils utiles généraux s'il vous plaît - je cherche seulement quelque chose de simple pour me mettre en marche :-p

En passant, je choisis le C ++ parce que les joueurs sont en réalité des robots dotés de machines virtuelles miniatures et que tout fonctionnera sur le serveur. Par conséquent, le nombre de joueurs augmentant, il sera nécessaire d'émuler chaque vm :-p

Mise à jour:

Le monde du jeu est censé être en temps réel, mais l’interaction du joueur n’est pas obligée. La base du jeu est que vous programmez de petits robots qui interagissent dans un monde persistant et qui ont des objectifs et des défis à relever quotidiennement / hebdomadairement pour gagner des points.

Je pensais que la mise en mémoire tampon des données d'affichage serait possible car le joueur n'a pas besoin de visuel en temps réel car il n'a aucun contrôle direct sur ses robots. Le serveur met en mémoire tampon environ 10 secondes de données pour chaque connexion, puis l'envoie en une fois. Ainsi, pendant la lecture des données sur le client, le serveur est en train de mettre en mémoire tampon davantage.

Les interactions générales que le joueur aura avec le serveur chargeront un nouveau code et obtiendront des statistiques. Il peut également y avoir d'autres commandes uniques permettant de déplacer votre robot ou de le réinitialiser à une position de départ. Toute commande à distance est effectuée via un canal de communication et est donc retardée par le tampon. Cela pourrait facilement s’expliquer par le fait que le monde persistant se situe quelque part comme Mars (la planète) et que le signal met un certain temps à faire la navette.

Je prévoyais un "laboratoire". dans lequel vous pouvez configurer les robots et les tester en temps réel sur le client, cela n’a rien à voir avec le monde actuel du jeu et ne devrait donc pas nécessiter de réseau - bien que je n’ai pas envie de créer une machine virtuelle dans les deux langues: (

Je suis tout à fait à l'aise en C ++ et j'ai déjà quelques prototypes fonctionnels du monde persistant en place. Je suis juste un novice en matière de réseautage, il est donc préférable de demander conseil au préalable.

Était-ce utile?

La solution

Bien qu'il soit principalement écrit pour le langage C, il n'en reste pas moins génial pour le C ++:
Guide de Beej sur networ programming.k
Il couvre toutes les bases et comporte une section sur les modifications à apporter à Win32 :)
De plus, il me semble rappeler que Flash avait besoin de mettre fin à zéro-octets sur chaque paquet, donc au lieu d'envoyer (socket, szData, strlen (szData), 0); utilisez send (socket, szData, strlen (szData) +1,0); envoyer une chaîne:)

Autres conseils

Utilisez boost :: asio pour la programmation réseau

Lorsque vous utilisez les classes Socket ou XMLSocket de Flash, assurez-vous de disposer d'un fichier de stratégie de sécurité sur votre serveur. sinon, vous ne pourrez pas ouvrir de socket. Consultez cette SO question pour plus d'informations.

Je ne sais pas si votre jeu nécessite des communications en temps réel ou si, si vous demandez au serveur de charger, de sauvegarder et d'exécuter des jeux, cela suffit.

Si vous préférez, utilisez une sorte de "middleware". couche pour gérer les parties en réseau. Flash est heureux de créer des documents XML et de les envoyer à un serveur via HTTP, puis de traiter les réponses XML reçues. il a beaucoup de choses bien intégrées pour gérer toutes ces choses très facilement.

Peut-être pourriez-vous avoir un serveur en c #, php ou java en fonction de votre plate-forme qui s'exécute sur un serveur web et gère les requêtes et les réponses, puis transmet les requêtes à votre serveur c ++ qui pourraient s'exécuter indépendamment sur un serveur via une file d'attente de messages ou base de données ou connexion locale.

Il serait peut-être plus facile, tant du côté flash que du côté serveur, de gérer les problèmes de réseau et de communication de cette manière, car c ++ n'est pas le langage le plus simple pour faire de la mise en réseau, même avec une bibliothèque.

Je ne sais pas si cela répond à vos exigences, que ce soit pour votre jeu ou votre plate-forme, je le fais simplement comme suggestion

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top