[Tutoriel] Créer un programme... dans un programme
5 participants
Page 1 sur 1
[Tutoriel] Créer un programme... dans un programme
Bien le bonjour amis programmeurs
Cette fois-ci nous allons découvrir certaines commandes qui, à mon sens, pourront conduire à de merveilleux logiciels ! Que diriez-vous de pouvoir créer ligne de code par ligne de code un programme... à partir d'un autre programme ? Vous allez voir, les applications sont très nombreuses et l'ensemble est bien loin d'être difficile, il faut juste s'entraîner un peu
I) Introduction
Peu de gens le remarque d'emblée en démarrant Petit Computer 3, mais celui-ci comprend 4 "slots" pouvant contenir du code : 0,1,2 et 3. Par défaut, lorsque vous éditez un programme, vous l'écrivez sur le slot 0, c'est d'ailleurs celui qui est exécuté lorsque l'on lance le programme. Mais dans ce tutoriel, nous allons apprendre à utiliser au moins un des trois autres slots.
Note: Dans un souci de compréhension, le code contenu dans le slot 0 sera en noir et celui du slot 1 en bleu dans les exemples qui suivront.
II) Exécuter un slot
Voyons tout d'abord la commande de base. Comme je l'ai mentionné précédemment, c'est le slot 0 qui est exécuté lorsque l'on lance le programme. Toutefois, si l'on veut lire le code contenu dans le slot 1,2 ou 3, il faut placer la commande EXEC suivi de l'ID du slot. Exemple :
(slot 0)
EXEC 1 //On passe aux instructions contenues dans le slot 1
(slot 1)
PRINT "A"
Il s'affiche à l'écran "A", on est bien passé du slot 0 au slot 1. D'ailleurs, une fois les instructions du slot 1 lues, le programme retourne au slot 0. Attention toutefois, les deux slots ne possèdent pas les mêmes variables ! Exemple :
(slot 0)
A=2
EXEC 1
(slot 1)
PRINT A
"0" s'affiche, car la variable A définie dans le slot 0 n'est pas connue dans le slot 1, prenez garde.
III) Modifier le code contenu dans un autre slot
Nous verrons l'utilisé de EXEC dans la dernière partie. Pour le moment, étudions le véritable rôle des slots qui sera de "contenir" des lignes de code générées par votre programme, ce qui rend les choses plus intéressantes. Passons donc en revue toutes les commandes qui vous aideront dans cette tâche.
Avant toute chose, il faut définir quel slot le programme va modifier. Pour ce faire, on utilise PRGEDIT [ID du slot]. Exemple : PRGEDIT 1, qui signifie que toutes les modifications seront faites sur le slot 1. Ensuite, il suffit de créer de nouvelles lignes de code à l'aide de ces différents outils, gare à ne pas les confondre :
- PRGINS [chaîne de caractères] : ajoute une ligne avec les instructions contenues dans la chaîne de caractères.
- PRGSET [chaîne de caractères] : écrase la dernière ligne et la remplace par la chaîne de caractères.
- PRGDEL [nombre de lignes] : supprime le nombre de lignes spécifié en partant du bas.
Puisqu'il n'y a rien de mieux que des exemples pour apprendre, en voici deux :
(slot 0)
PRGEDIT 1 // On va modifier le slot 1
PRGINS "A=2" // On ajoute une ligne A=2
PRGINS "PRINT A" // On ajoute une ligne PRINT A
(contenu dans le slot 1)
A=2
PRINT A
(slot 0)
PRGEDIT 1 // On va modifier le slot 1
PRGINS "A=2" // On ajoute une ligne A=2
PRGINS "B=3" // On ajoute une ligne B=3
PRGINS "C=4" // On ajoute une ligne C=4
PRGDEL 2 // On supprime les deux dernières lignes
(contenu dans le slot 1)
A=2
Comme vous avez pu le voir, je n'utilise pas PRGSET car son rôle est trop particulier. En effet, elle remplace la dernière ligne si et seulement si il n'y a pas eu de saut de ligne. Or, en utilisant PRGINS, il y a automatiquement un saut de ligne. PRGSET a donc une efficacité limitée.
Note : vous serez sans doute amené à ajouter des lignes de code contenant des guillemets. Pour ajouter des guillemets, il faudra placer CHR&(34). Par exemple : PRGINS "INPUT "+CHR$(34)+"Votre nom "+CHR$(34)+";N" donne une fois dans le code INPUT "Votre nom ";N
IV) SAVE/LOAD avec les slots
Dernière mise au point concernant les slots, l'utilisation de SAVE et LOAD. Sachez tout d'abord qu'on ne peut sauvegarder qu'un slot à la fois, si votre programme s'étend sur les quatre slots, il faudra alors enregistrer quatre fichiers distincts. Malgré tout, je ne vais pas perturber beaucoup vos habitudes car la fonctionnement de SAVE reste très simple. Il suffit en effet d'accoler "PRG[ID du slot]:" au nom donné à votre programme pour que ce soit le contenu du slot concerné qui soit sauvegardé. Exemple :
SAVE "PRG1:ABC" // On sauvegarde le contenu du slot 1 sous le nom ABC
De même, vous pouvez charger un programme dans un slot en particulier :
LOAD "PRG2:CDE" // On charge le programme CDE dans le slot 2
Auparavant, lorsque vous utilisiez l'une ou l'autre de ces deux commandes, vous ne vous préoccupiez en fait que du slot 0 ! Ecrire SAVE "ABC" revient à écrire SAVE "PRG0:ABC", de même pour LOAD.
Note : en chargeant un programme dans un slot, la ligne actuelle n'est plus la dernière mais la première.
V) Quelques commandes en vrac
Pour finir, voici quelques commandes qui pourront peut-être vous être utiles (les commandes précédées d'une étoile sont celles nécessitant PRGEDIT au préalable) :
- NEW [ID du slot] : à utiliser en mode EDIT seulement, supprime le contenu du slot spécifié. Si aucun ID n'est précisé, cette commande supprime le contenu de tous les slots.
* PRGGET$() : renvoie le contenu de la ligne actuelle
* PRGNAME$() : renvoie le nom du programme
- PRGSIZE([ID du slot]) : renvoie le nombre de lignes du slot précisé
VI) Conclusion
Si certaines choses vous paraissent encore un peu floues, je vous invite à expérimenter des choses par vous-même ou à me poser quelques questions. Pour ce qui est de l'utilité de ces commandes, laissez-moi vous faire rêver un peu. Imaginez qu'un programmeur (sans doute très doué et ambitieux) ait dans l'idée de créer un logiciel qui vous aide à coder des jeux : grâce aux commandes d'édition des slots, cela est tout à fait possible. De même pour ceux qui auraient dans l'idée de créer un système d'exploitation : plus besoin de quitter le logiciel pour accéder à un jeu, il suffit de le charger dans un slot, de l'exécuter puis une fois terminé on revient tout simplement à l'OS ! Bien d'autres applications peuvent être envisagées, alors laissez libre cours à votre imagination
Cette fois-ci nous allons découvrir certaines commandes qui, à mon sens, pourront conduire à de merveilleux logiciels ! Que diriez-vous de pouvoir créer ligne de code par ligne de code un programme... à partir d'un autre programme ? Vous allez voir, les applications sont très nombreuses et l'ensemble est bien loin d'être difficile, il faut juste s'entraîner un peu
I) Introduction
Peu de gens le remarque d'emblée en démarrant Petit Computer 3, mais celui-ci comprend 4 "slots" pouvant contenir du code : 0,1,2 et 3. Par défaut, lorsque vous éditez un programme, vous l'écrivez sur le slot 0, c'est d'ailleurs celui qui est exécuté lorsque l'on lance le programme. Mais dans ce tutoriel, nous allons apprendre à utiliser au moins un des trois autres slots.
Note: Dans un souci de compréhension, le code contenu dans le slot 0 sera en noir et celui du slot 1 en bleu dans les exemples qui suivront.
II) Exécuter un slot
Voyons tout d'abord la commande de base. Comme je l'ai mentionné précédemment, c'est le slot 0 qui est exécuté lorsque l'on lance le programme. Toutefois, si l'on veut lire le code contenu dans le slot 1,2 ou 3, il faut placer la commande EXEC suivi de l'ID du slot. Exemple :
(slot 0)
EXEC 1 //On passe aux instructions contenues dans le slot 1
(slot 1)
PRINT "A"
Il s'affiche à l'écran "A", on est bien passé du slot 0 au slot 1. D'ailleurs, une fois les instructions du slot 1 lues, le programme retourne au slot 0. Attention toutefois, les deux slots ne possèdent pas les mêmes variables ! Exemple :
(slot 0)
A=2
EXEC 1
(slot 1)
PRINT A
"0" s'affiche, car la variable A définie dans le slot 0 n'est pas connue dans le slot 1, prenez garde.
III) Modifier le code contenu dans un autre slot
Nous verrons l'utilisé de EXEC dans la dernière partie. Pour le moment, étudions le véritable rôle des slots qui sera de "contenir" des lignes de code générées par votre programme, ce qui rend les choses plus intéressantes. Passons donc en revue toutes les commandes qui vous aideront dans cette tâche.
Avant toute chose, il faut définir quel slot le programme va modifier. Pour ce faire, on utilise PRGEDIT [ID du slot]. Exemple : PRGEDIT 1, qui signifie que toutes les modifications seront faites sur le slot 1. Ensuite, il suffit de créer de nouvelles lignes de code à l'aide de ces différents outils, gare à ne pas les confondre :
- PRGINS [chaîne de caractères] : ajoute une ligne avec les instructions contenues dans la chaîne de caractères.
- PRGSET [chaîne de caractères] : écrase la dernière ligne et la remplace par la chaîne de caractères.
- PRGDEL [nombre de lignes] : supprime le nombre de lignes spécifié en partant du bas.
Puisqu'il n'y a rien de mieux que des exemples pour apprendre, en voici deux :
(slot 0)
PRGEDIT 1 // On va modifier le slot 1
PRGINS "A=2" // On ajoute une ligne A=2
PRGINS "PRINT A" // On ajoute une ligne PRINT A
(contenu dans le slot 1)
A=2
PRINT A
(slot 0)
PRGEDIT 1 // On va modifier le slot 1
PRGINS "A=2" // On ajoute une ligne A=2
PRGINS "B=3" // On ajoute une ligne B=3
PRGINS "C=4" // On ajoute une ligne C=4
PRGDEL 2 // On supprime les deux dernières lignes
(contenu dans le slot 1)
A=2
Comme vous avez pu le voir, je n'utilise pas PRGSET car son rôle est trop particulier. En effet, elle remplace la dernière ligne si et seulement si il n'y a pas eu de saut de ligne. Or, en utilisant PRGINS, il y a automatiquement un saut de ligne. PRGSET a donc une efficacité limitée.
Note : vous serez sans doute amené à ajouter des lignes de code contenant des guillemets. Pour ajouter des guillemets, il faudra placer CHR&(34). Par exemple : PRGINS "INPUT "+CHR$(34)+"Votre nom "+CHR$(34)+";N" donne une fois dans le code INPUT "Votre nom ";N
IV) SAVE/LOAD avec les slots
Dernière mise au point concernant les slots, l'utilisation de SAVE et LOAD. Sachez tout d'abord qu'on ne peut sauvegarder qu'un slot à la fois, si votre programme s'étend sur les quatre slots, il faudra alors enregistrer quatre fichiers distincts. Malgré tout, je ne vais pas perturber beaucoup vos habitudes car la fonctionnement de SAVE reste très simple. Il suffit en effet d'accoler "PRG[ID du slot]:" au nom donné à votre programme pour que ce soit le contenu du slot concerné qui soit sauvegardé. Exemple :
SAVE "PRG1:ABC" // On sauvegarde le contenu du slot 1 sous le nom ABC
De même, vous pouvez charger un programme dans un slot en particulier :
LOAD "PRG2:CDE" // On charge le programme CDE dans le slot 2
Auparavant, lorsque vous utilisiez l'une ou l'autre de ces deux commandes, vous ne vous préoccupiez en fait que du slot 0 ! Ecrire SAVE "ABC" revient à écrire SAVE "PRG0:ABC", de même pour LOAD.
Note : en chargeant un programme dans un slot, la ligne actuelle n'est plus la dernière mais la première.
V) Quelques commandes en vrac
Pour finir, voici quelques commandes qui pourront peut-être vous être utiles (les commandes précédées d'une étoile sont celles nécessitant PRGEDIT au préalable) :
- NEW [ID du slot] : à utiliser en mode EDIT seulement, supprime le contenu du slot spécifié. Si aucun ID n'est précisé, cette commande supprime le contenu de tous les slots.
* PRGGET$() : renvoie le contenu de la ligne actuelle
* PRGNAME$() : renvoie le nom du programme
- PRGSIZE([ID du slot]) : renvoie le nombre de lignes du slot précisé
VI) Conclusion
Si certaines choses vous paraissent encore un peu floues, je vous invite à expérimenter des choses par vous-même ou à me poser quelques questions. Pour ce qui est de l'utilité de ces commandes, laissez-moi vous faire rêver un peu. Imaginez qu'un programmeur (sans doute très doué et ambitieux) ait dans l'idée de créer un logiciel qui vous aide à coder des jeux : grâce aux commandes d'édition des slots, cela est tout à fait possible. De même pour ceux qui auraient dans l'idée de créer un système d'exploitation : plus besoin de quitter le logiciel pour accéder à un jeu, il suffit de le charger dans un slot, de l'exécuter puis une fois terminé on revient tout simplement à l'OS ! Bien d'autres applications peuvent être envisagées, alors laissez libre cours à votre imagination
Dernière édition par Kuroshitsu le Jeu 1 Jan - 15:38, édité 4 fois (Raison : Esprit pointilleux)
Kuroshitsu- Messages : 104
Date d'inscription : 18/10/2014
Age : 25
Re: [Tutoriel] Créer un programme... dans un programme
Ca va être pratique pour faire des patch aussi !
Même si on passe plus par les qr codes ...
mais si c'est un gros jeu ça évite de bouffer toute la connexion !
Même si on passe plus par les qr codes ...
mais si c'est un gros jeu ça évite de bouffer toute la connexion !
Re: [Tutoriel] Créer un programme... dans un programme
Décidément, plein de nouvelles fonctionnalités géniales !
Juste une chose ou deux, on ne peut pas envoyer de "paramètre" à un slot à l'instar d'une fonction ? Par exemple dans le cas d'un OS, on va afficher une fenêtre vide depuis le slot principal, puis on va donner le rectangle de dessin au programme qui doit être affiché pour qu'il s'inscrive dans ce rectangle. Cela m'amène à la seconde question, il n'y a pas de curseur dans le slot, qui permet d'écrire à tel endroit sans se soucier du reste comme quand on écrit au clavier simple ? Cela permettrait en première ligne de définir des variables puis d'écrire le programme après, mais cela ne pourrait pas être dynamique au final, ou en tout cas il faudrait faire un format de fichier, carrément.
Juste une chose ou deux, on ne peut pas envoyer de "paramètre" à un slot à l'instar d'une fonction ? Par exemple dans le cas d'un OS, on va afficher une fenêtre vide depuis le slot principal, puis on va donner le rectangle de dessin au programme qui doit être affiché pour qu'il s'inscrive dans ce rectangle. Cela m'amène à la seconde question, il n'y a pas de curseur dans le slot, qui permet d'écrire à tel endroit sans se soucier du reste comme quand on écrit au clavier simple ? Cela permettrait en première ligne de définir des variables puis d'écrire le programme après, mais cela ne pourrait pas être dynamique au final, ou en tout cas il faudrait faire un format de fichier, carrément.
Re: [Tutoriel] Créer un programme... dans un programme
S.lexis > Non pas d’attributs ni de curseur. Par contre, j'ai complété mon tutoriel avec de nouvelles commandes et cette remarque : "en chargeant un programme dans un slot, la ligne actuelle n'est plus la dernière mais la première."
En d'autres termes, si tu charges un programme dans un slot et que tu utilises PRGINS (PRGSET supprimerait des lignes de code existantes...), tu rajouteras des lignes au début du programme. Tu pourrais alors rajouter "A=2", "B=3" etc...
De même, je pense qu'en utilisant PRGGET$() (voir partie V modifiée), on peut parvenir à trafiquer un programme dans son ensemble. Imaginons un patch qui s'organiserait de cette manière : "à telle ligne, je rajoute ça, à telle ligne, j'enlève ça". En stockant le programme dans un slot, puis en le recopiant ligne par ligne (à l'aide d'une boucle basée sur le nombre de lignes du programme grâce à PRGSIZE()) dans un autre slot en supprimant ou en ajoutant des éléments, on peut parvenir à faire plein de choses, du patch à l'ajout d'une portion de code telle que tu me l'as décrite !
Je vais travailler un peu dessus, il faut bien avouer que c'est c'est passionnant
En d'autres termes, si tu charges un programme dans un slot et que tu utilises PRGINS (PRGSET supprimerait des lignes de code existantes...), tu rajouteras des lignes au début du programme. Tu pourrais alors rajouter "A=2", "B=3" etc...
De même, je pense qu'en utilisant PRGGET$() (voir partie V modifiée), on peut parvenir à trafiquer un programme dans son ensemble. Imaginons un patch qui s'organiserait de cette manière : "à telle ligne, je rajoute ça, à telle ligne, j'enlève ça". En stockant le programme dans un slot, puis en le recopiant ligne par ligne (à l'aide d'une boucle basée sur le nombre de lignes du programme grâce à PRGSIZE()) dans un autre slot en supprimant ou en ajoutant des éléments, on peut parvenir à faire plein de choses, du patch à l'ajout d'une portion de code telle que tu me l'as décrite !
Je vais travailler un peu dessus, il faut bien avouer que c'est c'est passionnant
Kuroshitsu- Messages : 104
Date d'inscription : 18/10/2014
Age : 25
Re: [Tutoriel] Créer un programme... dans un programme
"Esprit pointilleux"
En tout cas merci pour ces précisions, du vrai travail d'inspecteur ! Le fonctionnement ne reste pas totalement évident quand même.
En tout cas merci pour ces précisions, du vrai travail d'inspecteur ! Le fonctionnement ne reste pas totalement évident quand même.
Re: [Tutoriel] Créer un programme... dans un programme
S.lexis > Parce que tu n'as pas encore l'occasion de tester tout ça par toi-même, la théorie est toujours plus difficile que la pratique.
J'essaie de réfléchir à un générateur de patchs, mais c'est pas évident
PS: j'ai ajouté une petite astuce concernant les guillemets dans la partie III qui pourra vous être utile
J'essaie de réfléchir à un générateur de patchs, mais c'est pas évident
PS: j'ai ajouté une petite astuce concernant les guillemets dans la partie III qui pourra vous être utile
Kuroshitsu- Messages : 104
Date d'inscription : 18/10/2014
Age : 25
Re: [Tutoriel] Créer un programme... dans un programme
Cool ton astuce
J'ai une question : peut on utiliser des noms de fonctions existantes
Je pense que non mais on sait jamais ???
J'ai une question : peut on utiliser des noms de fonctions existantes
Je pense que non mais on sait jamais ???
Re: [Tutoriel] Créer un programme... dans un programme
Évidemment que non, imagine tous les problèmes que ça causerait ^^'
Kuroshitsu- Messages : 104
Date d'inscription : 18/10/2014
Age : 25
Re: [Tutoriel] Créer un programme... dans un programme
Question qui je pense, interressera du monde (surtout la réponse en fait) :
Sachant que dans PTC3 les lignes de code passent de 9999 à 99999, est -ce que on dispose de 99999 lignes dans chaque slot ?
Sachant que dans PTC3 les lignes de code passent de 9999 à 99999, est -ce que on dispose de 99999 lignes dans chaque slot ?
Re: [Tutoriel] Créer un programme... dans un programme
Oui, tous les slots bénéficient du nombre de ligne maximal qui, d'ailleurs, semble pouvoir être étendu au-delà des 99999 lignes
Kuroshitsu- Messages : 104
Date d'inscription : 18/10/2014
Age : 25
Re: [Tutoriel] Créer un programme... dans un programme
Hoooo, Ho, Ho Hooooooo ! Attendez-vous à des Retro-Skyrim-3D X)
Re: [Tutoriel] Créer un programme... dans un programme
fenixelf > Oui dans ce PTC toutes les barrières sautent, le nombre d'éléments pouvant être contenus dans une chaîne de caractères ou dans une grille est à la limite de l'indécence (on touche les 999999), mais la mémoire de la 3DS n'est pas toujours extensible ^^'
Kuroshitsu- Messages : 104
Date d'inscription : 18/10/2014
Age : 25
Re: [Tutoriel] Créer un programme... dans un programme
.....
Ils auraient du rallier la mémoire de la carte SD au logiciel, c'aurait été parfait...
BAH, C'EST DEJA BIEN ET CA SUFFIRA POUR QUE DISCOSTEW REMETTE SON EXPLOIT D'OPTIMISATION DE JEU SUR PTC ! J'ATTENDS SON MEGAMAN X3 SUR 3DS
Ils auraient du rallier la mémoire de la carte SD au logiciel, c'aurait été parfait...
BAH, C'EST DEJA BIEN ET CA SUFFIRA POUR QUE DISCOSTEW REMETTE SON EXPLOIT D'OPTIMISATION DE JEU SUR PTC ! J'ATTENDS SON MEGAMAN X3 SUR 3DS
Re: [Tutoriel] Créer un programme... dans un programme
J'avais oublié que dans Ptc3 on pouvait faire ça
CounterClockWize- Messages : 72
Date d'inscription : 23/08/2013
Sujets similaires
» [Tutoriel] Créer sa propre musique
» Programme d'animation
» [Concours] Petit Programme
» Transformer un programme en QR code
» [Module] Une portion de programme pour utiliser les fonctions mathématiques
» Programme d'animation
» [Concours] Petit Programme
» Transformer un programme en QR code
» [Module] Une portion de programme pour utiliser les fonctions mathématiques
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum