Pages: 1 [2] 3 4 ... 6   Bas de page
Imprimer
Auteur Fil de discussion: [NDS] Skinz Sudoku !  (Lu 17244 fois)
0 Membres et 1 Invité sur ce fil de discussion.
MasterDje Hors ligne
Diet Coke Addict
Global Moderator
*****
Messages: 3242


Voir le profil WWW
« Réponse #15 : 28 Avril 2007, 21:43:43 »

+1 pour les secrets ! rhoo en plus j'allais te le demander, si tu pouvais faire ce genre de revelation...

la reconnaissance est vraiment efficace, ça m'epate ! je connais un certain kawashima qui devrait s'en inspirer... , j'ai pas un QI de moule, mais j'ecris comme un pied... Merci Mollusk  Wink

Avec tout ça, elle a plus aucune raison de lacher la DS....   Smiley mais  Angry aussi !!  Tongue
Journalisée

Mollusk Hors ligne
PAlib Guru et
Administrateur
*****
Messages: 3480


Voir le profil WWW
Ne vous posez pas de questions, codez !

« Réponse #16 : 28 Avril 2007, 21:48:15 »

Pour la reconnaissance, ce homebrew n'a rien que n'importe qui ne pourrait faire. C'est le système reconnaissance de PAlib utilisé de la façon la plus optimal : plusieurs chaines par lettre (numéros ici plutôt), pour reconnaitre un maximum de personnes Azn

En ce qui concerne les autres jeux avec une reconnaissance sur DS, à ma connaissance ca repose sur une optique radicalement différente : ca te laisse tracer, puis ca tente de reconnaitre ce que tu as mis... J'aime pas trop, parce que c'est plus susceptible de faire des erreurs que mon système évite, puisque moi je suis le tracé au lieu de le regarder après-coup. Mais leur système a l'avantage de reconnaitre directement un peu toutes les écritures (quelle que soit la façon dont tu écris, à la fin un 6 ressemble à un 6...), alors que moi si tu dessines le chiffres à l'envers ca le reconnaitra à 0% (cf ton 8...). Mais du coup je peux rajouter les chaines pour corriger ça quand on me le signale Azn
Journalisée

Arialia Hors ligne
Elite Member
**
Messages: 831


Voir le profil
« Réponse #17 : 29 Avril 2007, 00:04:25 »


Est-ce que ça intéresse quelqu'un si je fais un gros post avec les différentes techniques/astuces dont je me sers dans ce homebrew, ou alors ce serait une perte de temps ? Azn
Oui Oui Wink
Journalisée

Mon blog de dev   - -  Mon tutoriel sur la libfat -- DSPhoto
Un bon programmeur est fainéant : il déteste refaire la même chose, il fait donc des fonctions Wink

Mais qui m'a mis des nounours roses ? Le rose c'est pour les homo et les gamines , beurk, mais ça va bien aux fleurs Smiley
Et aux jeux de Genevois Wink
Mollusk Hors ligne
PAlib Guru et
Administrateur
*****
Messages: 3480


Voir le profil WWW
Ne vous posez pas de questions, codez !

« Réponse #18 : 29 Avril 2007, 01:04:09 »

Bon, je vais commencer par recoller ce que j'ai déjà marqué à droite à gauche, j'éditerai pour faire plus joli plus tard Azn


Génération de grilles :

Pour la génération des grilles, la méthode actuelle est simple, efficace, mais très imparfaite :

Tu prends une grille côtée 'facile' dans un journal. Tu te fais des fonctions qui inversent des lignes, colonnes, ou des numéros (genre si tu remplaces tous les 2 par des 8 et les 8 par des 2, c'est pas la même grille mais ca revient au même, etc...). Enfin en gros, tu peux modifier la grille de façon simple pour donner l'illusion d'une nouvelle grille alors qu'en réalité c'est la même (IE, ce sera la même 'logique' pour la résoudre).

J'ai codé un solveur de sudoku, et j'ai fait des essais rapides. Les grilles faciles il les finit en 3 à 5 passes, les grilles moyennes en 6 à 8, etc... Donc à partir de là, je peux coter une grille... Pour quoi faire ? Et bien en fait j'ai une grille plein (avec les chiffres dans l'ordre, ca fait bizarre Azn), j'applique mon algo de permutations dessus (et personne ne sera capable de voir que ca vient d'une grille triée), puis je retire des chiffres au hasard (et de façon symétrique). A chaque retrait, je test avec le solveur. Si ca passe de facile à moyen, je sais que la grille d'avant était la grille la plus juste à mettre en tant que facile, j'ai donc trouvé ma grille Azn

