PDA

Voir la version complète : [NDS][Tutorial] Connection DS<->DS


benjamin310395
04/06/2008, 16h55
Réaliser une connection entre 2 DS

/!\ Il vous faudra la liblobby téléchargeable ici (http://palib.info/downloads/Beta/external%20libs/external_liblobby-svn-2007-12-03.7z) /!\

Ce tutoriel vous apprendra à utiliser le wifi entre 2 DS sans la CWF Nintendo.

Avant le programme, mettez ce code :

#include "MessageQueue.h"
#include "802.11.h"
#include "lobby.h"

I) Initialisation du wifi

Avant le main, mettez ce code pour que le programme mette à jour la liblobby :

void customVBL(void)
{
IPC_RcvCompleteCheck();
LOBBY_Update();
}

Mettez les lignes habituelles :

int main(int argc, char ** argv)
{
PA_Init(); // Initialisation de PAlib
PA_InitVBL(); // Initialisation de VBL

Mettez après ce code pour initialiser la liblobby :

PA_VBLFunctionInit(customVBL);
if (!IPC_Init())
{
PA_OutputText(0, 1, 3, "Impossible de charger IPC_Init() !");
return 1;
}
IPC_SetChannelCallback(0, &LWIFI_IPC_Callback);
PA_OutputText(0, 1, 2, "LOBBY_Init() ...");
LOBBY_Init(); // Initialisation de la liblobby


Mettez ce code pour que tout ce que vous envoyez atteint le destinataire :

LOBBY_SetStreamHandler(0x0001, &Receive);

Mettez ensuite ce code et vous pourrez commencer à programmer :

int selected = 0;
PA_OutputText(0, 1, 3, "Entrée dans la boucle sans fin ...");
while (1)
{
//VOTRE PROGRAMME
}


II) Les joueurs connectés et Sélection du destinataire

Pour savoir combien de joueurs sont actuellement connectés, mettez ce programme :

int max = LOBBY_GetNumberOfKnownUsers(); // max = nombre de joueurs connectés
PA_OutputText(0, 1, 22, "Joueurs : %d ", max);


Pour choisir la destination des messages, mettez ce code :

/ / Laisser le choix de la destination
if (Pad.Newpress.Down) // Si la personne a appuyé sur Bas,
selected++; //augmenter la sélection de 1
if (Pad.Newpress.Up) // Si la personne a appuyé sur Haut,
selected--; //diminué la sélection de 1
if (max > 0)
selected %= max ;

III) Envoyer des données aux autres joueurs

Pour envoyer des données aux autres joeurs, mettez ce code :

LOBBY_SendToUser (LOBBY_GetUserByID (sélectionné), 0x0001, (unsigned char *) "ÉCRIVEZ ICI LE MESSAGE A ENVOYER ", 17);

Par exemple :


if (Pad.Newpress.A) // Si la personne a appuyé sur le bouton A
{
LOBBY_SendToUser(LOBBY_GetUserByID(selected),0x000 1,(unsigned char *)"Bouton [A] appuyé.",17) ; // Envoie le message "Bouton [A] appuyé." au destinataire choisi dans le II)
}


Pour afficher les connections sur l'écran, mettez ce code :

/ / Ecrire toutes les connexions à l'écran
int i; // Initialisé i
for (i = 0; i < max; i++)
{
LPLOBBY_USER user = LOBBY_GetUserByID(i) ;
if (i == selected) // Si le joueur choisi est là
{
PA_OutputText(0, 1, 5+i, "->%s (%s) ", LOBBY_GetUserName(user), LOBBY_IsTimedOut(user) ? "TIMEOUT" : "OK"); // afficher "->",le nom du joueur et le temps d'expiration
}
else
{
PA_OutputText(0, 1, 5+i, " %s (%s) ", LOBBY_GetUserName(user), LOBBY_IsTimedOut(user) ? "TIMEOUT" : "OK");// même chose mais sans la flèche.
}
}

IV) Recevoir les données des autres joueurs

mettez entre "main" et "void customVBL(void)" ce code pour afficher les données reçus :

void Receive(unsigned char *data, int length, LPLOBBY_USER from)
{
PA_OutputText(0, 1, 20, "Reçu : %s ", (char*)data);
}

Et voila, c'est la fin du tutoriel.

J'espère que vous comprendrez mieux, grâce à lui, comment se connecter entre 2 DS. Si vous avez des remarques/suggestions, n'hésitez pas :lol: !

benjamin310395
04/06/2008, 17h08
J'ai beaucoup repris l'exemple de la liblobby ...

Dr.Vince
04/06/2008, 17h16
merci pour ce tutoriel

si j'ai bien compris, la liblobby scan le nombre de DS pouvant se connecter et leur affecte un numéro, et c'est avec ce numéro qu'on établit la communication vers une DS donnée ??

benjamin310395
04/06/2008, 17h19
oui, c'est ça.
La 1ere DS à s'être connecté recoit le numéro 1; la deuxième, le numéro 2 et ainsi de suite.

Cobain
04/06/2008, 17h22
super ton tuto :)

benjamin310395
04/06/2008, 17h24
merci, je pensais qu'il n'était pas assez expliqué mais je pense que ça ira ...

Kram
05/06/2008, 20h35
Cool ! :bravo: Il est bien ton tuto, mais il est un peu mélangé vers la fin...

Ce que tu as mis dans "IV) Recevoir les données des autres joueurs" doit normalement se trouver dans "II) Les joueurs connectés et Sélection du destinataire", et dans le IV), tu dois mettre
void Receive(unsigned char *data, int length, LPLOBBY_USER from)
{
PA_OutputText(0, 1, 20, "Received: %s ", (char*)data);
}

qui doit être placé entre "main" et "void customVBL(void)".

benjamin310395
06/06/2008, 17h08
c'est fait ! Merci de l'avoir remarqué :p.

Kram
07/06/2008, 00h51
De rien ^^.
C'est super de faire un tuto pour cette lib qui n'est pas simple a prendre en main.


PS : _kram_ = kram

Dr.Vince
07/06/2008, 01h26
PS : _kram_ = kram

corrigé ;)

benjamin310395
07/06/2008, 13h10
je suis aussi en train de programme un jeu fait avec ce tuto ... (ici (http://www.playeradvance.org/forum/showthread.php?t=25315&highlight=pierre))