illioren Fondateur
Nombre de messages : 154 Date d'inscription : 19/06/2006
| Sujet: y a un début à tout... on l'aura attendu un moment celui là! Ven 24 Nov - 11:31 | |
| Bon ben j'inogure ce poste non pas que j'ai enfin le niveau pour me lancer dans la prog d'une partie du jeu, loin de là. C juste pour dire que j'aborde bientot la programmation graphique 2d(enfin, fini les codes en console msdos super moche et qui servent à rien). D'ailleur ) ce sujet il me emble que je ne suis pas le plus avancé, lightsword a déja commencé la programmation 2d depuis un petit bout de temps . Tout ça pour dire que meme si je donne pas de signe de vie, j'essais d'avancer un peu... enfin je vais essayer maintenant que mon abonnement à wow est fini | |
|
illioren Fondateur
Nombre de messages : 154 Date d'inscription : 19/06/2006
| Sujet: Re: y a un début à tout... on l'aura attendu un moment celui là! Jeu 1 Fév - 13:38 | |
| Voila le premier programme gerrant le réseau ainsi que les Threads (mutiple procéssus dans un programme) réalisé avec un ami de supinfo (poupoudoum, qui a déja réalisé quelque jeu, pour les interressés : http://poupoudoum.games.free.fr les sources des jeux sont disponibles). Pour notre programme, il s'agit d'un chat en console (on est en train de travailler sur l'interface graphique en ce moment meme). Il y a 2 sources (une client et une server). ATTENTION : Ce programme ne marche qu'en raiseau local en raison des fonctions de routages des différentes box- tapper " l " à la place de l'adresse IP pour le tester en local. Autre chose, pour cloturer une phrase à envoyer, il faut mettre le symbole "<" à la fin avant d'appuyer sur entrée...Cette contrainte vien du fait que l'espace est un caractère d'achappement pour le scanf et qu'on a rien trouvé de mieu pour le moment Je pense que tout est di, bonne chance Code Client: - Code:
-
#include <SDL/SDL.h> #include <SDL/SDL_net.h> #include <SDL/SDL_thread.h> #include <stdlib.h> #include <stdio.h> #include <windows.h> #include <string.h>
void NETOYAGE(char *chaine,int longeur); //Netoye une chaine apres reception: enleve les caractères 'ignobles'
void INITCHAINE(char *chaine,int longeur); //remplit une chaine de zeros
int RECEPTION(void *data);
TCPsocket Socket; IPaddress Hote; char Input[1500];//chaine saisie par l'utilisateur char Output[1500];//chaine recue char MonPseudo[128];//Pseudo char SonPseudo[128];//pseudo du serveur char IpHote[256];//chaine de saisie de l'hote char buf[256];//chaine tampon
int main(int argc,char** argv) { SDL_Thread *mon_thread;
//initialisation de la SDL SDL_Init(SDL_INIT_VIDEO); SDLNet_Init();
//on initalise les chaines INITCHAINE(Input,1500); INITCHAINE(Output,1500); INITCHAINE(buf,255);
printf("Entrez l'ip du serveur a joindre:"); scanf("%s",IpHote);
if (IpHote[0]=='a' && IpHote[1]=='\0') sprintf(IpHote,"illioren-pc");
if (IpHote[0]=='l' && IpHote[1]=='\0') sprintf(IpHote,"localhost");
//Tentative de connection SDLNet_ResolveHost(&Hote,IpHote,3000); Socket = SDLNet_TCP_Open(&Hote);
// Maintenant Socket contient une socket valide que l'on peut utiliser
if(Socket==NULL)//connection impossible printf("\n\nImpossible de se connecter a %s\n\n\n",IpHote);
else { SDLNet_TCP_Recv(Socket,(void*)buf,128); printf ("message du serveur: %s",buf); //connection reussie printf ("\n\nConnecte a %s\nEn Attente du Pseudo...\n",IpHote); SDLNet_TCP_Recv(Socket,(void*)SonPseudo,128); MessageBeep(1); NETOYAGE(SonPseudo,120); printf ("Pseudo du serveur: %s\nEntrez votre pseudo:",SonPseudo); scanf("%s",MonPseudo); SDLNet_TCP_Send(Socket,(void*)MonPseudo,strlen(MonPseudo)); printf ("\nDebut de la conversation entre %s et %s:\n________________________________________________\n", SonPseudo,MonPseudo);
//messages de connections MessageBeep(1); Sleep(200); MessageBeep(1); Sleep(200);
//creation du Thread de reception mon_thread = SDL_CreateThread(RECEPTION, NULL);
MessageBeep(1); Sleep(200);
do {
INITCHAINE(Input,strlen(Input)); INITCHAINE(Output,strlen(Output));
scanf("%s",&Input);//saisie du premier mot while(Input[strlen(Input)-1]!='<')//si le mot ne se fini pas par <, la phrase n'est pas finie { scanf("%s",&buf);//on saisi le deuxieme mot sprintf(Input,"%s %s",Input,buf);//on le concatène } Input[strlen(Input)-1]=0;//on enlève le < //on envoie SDLNet_TCP_Send(Socket,(void*)Input,strlen(Input)); printf("\r%s dit:\t %s",MonPseudo,Input); MessageBeep(1);
}while(strcmp(Input,"quit")!=0); }
SDL_KillThread(mon_thread);
SDLNet_Quit(); SDL_Quit();
system("pause");
return 0; }
void NETOYAGE(char *chaine,int longeur) { int var;
for(var=0;var<longeur;var++) { if (chaine[var]=='_') chaine[var]=' '; if((int)chaine[var]==-52) { chaine[var]=0; return; } } }
void INITCHAINE(char *chaine,int longeur) { int var; for (var=0;var<longeur;var++) chaine[var]=0; }
int RECEPTION(void *data) { while (1) { SDLNet_TCP_Recv(Socket,(void*)Output,1500); NETOYAGE(Output,1500); printf("\n%s dit:\t %s\n",SonPseudo,Output); MessageBeep(1); Sleep(100); } }
Code Server - Code:
-
#include <SDL/SDL.h> #include <SDL/SDL_net.h> #include <SDL/SDL_thread.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <windows.h>
int selection=1; NETOYAGE(char *chaine,int longeur); INITCHAINE(char *chaine,int longeur); int RECEPTION(void *data);
TCPsocket serveur,connectee; IPaddress adresse; char Output[1500], Input[1500]; int Outputval, Inputval; char MonPseudo[128];//Pseudo char SonPseudo[128];//pseudo du client char buf[128];//chaine temporaire
int main(int argc, char *argv[]) { SDL_Thread *mon_thread;
//initialisation de SDL SDL_Init(SDL_INIT_VIDEO); SDLNet_Init(); printf (" -- initialisation terminee \n"); INITCHAINE(Input,1500); INITCHAINE(Output,1500);
SDLNet_ResolveHost(&adresse,NULL,3000); serveur = SDLNet_TCP_Open(&adresse);
Input[0]=0; Output[0]=0; connectee = NULL; printf (" -- le server ecoute \n"); while(connectee == NULL) { connectee = SDLNet_TCP_Accept(serveur);
} MessageBeep(1); printf (" -- server connecte \n \n"); //connection reussie sprintf(buf,"Bienvenue dans cette session de chat!!"); SDLNet_TCP_Send(connectee,(void*)buf,strlen(buf)); printf ("Entrez votre pseudo:"); scanf("%s",MonPseudo); SDLNet_TCP_Send(connectee,(void*)MonPseudo,strlen(MonPseudo)); printf("\nEn Attente du Pseudo...\n"); SDLNet_TCP_Recv(connectee,(void*)SonPseudo,128); NETOYAGE(SonPseudo,120); printf ("Pseudo du client: %s",SonPseudo); MessageBeep(1); printf ("\nDebut de la conversation entre %s et %s:\n________________________________________________\n", SonPseudo,MonPseudo);
//creation du Thread de reception mon_thread = SDL_CreateThread(RECEPTION, NULL);
while (1) { INITCHAINE(Input,strlen(Input)); scanf("%s",&Input);//saisie du premier mot while(Input[strlen(Input)-1]!='<')//si le mot ne se fini pas par <, la phrase n'est pas finie { scanf("%s",&buf);//on saisi le deuxieme mot sprintf(Input,"%s %s",Input,buf);//on le concatène } Input[strlen(Input)-1]=0;//on enlève le < Inputval=strlen (Input); SDLNet_TCP_Send(connectee,(void*)Input,Inputval); printf("%s dit:\t %s",MonPseudo,Input); }
SDLNet_TCP_Close(connectee);
SDL_KillThread(mon_thread); SDLNet_Quit(); SDL_Quit(); return EXIT_SUCCESS; }
NETOYAGE(char *chaine,int longeur) { int var;
for(var=0;var<longeur;var++) { if((int)chaine[var]==-52) { chaine[var]=0; return; } }
} INITCHAINE(char *chaine,int longeur) { int var; for (var=0;var<longeur;var++) chaine[var]=0; }
int RECEPTION(void *data) { while (1) { INITCHAINE(Output,strlen(Output)); SDLNet_TCP_Recv(connectee,(void*)Output,1500); Sleep(100); MessageBeep(1); NETOYAGE(Output,1500); printf ("\n%s dit :\t %s \n",SonPseudo,Output); } } Voilou, comme vous le voyez, il faut avoir la SDL, la SDL_thread, la SDL_net Si vous voulez un lien vers les .c , les .exe et les .dll : pour les sources : source serveur: http://illioren.ifrance.com/programmation/raiseau/essais/sources/SGIM/mainserveur.csource client: http://illioren.ifrance.com/programmation/raiseau/essais/sources/SGIM/mainclient.cpppour les .dll (qui sont à copier dans le dossier de l'exécutable) Le dll de la SDL: http://illioren.ifrance.com/programmation/raiseau/essais/dll/SGIM/SDL.dllLe dll de la SDL_net : http://illioren.ifrance.com/programmation/raiseau/essais/dll/SGIM/SDL_net.dllPour les .exe le client: http://illioren.ifrance.com/programmation/raiseau/essais/exe/SGIM/SGIMclient.exele serveur: http://illioren.ifrance.com/programmation/raiseau/essais/exe/SGIM/SGIMserveur.exe
Dernière édition par le Ven 2 Fév - 21:16, édité 2 fois | |
|
Kyoshiro Fondateur
Nombre de messages : 96 Age : 34 Date d'inscription : 19/06/2006
| Sujet: Re: y a un début à tout... on l'aura attendu un moment celui là! Jeu 1 Fév - 13:58 | |
| comme vous le voyez .... c'est voulu comme blague ? sinon merci pour ce système, j'attend de voir votre version béta ^^ essayez de faire un système qui te connecte automatiquement a un salon qui es en fonction du sous réseau ça serait pratique si tu met toutes les personnes d'une meme zone géographique dans un ss réseau, ça te ferais un chan de région je sais pas si j'ai été très clair
enfin déja transformer le messenger en chat | |
|
illioren Fondateur
Nombre de messages : 154 Date d'inscription : 19/06/2006
| Sujet: Re: y a un début à tout... on l'aura attendu un moment celui là! Jeu 1 Fév - 14:17 | |
| Mouai... et en français sa donne quoi? lol non je dec Ben écoute, sa peu etre pas mal mais galère à réaliser.... On véra sa après l'interface graphique je pense :p ( créer un sous raiseau virtuel...go à stormwind ) | |
|
Kyoshiro Fondateur
Nombre de messages : 96 Age : 34 Date d'inscription : 19/06/2006
| Sujet: Re: y a un début à tout... on l'aura attendu un moment celui là! Jeu 1 Fév - 14:25 | |
| c'est des pistes d'amélioration sinon tu peux inclure le code html pour gras italique & co tu peux aussi essayer de faire une modification de pseudo dynamique a nimporte quel moment grace a une commande (plus facile) virer le < a la fin de chaque ligne
plein d'améliorations en fait | |
|
Progs
Nombre de messages : 9 Date d'inscription : 23/06/2007
| Sujet: Re: y a un début à tout... on l'aura attendu un moment celui là! Dim 24 Juin - 9:54 | |
| C'est con de regrouper les personnes par sous réseaux. Au final ça ferait plus un regroupement par FAI plus qu'un regroupement par région. Sinon, je pense que plus que de s'occuper de mettre un formatage HTML des messages, il faudrait plutôt s'orienter pour le moment sur le jeu lui même . En cours de jeu je pense qu'il n'est d'aucune utilité de mettre des couleurs dans ses messages. | |
|
illioren Fondateur
Nombre de messages : 154 Date d'inscription : 19/06/2006
| Sujet: Re: y a un début à tout... on l'aura attendu un moment celui là! Dim 24 Juin - 14:10 | |
| of cource... Sa n'était qu'un exemple de mes début en raiseau ( <-- jeune codeur néophite devant sa SDLnet). Je pense pas que le code sera utilisé dans le jeu (ou plutot j'espère qu'il ne le sera pas)... Sinon du texte en couleur c'est super utile pour différencier les information de combat, des messages privés, des messages de groupe, des messages générals , etc... | |
|
Contenu sponsorisé
| Sujet: Re: y a un début à tout... on l'aura attendu un moment celui là! | |
| |
|