A noter que je prépare un long post (peut-être pour demain du coup) où j'explique ce que je fais (pour tous les aspects du jeu) Wink


Le solveur de grille :

De mémoire, au démarrage ca mets pour chaque grille que tous les chiffres sont possibles. A chaque chiffre ajouté (quand on remplit la grille au début...), ça scan la ligne, colonne, et le 'bloc' de ce chiffre pour enlever cette possibilité aux autres emplacements... Si on n'a plus qu'une possibilité, on sait que c'est ce chiffre (logique...).
Ca suffit pour remplir les grilles très faciles, pour les faciles ca peut échouer avant la fin Azn

Du coup, si pendant une boucle ca ne trouve aucun chiffre à rajouter, je passe dans la seconde routine : même genre mais en plus lent. Ca regarde pour chaque possibilité de l'emplacement si dans la ligne/colonne/bloc la possibilité y est aussi. Si elle n'y est pas, on sait donc que seul cet emplacement peut avoir ce chiffre, il faut donc lui mettre... Et de là on retourne dans la première routine, bien plus rapide Azn
Ceci permet de réussir les grilles faciles, moyennes, et difficiles que je lui ai fait manger (tirées du 20 minutes).

Pour aller plus loin, il faudra que je rajoute des vérifications encore plus raffinées, et/ou une gestion du plottage aléatoire, mais pour l'instant je n'en ai pas encore besoin et j'ai la flemme Azn

A terme, quand le solveur marchera pour toutes les grilles, il sera disponible au démarrage pour avoir une application 'solveur de sudoku' sous le coude avec soi Azn.


Affichage du bas

L'écran du bas set constitué de plusieurs couches. Comme fond, un 16bitBg tout simple, sur lequel j'affiche la grille tirée telle qu'elle de la skin... Quand on clique sur une case pour zoomerçapplique une simple division à la position du stylet pour savoir quelle case c'est. Si la case n'est pas une préremplie, on passe en mode écriture...
Pour se faire, je fais un zoom purement software, je recopie les pixels 8 par 8 autour du centre de la case, rien de particulier, et j'utilise ensuite PA_16bitDraw pour écrire dessus Azn

En ce qui concerne les numéros, ils sont affichés sous la forme de 3DSprites/textures. Les sprites 0 à 81 sont pour les gros numéros, et 100 à 100+9*81 pour les petits numéros (9 par case, 81 cases...). Le numéro fait 32x32 à la base, est dézoomé à genre 16x16 pour faire la vue globale, et zoomé à 112x112 pour la vue rapprochée...

Afin d'économiser en mémoire, toutes les textures sont chargées au moment du chargement de la skin, et ensuite je ne fais qu'utiliser des PA_3DCreateSpriteFromTex...


Affichage du haut

Pas de grande différence... Le plus gros est sur un fond 16bit, chargé tel quel depuis la skin... Les numéros de la grille sont en sprites 16bit, tous les Gfx étant préchargés à la décompression de la skin, puis PA_Create16bitSpriteFromGfx relancé à chaque mise à jour de la grille... Numérotés de 1 à 90, le sprite 0 étant pris pour faire le petit curseur rouge qui indique la position dans la grille Azn

Pour afficher le temps qui passe et être sur de rien rater, j'ai une fonction qui tourne automatiquement pendant le VBL :
Code:
void VBLFunc(void){ 
[...]
time++;
UpdateTimer();
}   

void UpdateTimer(void){
PA_SetSpriteGfx(1, SPRITE_TIMER, timer_Gfx[(time/36000)%6]);
PA_SetSpriteGfx(1, SPRITE_TIMER+1, timer_Gfx[(time/3600)%10]);
PA_SetSpriteGfx(1, SPRITE_TIMER+2, timer_Gfx[(time/600)%6]);
PA_SetSpriteGfx(1, SPRITE_TIMER+3, timer_Gfx[(time/60)%10]);    
}

Voilà, les Gfx sont créés au début, puis je ne fais que mettre à jour le numéro à utiliser, ce qui est rapide. Notez que ce n'est pas optimal, dans l'idéal il ne faut mettre à jour que si les chiffres ont changés, là je refais les divisions et modulos pour rien 59 frames sur 60... Azn
Et pour que ça tourne tout seul, il suffit de mettre "PA_VBLFunctionInit(VBLFunc);" vers le début du code Azn


