[Langage]PetitBasic
4 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
[Langage]PetitBasic
Bonjour, Bonjoir à tous !
Récemment je me suis lancé dans un projet, que j'ai plus tard nommé PetitBasic.
Le principe de ce projet est de créer un nouveau langage de programmation (pour PC) inspiré du SmileBasic de PTC.
L'idée générale est de reprendre la simplicité que le SmileBasic nous donnait au niveau de la gestion des sprites, et quelques éléments intéressants tels que les CHR modifiables pour changer la police d'écriture en images, par exemple.
Voilà tout, si vous avez des questions, des commentaires, des idées voire même si vous avez envie d'apporter un coup de main, n'hésitez pas à en parler. ^^
Récemment je me suis lancé dans un projet, que j'ai plus tard nommé PetitBasic.
Le principe de ce projet est de créer un nouveau langage de programmation (pour PC) inspiré du SmileBasic de PTC.
L'idée générale est de reprendre la simplicité que le SmileBasic nous donnait au niveau de la gestion des sprites, et quelques éléments intéressants tels que les CHR modifiables pour changer la police d'écriture en images, par exemple.
- Description du projet (post original):
PetitBasic est codé en VisualBasic, un langage orienté objet que je manie très bien.
Voici l'architecture actuelle du projet :
Chaque élément est un objet, qui est capable de communiquer avec d'autres objets pour former un ensemble qui donnera en résultat un interpréteur Basic.
Pour le moment tout est déjà un peu en place, à part l'interpréteur Basic qui n'est pas encore commencé, mais qui devrait l'être bientôt.
Voici un aperçu de l'interface RUN actuelle :
La particularité est qu'il m'a fallu créer la console en entier, je n'ai pas pu utiliser la console que donnait Windows par défaut, notamment à cause des fonctionnalités graphiques que proposera le langage, mais aussi pour des questions pratiques, car maintenant j'ai le contrôle total sur le fonctionnement de la console, et donc peut permettre d'y faire un peu ce que je veux.
J'ai aussi conçu un interpréteur MML, certes pas encore aussi au point que celui de PTC (manque quelques éléments, et quelques bugs sont présents aussi), mais il permettra de composer quelques mélodies pour les personnes qui refusent d'utiliser des fichiers mp3 ou autres.
Peut-être qu'une démo sera disponible sous peu, ça dépendra si j'ai assez de temps à consacrer au projet le soir.
- Liens vers les builds:
Télécharger PetitBasic (Dropbox)
Lien vers le manuel
Link to the manual
Explications sur les numéros de versions :
les versions sont numérotés comme ceci : 0.0b0
- Le premier chiffre représente la version majeure : généralement le changement d'une de ces versions impliquent de gros changements niveau code, comprenant souvent des incompatibilités avec les versions antérieures.
- Le second chiffre représente la version mineure : elles incluent souvent des corrections de bugs et des ajouts de fonctionnalités.
- Le dernier chiffre, derrière le "b", représente le numéro de build, qui est un chiffre s'incrémentant à chaque fois qu'on compile le programme en mode release ("stable" si vous préférez).
- Changelog:
- v0.5:
0.5 b29
IDE :
- Un éditeur de programmes intégré pour coder directement ses programmes dessus
- Les boutons Nouveau, Ouvrir, Enregistrer, Enregistrer Sous... les classiques quoi
- Un bouton pour formater votre code, c'est plus joli quand il est bien indenté, merci la touche Tab !
- Un éditeur d'options de programme, qui va vous générer le Includes.cfg directement dans votre dossier de travail. Il est encore très basique, mais au moins pas la peine d'ouvrir dans un fichier texte à part
- Une fenêtre de compilation, qui vous permet de compiler à n'importe quel moment votre programme, voir les erreurs rencontrés et même lancer votre programme directement après la compilation !
- Un accès aux documentations françaises et anglaises (Oui au passage j'ai traduit le manuel en anglais)
PetitBasic :
- Meilleur affichage des erreurs de compilation, avec au possible l'affichage de la ligne qui pose problème et amélioration de certains messages.
- Ajout d'une commande DEBUG, par défaut activée, qui permet au programme quand il rencontre une erreur de rédiger un fichier "report.txt" où il y affichera toutes ses variables pour faciliter le débug.
- v0.4:
0.4 b19
- L'arrivée des commandes spéciales IF, FOR, WHILE, EVT et les SUB
EVT est une commande particulière, son utilité est extrêmement importante : elle permet de rafraichir l'affichage, et de gérer les événements système que l'utilisateur a pu enclencher (par exemple si il a cliqué sur la croix pour fermer la fenêtre)
Les subs, quant à eux, sont les remplaçants spirituels des labels et gosub.
Un sub est en fait un sous-programme. Il utilise les mêmes variables que le programme classique, à la différence que ce sous-programme peut être appelé de n'importe où : que ça soit dans le programme principal, dans d'autres subs mais aussi dans lui même !
Pour en créer un c'est très simple :
Code:
{programme principal}
sub monSubàMoi
{Code du sub}
subend
à noter que le sub peut être créé à n'importe quel moment, tout au début du programme, à la toute fin ou pour les plus tordus en plein milieu (c'est déconseillé pour la lisibilité).
Pour ce qui est de la syntaxe des IF, FOR et WHILE :
Code:
if {condition}
{programme}
elseif {autre condition}
{programme}
else
{programme}
ifend
for {variable}={début} to {fin} step {pas}
{programme}
next
while {condition}
{programme}
wend
Pour le IF, les instructions elseif et else sont facultatives
Pour le FOR, le step est facultatif lui aussi
- Autre nouveauté, le programme est maintenant devenu un compilateur. Avant il lisait le programme en direct, et devait simuler toutes les commandes spéciales telles que les for, les if, etc... le problème principal c'est que ça ralentissait considérablement le programme. Comme dit plus haut un simple for de 100 itérations prenait à lui seul 24 secondes à s'exécuter. Maintenant, il transforme votre programme en un .exe, Il faudra alors forcément d'abord l'écrire dans un fichier texte, puis le programme s'occupera de créer un dossier portant le nom de votre fichier, et contenant l'exécutable ainsi que les fichiers de base pour pouvoir exécuter correctement votre programme.
- Enfin, troisième et dernière nouveauté, qui nous as amené en version 0.4, la possibilité de modder le logiciel :
Un fichier Includes.cfg contenant quelques informations (en anglais) sur son utilité, permet à PetitBasic d'avoir des informations pour compiler votre programme. Vous pouvez si vous voulez en créer un à côté de votre programme, PetitBasic prendra celui se trouvant dans le même dossier que le programme en priorité, sinon il prendra celui se trouvant dans son dossier.
Un autre fichier est apparu, Library.vb qui contient toutes les fonctions et commandes de PetitBasic. à vous de voir si vous voulez modifier le comportement de certaines fonctions ou commandes, à condition de savoir coder en Visual Basic.
Notez que vous pouvez ajouter vos propres fichiers en .vb si vous les ajoutez dans le fichier Includes.cfg.
- v0.1:
0.1 b10 :
- Bugfix sur l'ouverture des fichiers, et les répertoires de travail.
0.1 b9 :
- Bugfix sur les variables, blocage de curseur avec LOCATE et paramètres de COLOR.
- Possibilité de mettre les couleurs par leur nom (cf. manuel)
0.1 b8 :
-Les fonctions sont arrivées ! pour l'instant il n'y a que ABS, ASC et RGB.
-Vu que le système de palette est un peu désuet face à la puissance des PCs de maintenant, puis aussi c'est un peu n'importe quoi à coder, du coup la commande COLOR supporte les couleurs HTML (type #RRGGBB dont RR, GG ou BB sont entre 00 et FF (0 à 255)).
Vous pouvez utiliser la fonction RGB dans COLOR, pour pouvoir choisir l'une des 16 millions de couleurs qu'offrent la fonction.
0.1 b7 :
-Ajout de quelques commandes : LOCATE, PRINT, COLOR, LOAD, TRANSPARENT et CLS
-LOAD ne fait que les CHR, vous devez fournir un nom de fichier image de 240 pixels de largeur obligatoire. Reprenez keys.bmp si vous voulez travailler sur les CHR, et en faire d'autres. Au passage si quelqu'un veut bien refaire ce fichier, ça m'aiderai énormément. Et surtout soyez libre de mettre autant de caractères que vous le souhaitez, je les ajouterai sans problèmes. Le tout est que le fichier reste à 240 de largeur. Vous pouvez prolonger la longueur aussi loin que vous voulez.
-Si vous glissez un fichier sur le .exe, il tentera d'exécuter le programme écrit dedans.
-Comme vous le voyez, j'ai ajouté la commande TRANSPARENT, je vous laisse trouver à quoi il sert :B (TRANSPARENT [0/1])
0.1 b4 :
- Ajout des calculs dans la console
- On peut mettre des trucs dans des variables
Voilà tout, si vous avez des questions, des commentaires, des idées voire même si vous avez envie d'apporter un coup de main, n'hésitez pas à en parler. ^^
Dernière édition par RayTro le Mar 6 Sep - 22:27, édité 15 fois
Re: [Langage]PetitBasic
Si mes connaissances de Petit Computer peuvent t'aider, je ferai de mon mieux pour t'aiguiller ^^.
Excellent projet en tout cas.
Excellent projet en tout cas.
Re: [Langage]PetitBasic
Ok alors là clairement...Si tu arrives à au bout de ce projet même si il y a des bugs je t'appelles Dieu mais même si tu dors pas pendant plusieurs mois faut que tu le finisse sa serais tellement bien!!!
dreion- Messages : 16
Date d'inscription : 01/10/2015
Age : 24
Localisation : Loire Atlantique/st nazaire
Re: [Langage]PetitBasic
Pour le moment j'ai commencé à travailler sur le découpage des lignes de codes de l'utilisateur.
J'ai déterminé qu'il existait 5 types différents d'éléments de code :
- Les labels, commençant par un @ puis suivi du nom du label
- Les calculs, tels que "8+3","uneVar - 8", bref généralement c'est une série d'opérandes délimitées par des opérateurs (+-*/ et % pour modulo, prévenir si il y en a d'autres)
- Les "expressions", qui sont en fait les assignations : "variable = 31", "chaine$ = 'salut'"
- Les commandes, qui sont les principaux éléments des lignes de code, commençant par le nom de la commande, suivi d'un espace et de plusieurs arguments séparés par des virgules.
- Les fonctions, qui sont de la forme "uneFonction(arg1,arg2...)", qui renvoient une valeur.
J'ai repéré quelques particularités parmi ces types :
- les labels n'ont pas d'arguments (c'est qu'un seul mot sans espaces)
- les arguments des fonctions et commandes peuvent être des calculs ou d'autres fonctions
- les expressions ont un seul mot (variable obligatoire) à gauche de l'égal, et à droite se trouvent calculs ou fonctions.
- notez aussi qu'une commande ne peut pas avoir d'autres commandes en argument.
-> quelques exceptions arriveront au niveau des if - else, qui peuvent eux avoir des commandes sur la même ligne, j'hésite à créer un nouveau type spécifique à ces exceptions. à voir plus tard.
ça fait énormément d'éléments à prendre en compte, et surtout qu'il est fort probable que j'ai oublié certains cas particuliers. N'hésitez pas à faire part de ce que vous pensez à ce sujet, si vous avez des idées de conception pour décortiquer proprement les lignes de code je suis preneur, même si vous imaginez des actions un peu complexes à faire c'est probable que ça soit déjà faisable sur PC sans trop d'efforts.
J'ai déterminé qu'il existait 5 types différents d'éléments de code :
- Les labels, commençant par un @ puis suivi du nom du label
- Les calculs, tels que "8+3","uneVar - 8", bref généralement c'est une série d'opérandes délimitées par des opérateurs (+-*/ et % pour modulo, prévenir si il y en a d'autres)
- Les "expressions", qui sont en fait les assignations : "variable = 31", "chaine$ = 'salut'"
- Les commandes, qui sont les principaux éléments des lignes de code, commençant par le nom de la commande, suivi d'un espace et de plusieurs arguments séparés par des virgules.
- Les fonctions, qui sont de la forme "uneFonction(arg1,arg2...)", qui renvoient une valeur.
J'ai repéré quelques particularités parmi ces types :
- les labels n'ont pas d'arguments (c'est qu'un seul mot sans espaces)
- les arguments des fonctions et commandes peuvent être des calculs ou d'autres fonctions
- les expressions ont un seul mot (variable obligatoire) à gauche de l'égal, et à droite se trouvent calculs ou fonctions.
- notez aussi qu'une commande ne peut pas avoir d'autres commandes en argument.
-> quelques exceptions arriveront au niveau des if - else, qui peuvent eux avoir des commandes sur la même ligne, j'hésite à créer un nouveau type spécifique à ces exceptions. à voir plus tard.
ça fait énormément d'éléments à prendre en compte, et surtout qu'il est fort probable que j'ai oublié certains cas particuliers. N'hésitez pas à faire part de ce que vous pensez à ce sujet, si vous avez des idées de conception pour décortiquer proprement les lignes de code je suis preneur, même si vous imaginez des actions un peu complexes à faire c'est probable que ça soit déjà faisable sur PC sans trop d'efforts.
Re: [Langage]PetitBasic
Et bien je te souhaite bonne chance car ça n'as pas l'air d'être de la tarte ce projet ! Ce sera super cool de pouvoir tester no programmes sur la version pc si il n'y a pas de différences !!
Re: [Langage]PetitBasic
Les labels ont droit au tiret bas _
Les arguments des fonctions et commandes peuvent être aussi des variables.
Tu as aussi des variables du système, ceux que l'utilisateur ne modifie pas mais qui changent de valeur, tu dois avoir quelques équivalents je pense. Ex: TIME$, CSRX et CSRY (position du curseur)...
Certaines commandes ne sont utilisables qu'en Mode RUN (la console) comme RUN, LIST...
Tu as aussi AND, OR, XOR et NOT, je ne sais dans quel type tu les places.
Les arguments des fonctions et commandes peuvent être aussi des variables.
Tu as aussi des variables du système, ceux que l'utilisateur ne modifie pas mais qui changent de valeur, tu dois avoir quelques équivalents je pense. Ex: TIME$, CSRX et CSRY (position du curseur)...
Certaines commandes ne sont utilisables qu'en Mode RUN (la console) comme RUN, LIST...
Tu as aussi AND, OR, XOR et NOT, je ne sais dans quel type tu les places.
Re: [Langage]PetitBasic
En effet j'ai oublié de penser aux opérateurs booléens, et aux variables système... va falloir réfléchir autrement le système de vérification de syntaxe. Je pense le recommencer de zéro car ça commence à faire énormément d'éléments à gérer et je pense qu'il va falloir réfléchir sur papier avant d'entreprendre quoi que ce soit sur ce point là.
Edit :
J'ai trouvé une meilleure solution, et toute simple en plus : je vais travailler sur la chaîne de caractère contenant la ligne de code directement.
Plutôt que détecter les caractéristiques de la ligne, qui rendait les vérifications interminables - tant il existait de cas différents - je vais effectuer des remplacements dans la chaîne un peu partout, à l'aide de cet algorithme :
Vous voyez quatre parties distinctes : translateVars, doOperations, execFunctions et execCommand.
-> translateVars : remplace les noms de variables par leur valeur dans la ligne
-> doOperation : effectue les calculs présents dans la ligne, tout ce qui est calculable, à savoir des chiffres séparés par des opérateurs. Il ne fait rien s'il faut le résultat d'une fonction dans le calcul (ex : 5 + 1 * ABS(-4) )
-> execFunctions : exécute les fonctions quand ils ont tous leurs paramètres remplacés par des chiffres ( ne fait rien en cas de "ABS(17-22)" par exemple) et les remplace par les valeurs qu'ils retournent (si dans la chaîne il y a un ABS(-4), il le remplacera par 4)
Il est important de savoir que ces fonctions renvoient un booléen VRAI si ils ont modifié la ligne, et FAUX si rien n'a changé.
-> Enfin, une fois la chaîne bien modifiées par les diverses fonctions, on fait execCommand, qui exécute la commande. Si jamais il y a des éléments incohérents, il renverra une erreur.
Dans tout ça, le seul problème viendrait des éventuelles chaînes de caractères se trouvant dans la ligne (faudrait pas exécuter un calcul présent dans une chaîne de caractère. Problématique à résoudre si quelqu'un a une idée avant que je me penche dessus).
Edit :
J'ai trouvé une meilleure solution, et toute simple en plus : je vais travailler sur la chaîne de caractère contenant la ligne de code directement.
Plutôt que détecter les caractéristiques de la ligne, qui rendait les vérifications interminables - tant il existait de cas différents - je vais effectuer des remplacements dans la chaîne un peu partout, à l'aide de cet algorithme :
- Code:
translateVars(line)
TANT QUE doOperations(line) OU execFunctions(line) OU (i > 32) FAIRE
FIN TANT QUE
execCommand(line)
Vous voyez quatre parties distinctes : translateVars, doOperations, execFunctions et execCommand.
-> translateVars : remplace les noms de variables par leur valeur dans la ligne
-> doOperation : effectue les calculs présents dans la ligne, tout ce qui est calculable, à savoir des chiffres séparés par des opérateurs. Il ne fait rien s'il faut le résultat d'une fonction dans le calcul (ex : 5 + 1 * ABS(-4) )
-> execFunctions : exécute les fonctions quand ils ont tous leurs paramètres remplacés par des chiffres ( ne fait rien en cas de "ABS(17-22)" par exemple) et les remplace par les valeurs qu'ils retournent (si dans la chaîne il y a un ABS(-4), il le remplacera par 4)
Il est important de savoir que ces fonctions renvoient un booléen VRAI si ils ont modifié la ligne, et FAUX si rien n'a changé.
-> Enfin, une fois la chaîne bien modifiées par les diverses fonctions, on fait execCommand, qui exécute la commande. Si jamais il y a des éléments incohérents, il renverra une erreur.
Dans tout ça, le seul problème viendrait des éventuelles chaînes de caractères se trouvant dans la ligne (faudrait pas exécuter un calcul présent dans une chaîne de caractère. Problématique à résoudre si quelqu'un a une idée avant que je me penche dessus).
Dernière édition par RayTro le Jeu 4 Aoû - 19:47, édité 1 fois
Re: [Langage]PetitBasic
C'est vrai que ça serait embêtant, faudrait l'empêcher de faire des calculs entre les guillemêts ou dans une variable alphanumérique. Faudrait vérifier ou exclure les chaînes de caractères pour pas faire un doOperations.
Faudrait que doOperations ignore les chaines de caractères.
(Je sais pas si mon commentaire aide vraiment).
Et est-ce qu'il va comprendre que "1+2"*2 devient "1+21+2" ?
Faut tester.
Faudrait que doOperations ignore les chaines de caractères.
(Je sais pas si mon commentaire aide vraiment).
Et est-ce qu'il va comprendre que "1+2"*2 devient "1+21+2" ?
Faut tester.
Re: [Langage]PetitBasic
@J8B : pour le moment j'ai fait une fonction pour exclure toutes les chaînes de caractères qu'il rencontre, et une autre pour les restaurer.
En fait il remplace tout ce qui se trouve entre des guillemets par des variables temporaires portant 10 caractères aléatoires.
Juste au passage comment on fait dans PTC pour mettre des guillemets dans une chaîne ?
Aujourd'hui je travaille d’arrache-pied sur doOperations, C'est bien plus compliqué que ça en a l'air, de chercher dans la chaîne pour calculer des trucs complexes, comme par exemple (((3*(12.223+ 15)) - 7)*21)/7
Encore plus avec la présence de fonctions, ce qui risque de me prendre quelques jours à m'arracher les cheveux là dessus.
En fait il remplace tout ce qui se trouve entre des guillemets par des variables temporaires portant 10 caractères aléatoires.
Juste au passage comment on fait dans PTC pour mettre des guillemets dans une chaîne ?
Aujourd'hui je travaille d’arrache-pied sur doOperations, C'est bien plus compliqué que ça en a l'air, de chercher dans la chaîne pour calculer des trucs complexes, comme par exemple (((3*(12.223+ 15)) - 7)*21)/7
Encore plus avec la présence de fonctions, ce qui risque de me prendre quelques jours à m'arracher les cheveux là dessus.
Re: [Langage]PetitBasic
Logiquement dans PTC pour mettre des guillemets, on ne peut pas, il faut tricher en modifiant un caractère en un nouveau guillemets. On a beaucoup de caractères qui ne servent pas souvent, par exemple ceux japonais et des caractères spéciaux comme le coeur, le carreau, le trèfle..., on a l'embarras du choix pour choisir celui qu'on veut modifier.
J'imagine que c'est compliqué, surtout que tu dois coder la priorité des calculs, d'abord la dernière parenthèses en privilégiant la multiplication puis la division,... il faut penser à tout et c'est de longue haleine.
J'imagine que c'est compliqué, surtout que tu dois coder la priorité des calculs, d'abord la dernière parenthèses en privilégiant la multiplication puis la division,... il faut penser à tout et c'est de longue haleine.
Re: [Langage]PetitBasic
Pour les caractères il y a une fonction genre TEXT() qui permet d'afficher un caractère et en mettant le bon nombre on obtient des guillemets voilà :3
Re: [Langage]PetitBasic
Bon, j'ai pas mal travaillé sur ces systèmes de calculs et tout ce qui va avec, je trouve qu'effectuer des calculs de cette façon n'est pas ultra rapide, mais bon on verra plus tard pour recoder la fonction de calcul, vu que c'est elle qui ralentit un peu le tout.
J'ai fait en sorte que si le résultat de la commande est une valeur on l'écrit, ça permet d'avoir un aperçu du résultat des calculs.
C'était un peu n'importe quoi niveau codage, j'ai même songé à utiliser une librairie externe pour gérer les calculs, peut-être que ça sera le cas plus tard.
Malheureusement, les opérations ne pourront pas se faire avec les chaînes de caractères, comme "a"*3, faute d'avoir un moteur de calcul performant pour gérer ces cas là. (ça arrivera peut-être un jour, mais ça n'est pas une priorité pour le moment)
Du coup me reste plus qu'à faire execFunctions et execCommands. ça va être une partie drôle et pas trop complexe. Si vous pouvez dresser une liste de toutes les fonctions et commandes, ça faciliterait un peu la tache. Vu que le site officiel de PTC n'existe plus, au pire si quelqu'un a la documentation ça pourrait aussi aider.
EDIT : J'ai ajouté un lien vers les builds de PetitBasic. Vous pouvez à tout moment ouvrir ce lien pour retrouver les exécutables du logiciel. Allez au premier post pour ça. N'hésitez pas à tester pour remonter tous les problèmes que vous pouvez trouver.
J'ai fait en sorte que si le résultat de la commande est une valeur on l'écrit, ça permet d'avoir un aperçu du résultat des calculs.
C'était un peu n'importe quoi niveau codage, j'ai même songé à utiliser une librairie externe pour gérer les calculs, peut-être que ça sera le cas plus tard.
Malheureusement, les opérations ne pourront pas se faire avec les chaînes de caractères, comme "a"*3, faute d'avoir un moteur de calcul performant pour gérer ces cas là. (ça arrivera peut-être un jour, mais ça n'est pas une priorité pour le moment)
Du coup me reste plus qu'à faire execFunctions et execCommands. ça va être une partie drôle et pas trop complexe. Si vous pouvez dresser une liste de toutes les fonctions et commandes, ça faciliterait un peu la tache. Vu que le site officiel de PTC n'existe plus, au pire si quelqu'un a la documentation ça pourrait aussi aider.
EDIT : J'ai ajouté un lien vers les builds de PetitBasic. Vous pouvez à tout moment ouvrir ce lien pour retrouver les exécutables du logiciel. Allez au premier post pour ça. N'hésitez pas à tester pour remonter tous les problèmes que vous pouvez trouver.
Re: [Langage]PetitBasic
Mais voyons toutes les fonctions et commandes sont dans mon aide sur Petit Computer mais si tu préfères le manuel : Clique ici
Re: [Langage]PetitBasic
Je sais bien que tu as fait un programme pour avoir toutes les fonction ^^ je l'ai sur ma DS, c'est juste pas pratique de coder avec sa DS sur le bureau, surtout qu'il faut le chargeur et que j'ai pas de prises disponibles proche ^^'
Merci pour le manuel ^^
EDIT : Ajout du build 7, allez le télécharger dans le premier post si vous voulez.
Changements :
-Ajout de quelques commandes : LOCATE, PRINT, COLOR, LOAD, TRANSPARENT et CLS
-LOAD ne fait que les CHR, vous devez fournir un nom de fichier image de 240 pixels de largeur obligatoire. Reprenez keys.bmp si vous voulez travailler sur les CHR, et en faire d'autres. Au passage si quelqu'un veut bien refaire ce fichier, ça m'aiderai énormément. Et surtout soyez libre de mettre autant de caractères que vous le souhaitez, je les ajouterai sans problèmes. Le tout est que le fichier reste à 240 de largeur. Vous pouvez prolonger la longueur aussi loin que vous voulez.
-Si vous glissez un fichier sur le .exe, il tentera d'exécuter le programme écrit dedans.
-Comme vous le voyez, j'ai ajouté la commande TRANSPARENT, je vous laisse trouver à quoi il sert :B (TRANSPARENT [0/1])
Pour les fonctions ça attendra un petit peu, j'ai été inspiré pour les commandes aujourd'hui.
Edit 2 :
En fait pour la suite je pense que ça serait sympa d'essayer de communiquer par chat instantané (oral ou écrit, peu importe), ça pourrait être sympa ^^
Edit 3 :
Ajout du Build 8 : les fonctions sont arrivées ! pour l'instant il n'y a que ABS, ASC et RGB.
Vu que le système de palette est un peu désuet face à la puissance des PCs de maintenant, puis aussi c'est un peu n'importe quoi à coder, du coup la commande COLOR supporte les couleurs HTML (type #RRGGBB dont RR, GG ou BB sont entre 00 et FF (0 à 255)).
Vous pouvez utiliser la fonction RGB dans COLOR, pour pouvoir choisir l'une des 16 millions de couleurs qu'offrent la fonction.
Merci pour le manuel ^^
EDIT : Ajout du build 7, allez le télécharger dans le premier post si vous voulez.
Changements :
-Ajout de quelques commandes : LOCATE, PRINT, COLOR, LOAD, TRANSPARENT et CLS
-LOAD ne fait que les CHR, vous devez fournir un nom de fichier image de 240 pixels de largeur obligatoire. Reprenez keys.bmp si vous voulez travailler sur les CHR, et en faire d'autres. Au passage si quelqu'un veut bien refaire ce fichier, ça m'aiderai énormément. Et surtout soyez libre de mettre autant de caractères que vous le souhaitez, je les ajouterai sans problèmes. Le tout est que le fichier reste à 240 de largeur. Vous pouvez prolonger la longueur aussi loin que vous voulez.
-Si vous glissez un fichier sur le .exe, il tentera d'exécuter le programme écrit dedans.
-Comme vous le voyez, j'ai ajouté la commande TRANSPARENT, je vous laisse trouver à quoi il sert :B (TRANSPARENT [0/1])
Pour les fonctions ça attendra un petit peu, j'ai été inspiré pour les commandes aujourd'hui.
Edit 2 :
En fait pour la suite je pense que ça serait sympa d'essayer de communiquer par chat instantané (oral ou écrit, peu importe), ça pourrait être sympa ^^
Edit 3 :
Ajout du Build 8 : les fonctions sont arrivées ! pour l'instant il n'y a que ABS, ASC et RGB.
Vu que le système de palette est un peu désuet face à la puissance des PCs de maintenant, puis aussi c'est un peu n'importe quoi à coder, du coup la commande COLOR supporte les couleurs HTML (type #RRGGBB dont RR, GG ou BB sont entre 00 et FF (0 à 255)).
Vous pouvez utiliser la fonction RGB dans COLOR, pour pouvoir choisir l'une des 16 millions de couleurs qu'offrent la fonction.
Re: [Langage]PetitBasic
J'ai testé un peu. TRANSPARENT ne fait rien de spécial chez moi ou alors je l'ai mal utilisé.
N'oublie pas de faire un manuel au fur et à mesure. J'essaierai de te faire un CHR de police quand j'aurai le temps.
N'oublie pas de faire un manuel au fur et à mesure. J'essaierai de te faire un CHR de police quand j'aurai le temps.
Re: [Langage]PetitBasic
Bonne idée pour le manuel !
Un indice: tu fais "TRANSPARENT 1" puis joue avec "COLOR x, y" avec x et y compris entre 0 et F.
Un indice: tu fais "TRANSPARENT 1" puis joue avec "COLOR x, y" avec x et y compris entre 0 et F.
Re: [Langage]PetitBasic
Ok j'essaierai ^^.
J'ai fait des test avec PRINT, voici ce que ça donne :
Comme tu vois, si la variable n'a pas de valeur, il renvoie son nom, et aussi j'ai fait exprès de faire des erreurs de syntaxe avec ceux qui ont des espaces mais il ne les considère pas comme faux.
J'ai fait des test avec PRINT, voici ce que ça donne :
Comme tu vois, si la variable n'a pas de valeur, il renvoie son nom, et aussi j'ai fait exprès de faire des erreurs de syntaxe avec ceux qui ont des espaces mais il ne les considère pas comme faux.
Re: [Langage]PetitBasic
@J8B En fait par défaut les variables qu'il n'a pas réussi à remplacer sont interprétées comme des chaînes, à la différence que si il n'y a pas de guillemets il retire tous les espaces. Je ne sais pas encore comment appréhender ce problème, entre retourner une erreur ou laisser interpréter comme texte...
Pour ce qui est de la fonction COLOR, il est capable de prendre deux paramètres, le premier pour la couleur du texte, et le second pour le fond.
EDIT : ça y est, le manuel est fait. Vous pouvez le retrouver tout en haut juste à côté du lien de téléchargement de PetitBasic.
Pour ce qui est de la fonction COLOR, il est capable de prendre deux paramètres, le premier pour la couleur du texte, et le second pour le fond.
EDIT : ça y est, le manuel est fait. Vous pouvez le retrouver tout en haut juste à côté du lien de téléchargement de PetitBasic.
Re: [Langage]PetitBasic
Tu devrais l'interpréter comme si c'était une variable et renvoyer 0, comme dans PTC.
Quelques tests avec PRINT avec quelques bugs aussi :
L'erreur en orange s'est produite car je voulais écrire "différence" et je l'ai effacé pour "changement", il n'a pas apprécié le "é" apparemment.
Toujours pas compris TRANSPARENT, il a pas l'air de fonctionner chez moi
Voici la police que j'ai faite:
Edit 17h40:
Tu as aussi un soucis avec COLOR qui n'accepte pas F. LOCATE quand à lui, n'aime pas qu'on remonte dans les lignes, il place le > au bon endroit mais le _ reste sur la même ligne.
Quelques tests avec PRINT avec quelques bugs aussi :
L'erreur en orange s'est produite car je voulais écrire "différence" et je l'ai effacé pour "changement", il n'a pas apprécié le "é" apparemment.
Toujours pas compris TRANSPARENT, il a pas l'air de fonctionner chez moi
Voici la police que j'ai faite:
Edit 17h40:
Tu as aussi un soucis avec COLOR qui n'accepte pas F. LOCATE quand à lui, n'aime pas qu'on remonte dans les lignes, il place le > au bon endroit mais le _ reste sur la même ligne.
Re: [Langage]PetitBasic
Merci pour toutes ces informations ^^ je vais les corriger ce soir au possible, et remplacer la police de base qui - on peut le dire - est un peu sale avec les lettres longues comme le y ou le p.
Pour ce qui est du COLOR avec F, c'est normal, c'est parce que F c'est le blanc.
C'est cool que tu testes en même temps, ça permet de ne pas passer à côté d'éventuels bugs ^^
Pour l'utilisation de TRANSPARENT, voici un petit bout de code qui permet de voir son effet :
PS : si tu as des remarques, des retours concernant le manuel n'hésites pas aussi, j'ai pondu ça en une soirée et peut-être qu'il y a des trucs un peu mal fait comme les descriptions, la fonction de recherche qui rend désuète les autres parties ou encore la mise en page qui n'est pas ergonomique.
EDIT : Arrivée du Build 9 qui corrige simplement tous les bugs cités au dessus, remplaçant les paramètres de COLOR pour que ça soit de 0 à 15 et non plus de 0 à F, et possibilité d'utiliser une chaîne de caractère contenant le nom anglais de la couleur comme "black","red", etc.
Pour ce qui est du COLOR avec F, c'est normal, c'est parce que F c'est le blanc.
C'est cool que tu testes en même temps, ça permet de ne pas passer à côté d'éventuels bugs ^^
Pour l'utilisation de TRANSPARENT, voici un petit bout de code qui permet de voir son effet :
- Code:
transparent 1
color A,0
cls
print "Hello World!"
PS : si tu as des remarques, des retours concernant le manuel n'hésites pas aussi, j'ai pondu ça en une soirée et peut-être qu'il y a des trucs un peu mal fait comme les descriptions, la fonction de recherche qui rend désuète les autres parties ou encore la mise en page qui n'est pas ergonomique.
EDIT : Arrivée du Build 9 qui corrige simplement tous les bugs cités au dessus, remplaçant les paramètres de COLOR pour que ça soit de 0 à 15 et non plus de 0 à F, et possibilité d'utiliser une chaîne de caractère contenant le nom anglais de la couleur comme "black","red", etc.
Re: [Langage]PetitBasic
Ah bah ça marche mieux avec le CLS ^^. J'ai rien à dire sur le manuel pour l'instant ^^
Ensuite ce qui serait bien dans la console serait de pouvoir revenir en arrière dans une ligne pour corriger une faute, au lieu de devoir tout effacer jusqu'à la faute.
J'ai essayé de glisser un fichier texte sur le .exe, le programme a planté :
PetitBasic.Command a rencontré un problème et doit être fermé. Nous vous prions de nous excuser pour le désagrément encouru.
Ensuite ce qui serait bien dans la console serait de pouvoir revenir en arrière dans une ligne pour corriger une faute, au lieu de devoir tout effacer jusqu'à la faute.
J'ai essayé de glisser un fichier texte sur le .exe, le programme a planté :
PetitBasic.Command a rencontré un problème et doit être fermé. Nous vous prions de nous excuser pour le désagrément encouru.
Re: [Langage]PetitBasic
Le build 10 corrige ce problème, je pense que le passage à la 0.2 amènera les conditions, les boucles, les fonctions spéciales quoi, sans les labels malheureusement, mais avec une nouveauté : les Subs ! *suspense*
En attendant les builds de la 0.1 continueront régulièrement
En attendant les builds de la 0.1 continueront régulièrement
Re: [Langage]PetitBasic
J'ai remarqué que l'utilisation du processeur est à 100% quand Petit Basic est ouvert (en tout cas chez moi). Je ne sais pas si c'est un problème ou pas.
Re: [Langage]PetitBasic
C'est intéressant à noter, il va falloir que je regarde ça.
Après je suppose que c'est parce qu'il exécute constamment du code, va falloir trouver un moyen de mettre en standby le mode RUN quand rien ne se passe.
Après trouver un moyen de limiter la vitesse d'exécution car par exemple chez moi le logiciel tournera aussi à 100% mais sera aussi extrêmement rapide contrairement à toi.
Après je suppose que c'est parce qu'il exécute constamment du code, va falloir trouver un moyen de mettre en standby le mode RUN quand rien ne se passe.
Après trouver un moyen de limiter la vitesse d'exécution car par exemple chez moi le logiciel tournera aussi à 100% mais sera aussi extrêmement rapide contrairement à toi.
Re: [Langage]PetitBasic
@J8B : après avoir jeté un oeil au niveau des performances, il s'avérait que mon application consommait 13% de mon processeur quand je le laissait tourner sans rien faire.
J'ai décidé de mettre un très petit temps de repos entre chaque boucle, de manière à ce que ça soit le moins perceptible possible. Ce temps est de 10 millisecondes, et de ce fait maintenant PetitBasic ne consomme plus que 3% du processeur pour moi.
à voir par la suite lorsqu'il y aura plus de fonctions s'il faut essayer de mettre un cap de 60 images par secondes par exemple, pour éviter que chez certains l'application tourne en accéléré par rapport à d'autres.
Pour ce qui est de l'avancement de la 0.2 :
- Les if sont implémentés, avec leurs else, elseif et ifend
- Il m'a fallu travailler sur les conditions, et pour cela j'ai dû passer par des Or et des And.
Pour une question (très) pratique, ceux-ci sont remplacés par des & et des |
exemple de if :
Maintenant je pense que je vais tester de fond en comble voir si il n'y aura pas de bizarreries.
Edit : Les if imbriqués fonctionnent aussi maintenant !
Edit 2 : J'ai fait la boucle For, c'était plus simple à gérer que le if, mais j'apporte avec ça une mauvaise nouvelle : c'est plutôt lent !
J'ai décidé de mettre un très petit temps de repos entre chaque boucle, de manière à ce que ça soit le moins perceptible possible. Ce temps est de 10 millisecondes, et de ce fait maintenant PetitBasic ne consomme plus que 3% du processeur pour moi.
à voir par la suite lorsqu'il y aura plus de fonctions s'il faut essayer de mettre un cap de 60 images par secondes par exemple, pour éviter que chez certains l'application tourne en accéléré par rapport à d'autres.
Pour ce qui est de l'avancement de la 0.2 :
- Les if sont implémentés, avec leurs else, elseif et ifend
- Il m'a fallu travailler sur les conditions, et pour cela j'ai dû passer par des Or et des And.
Pour une question (très) pratique, ceux-ci sont remplacés par des & et des |
exemple de if :
- Code:
if var > 2
print var, " est supérieur à 2"
elseif var < 2
print var, " est inférieur à 2"
else
print var, "est égal à 2"
ifend
Maintenant je pense que je vais tester de fond en comble voir si il n'y aura pas de bizarreries.
Edit : Les if imbriqués fonctionnent aussi maintenant !
- Code:
if var > 10
print var, " est supérieur à 10"
elseif var < 10
if var > 5
print var, " est entre 5 et 10"
else
print var, " est inférieur à 5"
ifend
else
print var, " est égal à 10"
ifend
Edit 2 : J'ai fait la boucle For, c'était plus simple à gérer que le if, mais j'apporte avec ça une mauvaise nouvelle : c'est plutôt lent !
- Code:
for i=0 to 10
for ii = 0 to 10
print i, " : ", ii
next
next
Page 1 sur 2 • 1, 2
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum