connect
 

Description:
Blog à quatre mains, mais sans sous-entendus sexuels.
Projets:

lache-tes.com

blog inconnu

page temporaire

Blog déjà pris

http://alibanana.dev-fr.org
http://anarx.dev-fr.org
http://arialia.dev-fr.org
http://Beda.dev-fr.org
http://bennyrebirth.dev-fr.org
http://Boustifire.dev-fr.org
http://Campanile.dev-fr.org
http://cartonslug.dev-fr.org
http://cid2mizard.dev-fr.org
http://CL_Son_Antre.dev-fr.org
http://Cobain.dev-fr.org
http://costello.dev-fr.org
http://Cotsz.dev-fr.org
http://cyaniss.dev-fr.org
http://darkmath.dev-fr.org
http://datoh.dev-fr.org
http://Decjo.dev-fr.org
http://DevCortes48.dev-fr.org
http://doud.dev-fr.org
http://Dr-Artanis.dev-fr.org
http://Emeric0101.dev-fr.org
http://erdnal.dev-fr.org
http://evilspoon.dev-fr.org
http://freacks.dev-fr.org
http://frozenjazz.dev-fr.org
http://FuryFunnyTeam.dev-fr.org
http://gedeon34.dev-fr.org
http://geekshadow.dev-fr.org
http://iko.dev-fr.org
http://jeuxvideodylan.dev-fr.org
http://komasami.dev-fr.org
http://kram.dev-fr.org
http://kukulcan.dev-fr.org
http://Maltek.dev-fr.org
http://mastertop101.dev-fr.org
http://Maxime.dev-fr.org
http://mini-jeux.dev-fr.org
http://minishlink.dev-fr.org
http://mollusk.dev-fr.org
http://Montspy.dev-fr.org
http://mony.dev-fr.org
http://mouseonmars.dev-fr.org
http://Nameless.dev-fr.org
http://newcoleco.dev-fr.org
http://noriassaura.dev-fr.org
http://noxneo.dev-fr.org
http://nytrix.dev-fr.org
http://odin.dev-fr.org
http://Orion-Jones.dev-fr.org
http://pitt.dev-fr.org
http://pouer.dev-fr.org
http://Poulpicorp.dev-fr.org
http://PuzzleManiak.dev-fr.org
http://Rainbow.dev-fr.org
http://Refix.dev-fr.org
http://Reppa.dev-fr.org
http://risike.dev-fr.org
http://Samote.dev-fr.org
http://schyzophrenic.dev-fr.org
http://sephirothff7.dev-fr.org
http://skin-prod.dev-fr.org
http://smealum.dev-fr.org
http://space1.dev-fr.org
http://SpixShadow.dev-fr.org
http://starcom.dev-fr.org
http://thag.dev-fr.org
http://trabitboy.dev-fr.org
http://tuxiko.dev-fr.org
http://Unkwar.dev-fr.org
http://virtuapeanuts.dev-fr.org
http://vloz.dev-fr.org
http://xblaster.dev-fr.org
http://xFlasH.dev-fr.org
http://yus.dev-fr.org
http://zbob.dev-fr.org

Thématiques:

Dev
DS
Mendeleiev
Autre
C++
Gfx
WIFI
Chaoui!
CNFDS
php
NightStalker

[+]

Abonnement aux flux
Flux rss
Virtua Peanuts : Blog de Dev

08 avr
2008

Attention à la mémoire

Si comme moi vous aimez bien utiliser les bibliothèques et méthodes éprouvées par des équipes de développeurs talentueux et acharnés, lorsque vous faites du C++, j'imagine que vous utilisez les classes de la STL. Et vous aurez raison !

sauf ...

sur DS, où j'utilisais avec un certain plaisir les beaux vector du C++. Et je me suis rendu compte que mes sprites faisaient un peu n'importe quoi quand j'en avais un poil trop (et pas tant que ca .finalement...). Résultat, des couleurs bizarre, du noir beaucoup ...

Pas mal de temps après pour isoler le bug, je me suis rendu compte que tout allait bien en utilisant un bon vieux tableau C-Style en remplacement d'un beau vector C++-Style.

Surement la faute à la mémoire, forcément, une telle classe avec toutes ses fonctionnalités qui nous facilitent la vie occupe plus de place en mémoire qu'un bon vieux tableau C.

Conclusion :
La taille de la mémoire sur DS étant limitée, on est parfois obligé de laisser de coté le fruit des avancées technologiques en matière de C++.
A un moment, j'ai essayé d'utiliser boost sur un projet DS. Je crois que ca risque d'etre un peu trop gourmand :)

A+

06 mai
2007

Blog C++ / Cli ! Ne partez pas ! :)

Nico est trop modeste pour en parler lui même, surtout quand son PC rend l'âme ...

Néanmoins, il a créé un blog dédié au c++ / cli qu'il anime en même temps que le forum c++ chez http://www.developpez.com ...

Son blog, c'est ici : http://blog.developpez.com/index.php?blog=140

Djé

24 avr
2007

Les palettes

Bonjour,


aujourd'hui je vais vour parler un peu des palettes et de palib, en tous cas, de la partie code. La partie graphique, ca sera MasterDjé, car moi, j'y connais rien

Si vous avez suivi le day 4 de palib http://www.palib.info/wikifr/doku.php?id=day4 , vous aurez appris qu'on peut utiliser 16 palettes par écran en mode 256 couleurs. Ces palettes sont numérotées de 0 à 15 et sont fonction d'un écran.

Vous l'avez sans doute compris, mon but ici est de simplifier l'utilisation de ces numéros pour un sprite donné.
Dans le cadre d'un homebrew, il devient compliqué de savoir quel numéro de palette correspond à quel numéro de sprite, et si je veux en créer un autre ? ma palette est-elle déjà chargée ? et quel est son numéro ?
Bref, tout cela, je veux pas m'en préoccuper.

J'ai donc créé une classe, dont l'essentiel des méthodes est static. Mon but est d'utiliser une chaine de caractères pour identifier une palette et de m'affranchir de son chargement (avec PA_LoadSpritePal). Je veux aussi que cette classe m'attribue un numéro de palette automatiquement et sache faire la corrélation synallagmatique entre son numéro et son nom.


Voici donc la classe GestionnairePalette. Elle utilise plusieurs vectors STL static pour connaitre les éléments internes qui la composent.

Voilà comment créer une nouvelle palette :

 

Je charge donc la palette Palette1_Pal (elle est de type const unsigned short *, comme produit en résultat pagfx) pour l'écran du bas, et je lui donne le nom "PAL_PIONS".

Sprite * pionRouge = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_PIONS" ), pion_rouge_Sprite, OBJ_SIZE_64X64);

Maintenant, il me reste à créer mon sprite et pour l'associer à ma palette préalablement chargée, je vais utiliser la méthode getPaletteFromName :

 

GestionnairePalette::add(ECRAN_DU_BAS, palette_pions_Pal,"PAL_PIONS");

Voila, simple non ?

Pour l'instant, la classe est très light, elle possède une méthode supplémentaire qui décharge toutes les palettes : removeAll(). J'envisage, dès que j'en aurai besoin, de permettre de décharger une palette par son nom. Et si je vois d'autres choses à rajouter, je le ferais.

Je vous propose l'exemple suivant, qui va charger 2 sprites (des pions) qui possèdent la meme palette et un autre sprite (un logo) qui utilise une palette différente, puis je les affiche à l'écran. Voila comment faire :

 // on ajoute la palette des pions
 /*Important : PAGFX ajoute le suffixe _Pal au noms de fichiers de palette... méfiance :) */
 GestionnairePalette::add(ECRAN_DU_BAS, palette_pions_Pal,"PAL_PIONS");

 // on crée les deux sprites
 /*Important : PAGFX ajoute le suffixe _Sprite au noms de fichiers de sprites... méfiance :) */
 Sprite * pionRouge = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_PIONS" ), pion_rouge_Sprite, OBJ_SIZE_64X64);
 Sprite * pionVert = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_PIONS" ), pion_vert_Sprite, OBJ_SIZE_64X64);

 // on ajoute la palette du logo
 GestionnairePalette::add(ECRAN_DU_BAS, palette_logo_Pal,"PAL_LOGO");

 // on crée le sprite du logo
 Sprite * spriteLogo = new Sprite(ECRAN_DU_BAS, GestionnairePalette::getPaletteFromName(ECRAN_DU_BAS, "PAL_LOGO" ), logo_vp_Sprite, OBJ_SIZE_64X64);


 while(1) // Infinite loops
 {
  pionRouge->afficheSprite(10, 10);
  pionVert->afficheSprite(80, 10);
  spriteLogo->afficheSprite(40, 100);

  PA_CheckLid();
  PA_WaitForVBL();
 }

 

Vous pourrez retrouver l'exemple complet en pièces jointes : DemoPalettes.rar

Bonne prog,

Nico

 

 


11 avr
2007

Chaoui, beta pour maintenant

Bonsoir,
comme j'ai pas trop de temps en ce moment à accorder à la DS et que la béta a une tête honnorable, la voici !

Donc, ca fonctionne bien sur avec le serveur dispo dans les posts précédents.

On configure le serveur grace au fichier app.config (mettez le port sur 80 ou alors, il faudra changer le client, lui n'est pas configurable et va aller attaquer le port 80)
Oubliez pas d'ouvrir le port 80 sur les firewalls, surtout si vous l'attaquez ailleurs que chez vous.
Les autres params ne sont pas à toucher, sauf si vous changez le code du .nds

Alors, le client est tout simple
le splash, puis l'écran de config
rentrer le pseudo et l'ip du serveur, appuyez sur retour et hop ... ca devrait se connecter
Masterdjé y arrive, donc vous devriez y arriver.

après, y a pu qu'a écrire, et ca communique avec les gens présents
sachant que les clients ne savent pas encore qui sont les gens présents, sauf s'ils les voient se connecter
Donc, essayez à plusieurs, ou essayez avec le client .net
ou alors, choppez moi sur msn pour faire un test ensemble
ou demandez à masterdjé

enfin bref,

le mieux est de le lancer chez soi ou de l'heberger chez qqun ... molluskkkkk ?

chaoui.rar

Voila, les commentaires sont les bienvenus

Si vous voulez des explications sur le code, sur l'architecture, ou quoi que ce soit, hésitez pas.

A+
Nico

07 avr
2007

[Wifi] Serveur et Client C++/CLI

Bonjour à tous,

un ptit mot pour dire que j'ai rebossé un peu sur le serveur en .net et donc que je releasais la nouvelle version du serveur et un client en .net aussi pour les tests.

Ils sont disponibles ici : http://virtuapeanuts.free.fr/c-s.rar

Sachant que le serveur est paramétrable pas fichier xml (app.config). J'ai bossé aussi sur la synchro des threads pour éviter l'accès multiples aux ressources, avec les mutex de .net.

Voilà pour les changements.

Je bosse toujours sur le client DS, qui s'améliore de jour en jour, mais j'ai peu de temps pour le finaliser à fond, et il me reste encore à intégrer un lib xml pour la DS.

Pour ceux qui veulent démarrer le wifi sur la DS, je mets un bout de code quand même pour voir ... grosso modo le principe de la reception

void receiveTrame()
{
    char buf[4096];
    memset(buf, 0, 4096);
    int ret = recv(sock, buf, 4096,0);
    if (ret >0)
    {
        std::string s = buf;
        if (s != "PING")
            traiteTrame(s);
    }
}

Pour l'envoi :

char chaine[4096];
sprintf(chaine, "<message emetteur=\"%s\" date=\"\">%s</message>", PA_UserInfo.Name, currentString.c_str());
int ret = send(sock, chaine, strlen(chaine), 0);


Et pour l'initialisation :

    PA_OutputSimpleText(1,0,0,"Connexion ...");
    PA_InitWifi();
    PA_ConnectWifiWFC();

    PA_InitSocket(&sock, "192.168.1.100" , 80, PA_NONBLOCKING_TCP); // changer l'ip pour mettre celle du serveur
    char chaine[4096];
    sprintf(chaine, "<init idunique=\"%s\">initVP</init>", PA_UserInfo.Name);
    int ret = send(sock, chaine, strlen(chaine), 0);
    if (ret ==0)
    {
        PA_OutputSimpleText(1,0,1,"erreur ! client incompatible avec le serveur ");
        return;
    }


Je regarderai aussi la remarque de costello sur la reception d'une trame supérieure à 536 octets, car je n'en ai pas eu l'occasion encore...

Bonne prog,

Nico

ps : mollusk, il faudrait un système de balise code ... :)

05 avr
2007

[Wifi] Code source du serveur

oyez oyez
oyourd'hui est un grand oyur ... je release la première version du serveur que l'on utilise dans notre homebrew de chat (chaoui) qui est en cours de réalisation.

La partie du client DS fonctionne, mais est encore très laide, donc elle nécessite encore un peu de temps pour être montrable.

Par contre, la partie serveur est opérationnelle pour une V1 (entendez par là que le minimum fonctionne, mais qu'y a encore des choses à faire).
Donc je vous la met à dispo pour que vous regardiez et puissiez faire vos premiers pas dans le dev réseau pour la DS.

Alors, grosso modo le principe est très simple et très classique :
un thread qui attend les connexions de sockets et pour chaque connexion un thread qui écoute les paquets. Et à chaque reception de paquet, un thread qui traite le paquet. En fonction du paquet, on regarde s'il est à broadcaster, et si c'est le cas, on le broadcaste aux clients présents...

Donc, ca c'est le principe général.

J'ai écrit le serveur en C++/CLI, donc j'utilise la capacité du framework dotnet à gérer les sockets et les threads simplement.
J'ai essayé de rendre le serveur assez générique, et il sera paramétrable à distance dans l'avenir.
 Après, pour le traitement des messages, c'est dans la classe traitement buffer.
Soit on la modifie pour l'adapter à son besoin, soit il pourrait etre interessant de faire une classe abstraite à dériver. Vous pouvez me donner vos suggestions avec plaisir.

Les messages echangés ont pour but d'etre en xml, c'est facile avec le framework .net ; pour la DS, pour l'instant je fais un parsing à la bourrin, mais j'essaierai d'intégrer tinyxml par exemple.

Ensuite, je compte rajouter un encodage en base64 pour les échanges, et à la rigueur, pourquoi pas une compression, mais bon, faut pas que ca devienne ingérable sur la DS.

Si vous avez des remarques, des questions ; si vous voulez plus d'explications, n'hésitez pas à me demander.

Comme je le disais, j'ai fait un ptit client .nds qui tourne mais qui est moche, je vais l'améliorer et vous le proposer prochainement.
Ce qui faut savoir, c'est qu'il utilise les fonctions de palib pour initialiser le wifi, et les sockets ensuite (non bloquant pour la réception, car je pense pas qu'il y ait de thread sur la DS). En tous cas, avec masterdjé, on parle par DS interposées ... YEAH !!

Sources du serveur

Bonne prog,

Nico

ps : j'arrive pas à uploader, mollusk ???
pps : il est pas dit que le serveur est exempt de tout bug, si vous en constatez, merci de me le signaler

05 avr
2007

[Wifi] Choix d'un type d'encodage, et news ...

Bonsoir,

le serveur s'améliore, se consolide.
jusqu'à ce soir, je bossais dessus exclusivement en C++/CLI, avec un client C++/CLI aussi. Là, je m'attaque à la réalisation concrète d'un client NDS.
Et je rencontre les premières difficultés ...

Déjà, j'étais parti sur un encoding en unicode sur le serveur, et après plusieurs essai de wchar_t sur la DS, je me retrouve à arriver à faire communiquer dans un sens en UTF32 mais pas dans l'autre.
Ce qui fait que pour l'instant, j'ai décidé de revenir à un encoding ASCII, et tant pis pour les accents, de toutes facons, notre clavier est pas au point pour les accents, et je vous parle pas de la font personnalisée ... (pas taper djé ).

J'ai mis au point un système de ping pour voir si le client était toujours là et s'il n'y avait pas eu de déconnexion bourrine ; ca marchait plutot bien avec les clients .Net, mais là, avec la DS, dès fois, ca met du temps à comprendre que la DS n'est plus connectée ....

J'ai pas l'impression que ce soit un problème de code, peut-etre que la DS a un TTL élevé. De plus amples tests me le diront peut-etre ultérieurement.

Le serveur est bientot au point, et le client DS communique plutot bien, il lui manque les finitions, notamment l'affichage (fais-je arriver à faire un semblant de scroll ?).

Il y a encore un cas que j'ai pas traité, c'est l'arrivée conjointe de deux (ou plusieurs) trames successives. Elles se concatènent lorsque les envois sont rapprochés ; c'est pas grand chose à faire, mais bon, faut le faire .

Voila pour les news, bientot les sources ...

Nico

02 avr
2007

Wifi

Alors,

juste un ptit mot pour dire qu'on commence le dev wifi et que ca passe plutot pas mal.

J'entrerai un peu plus dans les détails prochainement, mais si vous avez des commentaires, n'hésitez pas.

J'ai écrit un ptit serveur de socket en C++/CLI (pourquoi ? parce que faut se faire plaisir un peu , et parce que je préfère les sockets de dotnet à winsock2). Donc pour l'instant, je ne m'interesse pas aux performances, si y a besoin, je verrais plus tard.

J'ai écrit aussi un ptit client PC pour tester et un ptit client pour la DS, qui se connecte avec les sockets.

J'ai encore quelques erreurs de compilation en "C++", mais en "C", ca passe bien.
Pour l'instant c'est très restreint, notamment au niveau de l'affichage, mais on arrive à s'envoyer des phrases avec masterdjé, à nos deux adresses différentes respectives.

Le serveur est hebergé chez moi pour l'instant.

Donc, voilà ce qu'il vous attends dans les prochains jours / semaines :
- des explications sur le serveur
- des explications sur la connexion depuis la DS
- un homebrew de "tchat"

A+

Nico

29 mar
2007

Les sprites

Bonsoir,

dans ce billet je vais vous parler un peu des sprites de palib et de ce que j'en ai fait pour me simplifier l'utilisation.

Si vous avez suivi le day 4 du tutoriel sur palib.info www.palib.info/wikifr/doku.php, vous aurez appris qu'on peut afficher 128 sprites par écran, ces sprites étant numérotés de 0 à 127 (donc 256 en tout).
Ce tuto nous parle de palette de 16 couleurs, de 256, etc ... pour finir par nous expliquer que la plupart du temps, on allait utiliser des sprites de 256 couleurs.
Et utiliser un certain nombre de tailles, 8, 16, 32, 64, etc ...

Finalement, on apprend qu'une création de sprite, se fait par :
PA_CreateSprite(0, // Screen
0, // Sprite number
(void*)vaisseau_Sprite, // Sprite name
OBJ_SIZE_32X32, // Sprite size
1, // 256 color mode
0, // Sprite palette number
50, 50); // X and Y position on the screen
On voit donc entre autres qu'il faut un numéro de sprite et un numéro de palette, qu'on aura préalablement chargé avec
PA_LoadSpritePal
Pour essayer de se simplifier tout ca, et surtout pour ne pas avoir à se souvenir des numéros de sprite, j'ai voulu laisser à un objet le soin de s'en charger pour moi. Le but étant d'encapsuler certaines fonctionnalités de sprites de palib dans un objet.

J'ai donc créé une classe Sprite :
on aurait à lui passer l'écran sur lequel on veut afficher le sprite, le numéro de palette (chargé au préalable avec loadpal (on verra plus tard que cette solution ne me plait pas non plus, et on l'encapsulera)), le pointeur vers le tableau qui représente le sprite, et sa taille.
Ce qui fait, qu'on a pas à se soucier du mode de couleur (256 par défaut), des positions X et Y (pour l'instant, elles seront déportées dans une méthode d'affichage) et surtout, du numéro de sprite.

Ainsi, on ne manipulera plus un "numéro", mais bien un objet, sur lequel on pourra appeler des méthodes.

La gestion du numéro est automatique, et pour cela, on utilise un vecteur statique d'entier pour indiquer si un numéro de sprite est déjà pris ou pas, en fonction de son écran.

Ce qui fait que maintenant, je pourrais utiliser mes sprites ainsi :

Sprite *sPion = new Sprite(ECRAN_DU_HAUT, numeroPalette, 
vaisseau_Sprite, OBJ_SIZE_32X32);
sPion->afficheSprite(50, 50); 

Il y a quelques méthodes supplémentaires dans la classe, comme masquerSprite, getWidth, getHeight, setPriority, etc ... c'est très incomplet encore, mais c'est largement étoffable, et ca le sera suivant les besoins que je découvrirai dans nos futurs développements.
Par exemple, pour gérer le déplacement du sprite avec le stylet...

Pour plus de renseignements, vous pouvez aller voir dans le code du puissance 4, les fichiers sprite.cpp et sprite.h

Pour plus d'explications sur le code de la classe, laissez un commentaire...

(ps : n'oubliez pas bien sur la destruction de l'objet avec delete, je n'ai pas encore regardé si on pouvait utiliser des pointeurs intelligents avec palib, mais pour l'instant, on le fait à l'ancienne)

Voila pour cette fois

Dans le prochain billet, je vous parlerai de la classe de gestion des palettes, car un numéro encore et toujours, est suceptible d'engendrer des erreurs, et puis ... je ne suis pas un numéro !!!!

Bonne prog,

Nico

<< | 0 | 1 | 2 | 3 | 4 | 5 | 6 | >>
lache tes com dev fr scrutator irc bot
based on LT version 0.3.2 - dev-fr.org 0.4 install