Jeu Online

Résolu
Signaler
Messages postés
3
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
14 février 2006
-
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
-
Bonjour à tous. Je débute en visual basic je commence les winsocks. Mais il y a une chose qui m'est inconcevable. Je voudrais faire un programme jouable en ligne. Rassurez vous, je ne recherche pas le GROS JEU 3D non non et non ! Restons simple, je cherche seulement à faire bouger un point rouge sur un fond noir en deux dimensions et qu'un ami puisse faire de meme avec un point bleu. Et surtout que je puisse voir mon ami bouger son point bleu (et que lui voie mon point rouge). Donc en gros, expliquez moi comment creer une interface graphique banale en 2D (comment l'animer). Et comment faudrait-il que je m'y prenne avec Winsock ?

4 réponses

Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Salut,

En effet c'est le stade au dessus.

Dans ce cas le serveur doit gérer un tableau de sockets, en plus du socket qui sert à l'écoute.



En d'autres termes, un socket est dédié à l' écoute afin d'accepter les
nouveaux arrivants en chargeant pour eux un nouveau socket.



Supposons qu'il s' appelle sk_ecoute. Après avoir invoqué
sa méthode Listen, la seule utilité de ce socket d' écoute réside en
son évènement ConnectionRequest() qui survient lorsqu'un client distant
fait un Connect(). C'est là que le serveur charge un nouveau socket et
le lie au client avec la méthode Accept():



Private sub sk_ecoute_ConnectioRequest(ByVal RequestID as long)

NbConnections = NbConnections + 1

Load me.sk(NbConnections)

me.sk(NbConnections).accept RequestID

End Sub



NbConnections garde trace du nombre de demandes de connections -acceptées ou pas- pour que cette valeur devienne l' index du nouveau socket.



sk est un contrôle Winsock indexé. Pour l'indexer il suffit de définir sa propriété Index à 0, en mode création.



Son évènement DataArrival diffère d'un socket classique en ce sens qu'il reconnait l'index du socket qui envoie un paquet:



Private Sub sk_DataArrival(Index as integer, byval bytestotal as long)

dim s as string

sk(index).getdata s,vbstring

msgbox "client " & index & " dit: " & s

end Sub



Par conséquent, pour que le serveur envoie un message à un seul de ses clients, il n'a qu'à spécifier l' index du client:

sk(4).senddata "client 4, voici mon message"


Et pour envoyer un message à tout le monde, le serveur fait simplement une boucle sur tous les clients connectés.



Ne pas oublier de décharger un socket lorsqu' un client distant se déconnecte:

Private sub sk_Close(Index as integer)

unload sk(index)

msgbox "Client " & index & " déconnecté"

end sub






Ces explications sont relativement indépendantes du langage
et te serviront même si tu programmes des sockets avec un autre langage
de programmation, comme le C.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Ca fonctionne selon le principe de client/serveur: un des deux va faire
le serveur en se mettant en attente de connection (avec la méthode
listen). L'autre va se connecter à lui avec la méthode connect(): il
doit connaître l' IP et le port sur lequel le serveur est en écoute.

Essaye ça http://www.vbfrance.com/code.aspx?id=3731



Quand tu vas bouger ton point rouge il suffira d'envoyer les nouvelles coordonnées de ton point à l'autre. Genre

Winsock1.senddata "128|7877"

... Lui récupère cette valeur dans l' évènement winsock_dataarrival()et positionne le point rouge.

Quand tu seras à l'aise avec les sockets tu voudras le faire en UDP.
Messages postés
3
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
14 février 2006

Merci beaucoup je vais essayer ça tout de suite ;)
Messages postés
3
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
14 février 2006

Maintenant je vais demander quelque chose d'un peu plus poussé.

Admettons que je fasse par pur exemple un Pierre-Feuille-Ciseaux Online (xD)
Avec liste des connectés. Est-ce possible d'envoyer des données winsocks à un seul de ces connectés ? (Une fenetre de défi qui s'ouvre que chez un connecté en particulier) si oui, comment ? Merci d'avance.