Reconnaissance de caractères

Je me base intégralement sur le code de PAlib... (le truc Graffiti). Au démarrage, je charge des chaines persos à reconnaitre pour les chiffres :
Code:
void InitNumbers(void){
   
   PA_UsePAGraffiti(0); // Do not use the provided Graffiti shapes...
PA_RecoAddShape('1', "999999999999999");
PA_RecoAddShape('1', "FFF;99999999999");
PA_RecoAddShape('1', "GFGHJ7899999988");
PA_RecoAddShape('1', "EEED97777777779");
PA_RecoAddShape('1', "DDDCDDDCCC=9999");
PA_RecoAddShape('2', "@?755436@AAAAAA");
PA_RecoAddShape('2', "E@=;;998632;AAA");
[...]
PA_RecoAddShape('9', "36;AFH;9::98632");
PA_RecoAddShape('9', "357;@DGGF999999");
PA_RecoAddShape('9', "0258<?CFH999998");

Alors, pourquoi avoir plusieurs chaines pour un même chiffre ? Et bien on peut avoir plusieurs façon d'écrire un même chiffre, donc il faut pour chacune de ces façon avoir le tracé correspondant... Plus on a de chaines, plus la probabilité de bien reconnaitre est élevée Smiley Ca permet en plus de rajouter des chiffres non reconnus en se faisant donner une simple chaine de 15 caractères... Simple et efficace Azn

La méthode utilisée par PAlib est différente de celle que l'on voit le plus souvent dans le jeux officiels. En général, le 'plus simple' est de laisser dessiner, puis de reconnaitre la forme dessinée. Dans le cas de PAlib, j'ai opté pour la lecture des entrées du stylet, puis l'extrapolation de 16 points, ce qui donne 15 segments de même longueurs avec un angle variable (d'où les 15 caratères dans la chaine, pour chaque angle...). A partir de là, on compare chaque dessin fait (= une chaine) à toutes les autres chaines en mémoire, et on garde celle qui est la plus proche... Ca marche plutôt bien, même si la faille principale est qu'on ne peut pas reconnaitre une chaine non rentrée... Si on dessine en partant de la fin, ça ne marchera pas.

Afin de savoir si on a dessiné un petit ou un grand chiffre, je me base sur les infos gardées en mémoire par le système de reconnaissance, en l'occurrence la taille :
Code:
if(PA_RecoInfo.maxY-PA_RecoInfo.minY > 48)...


Les skins

Le format des skins est visible dans le premier topic... C'est simple, on un fichier png, il est ajouté à la compilation, et la libpng se charge de le décompresser dans un buffer... Après l'avoir copié dans le buffer, je peux afficher la partie de l'écran du haut directement, pareil pour celui du bas.
Pour les textures, c'est un poil plus compliqué... Il faut déjà remplacer le magenta par du transparent, avec pare exemple une simple boucle for et
Code:
if (img[n] == PA_RGB(31, 0, 31)) img[n] = 0;
Une fois cela réglé, il faut découper correctement. J'ai donc des tableaux pour chaque texture, que l'on va remplir. Voici un exemple :
Code:
u16 *timerpng = (u16*)(png+32+256*(192+96))

   for(i = 0; i < 10; i++){
      startx = 16*i;
   for(y = 0; y < 32; y++){
      for(x = 0; x < 16; x++){
         timer[i][x+(y<<4)] = timerpng[startx + x + (y<<8)];       
      }
}    
   timer_Gfx[i] = PA_CreateGfx(1, (void*)timer[i], OBJ_SIZE_16X32, 2);
}

Techniquement, on pourrait en fait utiliser un petit tableau au lieu d'un grand qui peut accueillir les 10 numéros (0 à 9), mais bon, j'ai préféré gardé pour si jamais je veux faire des animations ou modifier les numéros, etc...

Voilà, c'est tout simple du coup Azn Je charge mes Gfx/Tex, et après dans mon code je ne fais pas une seule fois PA_DeleteSprite, puisque je peux me permettre de recharger directement par-dessus sans soucis (je n'utilise que des CreateFromGfx...).


Voilà, j'ai fait un survol rapide, si vous voulez en savoir plus, avoir des détails, etc, n'hésitez pas Azn

A noter que pour les boutons de l'écran du bas, j'ai fait une technique de Sioux : dans ma fonction VBL je regarde si on les touches. Si oui, je change l'image pour afficher la version 'appuyée', et je passe Pad.Held.Start (ou autre) à 1... Comme ça, pour valider on appuyer sur Start ou toucher le Sprite, et dans mon code je n'ai qu'à tester Pad.Newpress.Start... Pour effacer, j'ai calqué sur Pad.Held.B Smiley


Le spash screen Mollusk/SpriteAttack...

Bon allez, je vais rajouter la petite description sur le splash screen...

L'effet de transition de base est tout simple, c'est l'effet PA_BgTrans en diagonale avec comme type TRANS_CROSS Azn Rien de particulier donc, n'oubliez pas que ce vous bouffre un fond quand même...

Pour la spirale du logo 'Mollusk', de l'écran du haut, j'ai hésité sur plusieurs façon de faire Azn. En fait, j'avais fait l'écran du bas en premier, donc je voulais absolument faire partir le logo, une fois affiché, par scrolling horizontal... Et on doit avoir derrière un fond 8bit qui affiche le titre du jeu, donc ca réserve déjà le fond 8bit et ainsi une partie de la mémoire Azn. Donc, si je résume, je voulais avoir un fond tout simple (EasyBg pour les PAistes) avec le logo "Mollusk Games" pour le faire scroller...
En fait, je me suis dit que ce serait du gachi de ne pas me servir du fond 8bit de dessous. Donc, au lancement de la rom, je charge sur le fond 8bit l'image du logo SANS la spirale (juste le carré bleu), et je le mets devant le fond avec le logo plein... Puis, une fois le premier effet de transition passé, il est temps de faire dessiner la spirale. Je suis un flemmard, je ne supporte donc pas de devoir rentrer les points à changer 'à la main', il me fallait donc une méthode automatique Azn.
Et bien c'est simple ! Je me suis inspiré d'une routine que j'ai faite pour une app de dessin, afin de remplir une zone d'une même couleur... Sauf que là, j'allais changer les pixels non pas de la même couleur que celle du départ, mais dont la couleur est différente entre le fond 8bit (Mollusk sans spirale) et le fond normal (Mollusk avec spirale). J'ai donc un tableau qui répertorie les pixels à changer, vide au démarrage. On part du centre de l'écran (qui est le centre de la spirale en fait), et on ajoute ce pixel au tableau... Pour chaque pixel ajouté, on le passe à la bonne couleur (PA_EasyBgGetPixel, pour lire la couleur du fond plein Smiley   ), et on regarde les 4 pixels autour (haut/bas/gauche/droite). Pour chacun de ces pixels, s'il n'a pas la même couleur sur le fond 8bit et sur le fond normal, on l'ajoute à la liste, etc... Et on fout ca en boucle ! Et là, oh magie, la spirale commence au centre, et le changement des pixels se fait de proche en proche Langue Voilà qui permet d'avoir un code d'à peine quelques lignes pour faire apparaitre la spirale Langue A noter que cela marcherait donc pour d'autres formes, du moment qu'il y a une forme continue... (genre une courbe, une écriture avec lettres attachées, etc...)
Ensuite (ralala), une fois que le fond 8bit correspond enfin au fond normal, on fait quoi ? Et bien il parait évident que l'un des 2 est devenu superflu... On peut donc repasser le fond 8bit derrière l'autre fond, et afficher dessus (en furtif/caché pour l'instant, donc), l'écran de titre du jeu ! C'est très rapide à charger (à partir d'un gif par exemple), l'utilisateur ne voit rien Langue

Ensuite, pour faire scroller hors de l'écran j'ai choisi de faire lire les tiles et de les recopier 1 cran plus loin, plutôt que d'utiliser un vrai scroll, ca me permet de rester avec un fond de 256 pixels de large et c'était plus pratique pour l'écran du bas...


Place à l'écran du bas, c'est plus simple, ne vous en faites pas Azn
L'astuce pour ce dernier réside dans le fait que l'image que l'on voit une fois le premier effet de transition terminé n'est pas une seule image, mais un fond tout simple avec le logo SpriteAttack qui est en fait un sprite... Et un sprite, on eut en faire plein de choses, comme le zoomer et le rendre plus ou moins transparent Azn En combinant les 2, on a le sprite qui devient gros et disparait, tout simplement.
Pour faire virer cet écran, c'est ensuite le même principe qu'en haut. Le fond étant en tiles, je peux avoir derrière un fond 8bit sur lequel je charge l'écran titre/menu de mon jeu pendant qu'il est caché... Ensuite, pour faire scroller, j'ai choisi, comme dit avant, d'utiliser les tiles... Je fais bouger les tiles du bas vers la gauche, celle du haut vers la droite, et le tour est joué ! Ca découvre le fond du dessous, et on peut alors partir dans le code du jeu pour continuer Smiley

Bon, ce code je l'avais fait pour Weeds, j'ai voulu le réutiliser pour Skinz Sudoku mais j'ai eu un petit soucis : mes fonds étaient en 16bit, et les boutons du menu en 3DSprites... Hors, je n'ai pas la place en mémoire pour le 16bit pendant mon flash (et il faut charger les images pendant que le splash tourne...), donc j'ai du migrer mes fonds en 8bit... De plus, comme j'utilise la transparence et que ça marchait bien pour l'écran du bas, j'ai eu la flemme et je n'ai pas voulu changer ce bout de code, donc je ne pouvais pas avoir les 3DSprites au moment de l'affichage du menu :s Donc je les ai viré, ca fait le splash sans les boutons, et apres les boutons scrollent vers le centre comme si c'était fait exprès, alors que c'était pour m'arranger Azn
(en fait je pourrais refaire le code du bas pour n'utiliser que le GPU 3D, ca serait mieux mais ça marche et j'ai la flemme Azn)

Voilà, merci de votre attention, je rajoute tout ça dans mon post précédent Langue
« Dernière édition: 29 Avril 2007, 17:32:34 par Mollusk » Journalisée

dark_vador Hors ligne
Full Member
***
Messages: 143


Voir le profil WWW
« Réponse #19 : 29 Avril 2007, 01:17:59 »

Exellent  Cheesy je vais pouvoir faire un sudoku ! Grin .......nan j'rigole (enfin...) Roll Eyes
Journalisée

Que la force soit avec vous !!
Alekmaul Hors ligne
Papi codeur et
Administrateur
*****
Messages: 1229


Voir le profil WWW
Out of memory error ...

« Réponse #20 : 29 Avril 2007, 09:18:06 »

Superbe travail d'explication Mollusk, bravo encore pour ton travail sur ce nouveau projet.
J'ai vu les derniers travaux de Daydream sur ton sudoku, sympa les derniers skins Azn
Journalisée

Mon site PortableDev : l'émulation sur GBA et sur DS
Pitt Hors ligne
Administrateur
*****
Messages: 575


Voir le profil WWW
« Réponse #21 : 29 Avril 2007, 09:55:47 »

Ca m'a l'air sympa tout ça ... elle aime mieux, ta copine, la nouvelle version ? Cheesy
Journalisée
Mollusk Hors ligne
PAlib Guru et
Administrateur
*****
Messages: 3480


Voir le profil WWW
Ne vous posez pas de questions, codez !

« Réponse #22 : 29 Avril 2007, 10:39:27 »

J'ai pas encore eu l'occasion de lui faire tester, mais j'ose espérer que cette dernière release va lui plaire un peu plus Azn Je veux dire, je lui ai rajouté son compteur de temps, les lettres que ca lui prenait mal, c'est encore plus joli/mignon, la grille de visualisation en haut, un bouton pour effacer... Bref Azn Je poste tout à l'heure pour les 2 nouvelles skins (DayDream a fini !) et l'ajout du splash screen Mollusk Games / SpriteAttack Langue
Journalisée

Mollusk Hors ligne
PAlib Guru et
Administrateur
*****
Messages: 3480


Voir le profil WWW
Ne vous posez pas de questions, codez !

« Réponse #23 : 29 Avril 2007, 11:49:49 »

Et pouf, voici la mise à jour Azn J'ai mis à jour le post principal avec plein de nouveaux screenshots...

Citation
Mise à jour du 29 Avril 2007
  • Ajout du splash screen Mollusk Games / SpriteAttack (daydream)
  • Mise à jour de l'écran de titre, j'avais oublié de l'inclure la dernière fois Azn
  • 2 nouvelles skins de DayDream, portant le total à 4 (plus naruto). Permet d'avoir 1 skin/niveau de difficulté !
  • Support de la pause, avec Start, le bouton pause, ou encore en fermant la DS (non testé). Lorsqu'on met en pause ça cache les chiffres pour ne pas tricher Azn
  • Ajout des skins peros avec PAFS, utilise le format PNG exclusivement. Cf le post principal pour la marche à suivre...
  • Petit bugfix, quand on commence à écrire un chiffre ça efface le gros, c'est plus pratique.
edit : si ca intéresse de savoir comment est faite l'animation du splash je peux faire un petit blabla comme dans le post précédent Azn
« Dernière édition: 29 Avril 2007, 11:52:32 par Mollusk » Journalisée

MasterDje Hors ligne
Diet Coke Addict
Global Moderator
*****
Messages: 3242


Voir le profil WWW
« Réponse #24 : 29 Avril 2007, 12:39:51 »

Joli travail de pédagogie !
Quel travail de titan, et si peu de reconnaissance, arrf... c'est la vie...
Fais la lire le thread, elle verra que tu epates tt le monde  Cheesy

Sinon, pourquoi ne mettrais-tu pas au point un systeme d'"enregistrement" du pattern des chiffres par l'user ?
et avec dldi, tu t'en fais un ptit fichier reutilisable...
Je dois pas etre le seul avec des chiffres en bois  Grin
Journalisée

Pitt Hors ligne
Administrateur
*****
Messages: 575


Voir le profil WWW
« Réponse #25 : 29 Avril 2007, 12:44:26 »

L'idée de MasterDje est excellente ! (enfin va pas prendre la grosse tête, hein Grin)
Faudrait "juste" ajouter une option de calibrage, obligatoire la première fois qu'on joue, puis disponible dans les options. Smiley
Et merci pour le petit cours, c'est toujours sympa de tomber sur des posts comme ça sur le forum ...
Journalisée
Mollusk Hors ligne
PAlib Guru et
Administrateur
*****
Messages: 3480


Voir le profil WWW
Ne vous posez pas de questions, codez !

« Réponse #26 : 29 Avril 2007, 15:19:29 »

Pour le calibrage, c'est prévu comme solution alternative on va dire... C'est à dire que si quelqu'un a vraiment trop de soucis avec la reconnaissance et que je ne peux rien faire (genre ses chiffres sont bizarres et ressemblent vraiment trop à un autre chiffre d'une autre personne pour la DS) je rajouterais ca comme possibilité... Mais pour l'instant c'est volontairement qu'on ne peut pas, afin que les gens me rapportent si ça ne marche pas bien pour eux... Une fois la correction apportée (ça prend juste 30 secondes le temps que je copie/colle la chaine et recompile, MasterDje en est témoin Azn), elle sera appliquée pour toutes les autres personnes qui écrivent pareil Azn
Quand j'ai démarré je n'ai mis que mon écriture, elle était reconnue à 100%... Puis en gros chaque personne qui a testé avait 1 chiffre qui était pas nickel, j'ai rajouté et pour eux aussi ça semble bon à 100% Azn Donc esprit homebrew/communautaire, je voudrais un truc qui marche 'out of the box' pour un maximum de monde Langue Et puis Nintendo ne fait pas faire de calibration dans son sudoku, na !
Journalisée

MasterDje Hors ligne
Diet Coke Addict
Global Moderator
*****
Messages: 3242


Voir le profil WWW
« Réponse #27 : 29 Avril 2007, 15:31:40 »

Et puis Nintendo ne fait pas faire de calibration dans son sudoku, na !

En effet, et c'est pour cela que je fais des scores minables à chaque epreuve où il faut ecrire...
donc -1 Nintendo Wink
Journalisée

Pitt Hors ligne
Administrateur
*****
Messages: 575


Voir le profil WWW
« Réponse #28 : 29 Avril 2007, 17:24:52 »

Je ne voyais pas ça comme ça, mais c'est vrai que c'est une bonne idée. Wink
Journalisée
Mollusk Hors ligne
PAlib Guru et
Administrateur
*****
Messages: 3480


Voir le profil WWW
Ne vous posez pas de questions, codez !

« Réponse #29 : 29 Avril 2007, 17:27:07 »

Je ne voyais pas ça comme ça, mais c'est vrai que c'est une bonne idée. Wink
J'ai pas compris là :/
Journalisée

Pages: 1 [2] 3 4 ... 6   Haut de page
Imprimer

Aller à: