:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Développement Amateur :: > Tutoriels

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 18/10/2009, 18h34   #1
Tiwaz
Newser
 
Date d'inscription: 18/03/2007
Localisation: Un coin trop froid...
Messages: 739
Par défaut Découverte de la programmation Nintendo DS

J'ai donné récemment un cours sur la programmation sur console Nintendo DS, et j'ai trouvé très intéressant la réaction globale de la classe, et finalement, la facilité que procure actuellement des kits près à l'emploi comme la PAlib.

Un cours suivit d'un TP a suffit pour initier une partie des personnes à l'art bien délicat de la programmation sur DS avec des moufles.

Au départ
Nous avons une classe de Master 2, formé pour la conception multimédia, mais complètement étrangère au concept de programmation C ou C++. Les langages déjà vu, découvert et exploité vont du PHP à l'ActionScript, en passant par un peu de java via processing.
On remarque donc que même pour programmer sur DS, pas besoin d'être un AS du C/C++, des notions de programmation suffisent la plupart du temps.

Le cours
Le cours, que je ne reproduirais pas ici, n'est qu'une introduction aux consoles portables, au concept d'autonomie, et surtout un descriptif hardware un peu complet, mais très facilement exploitable trouvable.

Et ça commence à programmer
Le premier point, l'installation d'un environnement de développement. Ce dernier est prêt à l'emploi, un simple fichier à décompresser à la racine d'un disque dur, pour Windows uniquement. (Rappelons que le but n'est pas de montrer l'installation d'un kit de cross compilation, mais bien la création d'un petit programme pour la DS).

L'émulateur choisis est Desmume, GPL, et très complet en ce qui concerne le déboggage.

Explications basiques

Voilà à quoi ressemble l'environnement de développement.
  1. Première opération, lancer Programmer Notepad présent dans le dossier, via un double clic sur "pn.exe" dans le répertoire adéquat.
  2. Depuis là, faire un [File]->[Open Project]
  3. Charger le fichier projet situé dans : \devkitPro\PAlib\examples\Text\Normal\TextColors
  4. [Tools]->[Build]
  5. Lancer Desmume
  6. Glisser le fichier .nds résultat de la compilation sur Desmume (fichier qui se situe sur \devkitPro\PAlib\examples\Text\Normal\TextColors\t extcolors.nds
  7. admirer votre première compilation pour Nintendo DS

Rappelons que jusqu'ici, aucune connaissance en C++/C n'a été nécessaire.

Regardons de plus près le programme ainsi compilé (qui se situe dans source/main du projet sous ProgrammerNotePad):

Code:
#include <PA9.h>       // Pour simplifier la programmation

char text[200]; // Mémoire pour stocker le texte

// Fonction principale : En C, on utilise { et } pour ouvrir un fermer une fonction
int main(int argc, char ** argv)
{
	PA_Init();    // Initialisation standard de la console
	PA_InitVBL(); // Initialisation de l'interruption de VSync à rien du tout
	// Initialisation des fonctions pour écrire du texte à l'écran
	PA_InitText(0, // Choix de l'écran : 0 = écran du bas
				1);  	// Choix du background à utiliser (0 à 3)
	PA_InitText(1, 0);  // Même chose, mais pour l'écran du haut

	u8 i; // Déclaration d'une variable
	for (i = 0; i < 10; i++)
	{
		PA_SetTextTileCol(1, // Choix de l'écran de l'action
 i); Choix de la couleur d'affichage
		PA_OutputSimpleText(1, 2, i, "Color test...");  On écrit le texte sur l'écran 1 (écran du haut) à la position 2,i (comme i est modifié par la boucle, on écrit les lignes les unes au dessous des autres).
	} // Fin de la boucle
	
	PA_SetTextTileCol(1, TEXT_YELLOW); 
   PA_OutputSimpleText(1, 0, 17, "Yellow test..."); // Un texte jaune sur l'écran du bas
	PA_OutputText(0, 0, 0, "Color test...%c1another one, %c2again, %c3 again..."); 

// Boucle infinie pour le programme
	while (1)
	{
		PA_WaitForVBL(); // Attend un rafraichissement d'écran
	}
	return 0;
} // Fin du programme
Simple, bien expliqué, ca se passe de commentaire.
Passons à quelque chose de plus intéressant. Animons ce petit truc.
Remplacer la boucle while par la suivante:

Code:
	u8 j=3;
	u8 direction=1;
	while (1)
	{
	if ((j>70)||(j<1)) { direction = -direction; }
	PA_OutputSimpleText(0, 5, j, " 0 ");
	PA_WaitForVBL(); // Attend un rafraichissement d'écran
	}
C'est magique. Mais un peu basique. Et l'écran tactile, il ne sert pas à grand chose.
C'est pourquoi, après ces manipulations un peu magique, nous allons étudier le code qui se situe dans ce répertoire: \devkitPro\PAlib\examples\Input\Stylus\Stylus

La ligne qui nous intéresse est la suivante :
Code:
PA_OutputText(1, 1, 11, "Stylus Position : %d, %d   ", Stylus.X, Stylus.Y);
Hum hum, ca commence à prendre forme non?

Le code du while se transforme à nouveau, voici la nouvelle version :
Code:
	while (1)
	{
	PA_OutputSimpleText(0, Stylus.X/8, Stylus.Y/8, " 0 ");
	PA_WaitForVBL(); // Attend un rafraichissement d'écran
	}
Pourquoi on divise par 8? Eh bien, la fonction d'affichage de texte affiche des morceaux qui font 8 par 8, et la fonction ne prend pas des pixels pour son positionnement, mais des lignes et des colonnes. Or, celle-ci font 8 pixels.

C'est très beau, mais il reste un problème, l'ancien texte reste affiché à l'écran. Et ce n'est pas très beau.

Un petit tour sur la documentation officielle de la PAlib ici :
http://palib.info/Doc/PAlibDoc%20Fr/modules.html va nous aider un peu. Regardons...
Text output system, tiens, ca ressemble à ce qu'on fait ca.
Et là, on trouve une fonction bien intéressante :
Code:
PA_ClearTextBg (u8 screen)
Magique, une fonction qui efface le texte d'un écran. Notre boucle deviens donc:

Code:
	while (1)
	{
	PA_ClearTextBg (1);
	PA_OutputSimpleText(0, Stylus.X/8, Stylus.Y/8, " 0 ");
	PA_WaitForVBL(); // Attend un rafraichissement d'écran
	}
---------------------------------------------
---------------------------------------------
Le TP a par la suite abordé la notion de sprite, avec l'affichage, l'animation et la rotation d'un sprite, et l'utilisation de pa_gfx pour faire un peu de graphisme, et pas seulement du texte, dans le but de faire un pong basique. Je continuerai ici ce portage de cours si cela intéresse du monde(là, c'est le résumé de la première demi heure)

En conclusion
Sans connaitre le C, sans connaitre le C++, sans connaitre la DS, sans connaitre la programmation pour portable, et en un peu plus d'une heure, il est possible de créer un simili-pong graphique animé utilisant l'écran tactile pour la Nintendo DS.

Le but était de montrer que sans connaissance, avec juste les exemples fournis, et la documentation de la PAlib, en sachant ou fouiller, il est possible de faire déjà pas mal de chose dans un but didactique et démonstratif.
__________________
Un langage de programmation est censé être une façon conventionnelle de donner des ordres à un ordinateur. Il n'est pas censé être obscur, bizarre et plein de pièges subtils, ça ce sont les attributs de la magie.
Tiwaz est déconnecté   Réponse avec citation

Publicité

Vieux 18/10/2009, 22h00   #2
t4ils
Membre confirmé
 
Date d'inscription: 10/11/2005
Localisation: Morangis ( 91 )
Messages: 2 752
Voir les codes amis Wii
Par défaut

rahhh punaise

Un prof comme toi je le paierai pour venir me donner des cours aussi intéressants que ceux-ci
Tu fais un petit tour dans mon Master 1 nous enseigner 2-3 trucs ?

C'est un master 2 quel matière au fait ?

sinon, GG
__________________
Un renard, en plus de voler, ca code !

t4ils est déconnecté   Réponse avec citation
Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
GBA Nintendo Mp3 Player Bobby Sixkilla Articles et Tutos 11 02/03/2010 11h50
Un nouveau concours de programmation sur Nintendo DS Darkmath Les News 2 03/07/2007 23h16
Nintendo On, le retour! Phoebius Discussions Sur Les Autres Consoles 20 05/03/2006 15h59
NDS Nintendo Wi-Fi Connection Friend Code puzznic Jeux 2 10/11/2005 20h27


Fuseau horaire GMT +2. Il est actuellement 21h05.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince