Tutoriel : Intro au DarkBASIC
Résolu
Utilisateur anonyme
-
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
kilian Messages postés 8732 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'arrive avec un tutoriel dont j'aimerai que vous le rajouteriez dans la FAQ s'il vous plait.
Merci encore.
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Vous le savez très bien, à l'origine le langage DarkBASIC sert à créer des jeux.
Ce tutoriel ne vous explique pas ceci, car des aides sont disponibles dans ce logiciel pour pouvoir le faire.
Ce tutoriel va vous expliquer les bases pour savoir comment utilisé le DarkBASIC comme un vrai logiciel.
Ce tutoriel nécessite aussi de bonnes bases en programmation.
__TOC__
==1. Le début du code==
Le début du code commence par l'affichage de la fenêtre.
Edit : A sont démarrage, un programme compilé en DarkBASIC démarrera en plein écran et nécessitera la d3drm.dll qui est généralement indisponible dans Windows Vista.
Donc, il faut déjà que vous ayez une idée de ce que vous voulez faire apparaitre à l'écran.
Le DarkBASIC utilise le rem (comme en Batch) pour afficher un commentaire.
Voici à quoi ressemble le début du code de EDPLN 2 :
Si vous êtes asser fort en Anglais ou en programmation, vous avez déjà compris de quoi il sagit.
Ce fonctions sont aussi expliqués dans l'aide.
Mais je vous explique quand même :
Au démarrage, ce code affichera une fenêtre avec le titre EDPLN 2 Freeware SE; affichera la souris et désactivera le touche Echap pour faire quitter le programme.
Pour la suite, il faut bien sur savoir que va faire votre programme.
==2. Le corps du code==
J'ai choisi l'idéal : Un programme qui sauvegarde les fichiers du PC dans un disque amovible.
===2.1 Les menus===
Donc, comme ceci est un logiciel, il faut que l'utilisateur ai un minimum de choix ... comme un menu.
Ce menu va donc afficher ces choix de la façon d'un script Batch : A pour sauvegarder, B pour définir un filtre, C pour choisir le chemin de sorti, Q pour quitter.
Pour commencer, ce code aura besoin d'une boucle principale : ici, c'est la Do/Loop.
Dans cette boucle, on va d'abord récupérer les données (actions) de l'utilisateur puis utiliser ces dernières pour faire fonctionner le programme.
Donc, il va nous falloir récupérer les lettres du clavier (input) et les analysées, puis les utilisés.
Ce code devrai s'écrire comme ceci (sans oublier d'avoir créer le début du code avant):
Voilà, vous avez un menu tout simple que vous pourrez changer chez vous, ajouter des choix et tout et tout ...
Mas vous allz me dire, ça marche pas là ?!? Bah non ...
Car on a pas encore créer les sub-fonctions (Sous-fonctions).
... toujours pas compris ? bon, vous avez vu lors de l'analyse des choix ces gosub, ils servent à se déplacer vers un sous-fonction.
Mais comme nos sous fonctions n'existent pas, le compilateur est perdu ...
On va donc créer ces sous-fonctions.
===2.2 Les sous-fonctions===
Dans ce code, il y a 4 sous-fonctions ... et on en a déjà fait une ... (oui, juste au début du dernier code évaluer ci dessus là ... le fameux start:)
Donc il faut finir de rédiger les 3 dernières sous-fonctions.
Donc, il y a déjà la première sous-fonction : option1 qui va être l'endroit où choisir les filtres.
Les sous-fonctions ne ce placent pas n'importe où, le mieux est d'en crée à la fin du code. Ceci peut ralentir l'exécution du code, mais nous verrons à la fin comment y remédier.
Dans cette sous-fonction, il y aura le même principe que start:
(Début de boucle, affichage de l'interface, récupération des données, analyse des données, exécution finale, fin de boucle.)
Il y aura aussi dans cette sous-fonction l'utilisation d'un tableau ... comme une base de données.
Donc, on va faire tout ça :p
Pour la prochaine sous-fonction, la option2, il faudra commencer par afficher le chemin de sorti courant (par défaut) F:\
Ensuite, on demande à l'utilisateur si il veut vraiment modifier l'accès.
Par un oui, on lui fait entrer la nouvelle valeur exploitée par access$
Par un non, on retourne au menu principal.
Ça ne devrai pas être trop dur :p
Et voilà ... tout simple ... je ne vous ai pas expliquer car vous devriez savoir ce qu'il se passe. ^^
Vous pouvez d'ailleurs, je pense, créer votre propre sous-fonction qui servira à définir le/les chemins d'accès de la source de la copie.
Mais ... ne vous soulagez pas trop vite : ce n'est pas fini ... :/
Il nous manque encore la sous-fonction fondamentale à l'utilisation du code : save ... qui vas nous servir à faire des copies de sauvegardes.
C'est la master, la mastodonte ... the king ... ^^
Allez, finit de "rigoler" : on va le finir ce code.
Mais ... dites moi ... le DarkBASIC ne nous permet pas de copier des dossiers ? non ... des fichiers oui mais pas des dossiers ...
Ho non ... c'est l'apocalypse, la fin du monde ! Mais comment va-t-on faire ?!?
Une technique simple concise à utiliser un autre code capable de le faire, ici on utilisera le Batch.
Mais ... vous ne connaissez pas forcement le Batch ... ce n'est pas grave, il y a des tutos sur tout l'univers du Net ;-)
Donc, on va utiliser le DarkBASIC pour écrire un fichier Batch et le lancer par la suite.
Heureusement pour nous que le Batch n'a pas besoin d'être compilé pour être exécutable ^^
On va donc procéder comme suit :
Nous allons voir maitenant tout ce que vous avez appris ici :p
==3. En résumé==
Vous avez donc ""appris"" :
1) L'utilisation de l'algorithme (en quelques sortes)
2) L'appel d'une fonction du compilateur (logique lol)
3) Faire apparaitre une fenêtre à l'écran.
4) La création d'un menu principal constitué de 3 sous-menus.
5) L'appel de sous-fonctions (sub-functions)
6) L'analyse de données.
7) La récupération de données.
8) L'utilisation d'un tableau (vite vu je l'avou)
9) La gestion d'un fichier en toute sécuritée.
10) Une petite utilisation du Batch ...
Vous aurez sans doute remarquer que le code est incomplet ... désolé ...
Tutoriel de DJ Fire-Black ...
J'arrive avec un tutoriel dont j'aimerai que vous le rajouteriez dans la FAQ s'il vous plait.
Merci encore.
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Vous le savez très bien, à l'origine le langage DarkBASIC sert à créer des jeux.
Ce tutoriel ne vous explique pas ceci, car des aides sont disponibles dans ce logiciel pour pouvoir le faire.
Ce tutoriel va vous expliquer les bases pour savoir comment utilisé le DarkBASIC comme un vrai logiciel.
Ce tutoriel nécessite aussi de bonnes bases en programmation.
__TOC__
==1. Le début du code==
Le début du code commence par l'affichage de la fenêtre.
Edit : A sont démarrage, un programme compilé en DarkBASIC démarrera en plein écran et nécessitera la d3drm.dll qui est généralement indisponible dans Windows Vista.
Donc, il faut déjà que vous ayez une idée de ce que vous voulez faire apparaitre à l'écran.
Le DarkBASIC utilise le rem (comme en Batch) pour afficher un commentaire.
Voici à quoi ressemble le début du code de EDPLN 2 :
set window on set window layout 1,1,1 set window title "EDPLN 2 Freeware SE" show window show mouse disable escapekey sync on gosub start end
Si vous êtes asser fort en Anglais ou en programmation, vous avez déjà compris de quoi il sagit.
Ce fonctions sont aussi expliqués dans l'aide.
Mais je vous explique quand même :
Au démarrage, ce code affichera une fenêtre avec le titre EDPLN 2 Freeware SE; affichera la souris et désactivera le touche Echap pour faire quitter le programme.
Pour la suite, il faut bien sur savoir que va faire votre programme.
==2. Le corps du code==
J'ai choisi l'idéal : Un programme qui sauvegarde les fichiers du PC dans un disque amovible.
===2.1 Les menus===
Donc, comme ceci est un logiciel, il faut que l'utilisateur ai un minimum de choix ... comme un menu.
Ce menu va donc afficher ces choix de la façon d'un script Batch : A pour sauvegarder, B pour définir un filtre, C pour choisir le chemin de sorti, Q pour quitter.
Pour commencer, ce code aura besoin d'une boucle principale : ici, c'est la Do/Loop.
Dans cette boucle, on va d'abord récupérer les données (actions) de l'utilisateur puis utiliser ces dernières pour faire fonctionner le programme.
Donc, il va nous falloir récupérer les lettres du clavier (input) et les analysées, puis les utilisés.
Ce code devrai s'écrire comme ceci (sans oublier d'avoir créer le début du code avant):
start: rem définition des valeurs par défaut access$="F:\" rem début de la boucle principale do cls 0 rem print pour afficher des textes à l'écran (et pas pour imprimer) print "Utilitaire de sauvegarde de fichiers." print " " print "A pour sauvegarder, B pour définir un filtre, C pour changer le chemin de sorti, Q pour quitter. rem Demande une valeur à l'utilisateur et l'enregistre sous key$ input "Choisissez l'action à faire et pressez Enter > ",key$ rem analyse des données reçues if key$<>"A" or key$<>"a" or key$<>"B" or key$<>"b" or key$<>"C" or key$<>"c" or key$<>"Q" or key$<>"q" then print "Veuillez choisir un choix valide." : sleep 2000 : gosub start rem La ligne précédente affiche un message d'erreur pendent 2 secondes puis retourne au début si le choix est invalide. rem Je n'est pas oublier dans la ligne précédente à analyser les minuscules et majuscules. rem Une autre solution aurait été de transformer key$ en minuscule/majuscule pour raccourcir le code. rem Maintenant que l'analyse est faite, il faut utiliser les données. rem On va donc commencer par voir si le premier choix à été fait : if key$="a" or key$="A" then gosub save rem Si le choix été A ou a alors on va sauvegarder. if key$="b" or key$="B" then gosub option1 rem de même pour B, on arrive au sous menu option1 if key$="c" or key$="C" then gosub option2 rem De même pour C pour arriver au sous menu option2 if key$="q" or key$="Q" then end rem Ici, on a vu que si le choix été de quitter, ce programme quittera sans avertir. rem maintenant que les dérivations sont faites, on ferme la boucle par mesure de sécurité (ce qui va nous sauver vous le verrez si vous exécutez ce code quand on aura fini). loop return
Voilà, vous avez un menu tout simple que vous pourrez changer chez vous, ajouter des choix et tout et tout ...
Mas vous allz me dire, ça marche pas là ?!? Bah non ...
Car on a pas encore créer les sub-fonctions (Sous-fonctions).
... toujours pas compris ? bon, vous avez vu lors de l'analyse des choix ces gosub, ils servent à se déplacer vers un sous-fonction.
Mais comme nos sous fonctions n'existent pas, le compilateur est perdu ...
On va donc créer ces sous-fonctions.
===2.2 Les sous-fonctions===
Dans ce code, il y a 4 sous-fonctions ... et on en a déjà fait une ... (oui, juste au début du dernier code évaluer ci dessus là ... le fameux start:)
Donc il faut finir de rédiger les 3 dernières sous-fonctions.
Donc, il y a déjà la première sous-fonction : option1 qui va être l'endroit où choisir les filtres.
Les sous-fonctions ne ce placent pas n'importe où, le mieux est d'en crée à la fin du code. Ceci peut ralentir l'exécution du code, mais nous verrons à la fin comment y remédier.
Dans cette sous-fonction, il y aura le même principe que start:
(Début de boucle, affichage de l'interface, récupération des données, analyse des données, exécution finale, fin de boucle.)
Il y aura aussi dans cette sous-fonction l'utilisation d'un tableau ... comme une base de données.
Donc, on va faire tout ça :p
option1: do cls 0 print "Menu Filtrages des fichiers" print " " input "Veuillez entrer un nom de fichiers à exclure ou "/\" pour quitter",next$ rem là, on va créer un tableau nommé exclude$ pouvant contenir 255x1 données, soit 255 :p dim exclude$(255,1) rem on analyse les données ... if next$="/\" or next$=chr$(34)+"/\"+chr$(34) then exit rem lors de cette analyse de données, on a fait retourner au menu principal l'utilisateur sur sa demande rem en quittant la boucle avec exit. rem Maintenant, on rempli le tableau à l'aide d'une autre boucle : la for, to, next for nb#=1 to 255 rem on analyse si la place est libre if exclude(nb#,1)="" then exclude(nb#,1)=next$ : exit rem on rempli la place seulement si elle est libre puis on sort de la boucle. endif next nb# rem mais ... et si le tableau était plein ?!? rem et bien vous savez comment analyser des données maintenant, bonne chance ^^ rem donc maintenant on ferme la boucle loop rem et on signal au compilateur que la sous-fonction s'arrête là, pour qu'il puisse retourner au menu principal. return
Pour la prochaine sous-fonction, la option2, il faudra commencer par afficher le chemin de sorti courant (par défaut) F:\
Ensuite, on demande à l'utilisateur si il veut vraiment modifier l'accès.
Par un oui, on lui fait entrer la nouvelle valeur exploitée par access$
Par un non, on retourne au menu principal.
Ça ne devrai pas être trop dur :p
option2: do cls 0 print "Changer la sortie de copie." print " " print "Chemin de sortie courant : "+access$ input "Voulez-vous vraiment changer le chemin d'accès ? (o : oui / n : non) >",choice$ if choice$<>"o" or choice$<>"O" or choice$<>"oui" or choice$<>"Oui" or choice$<>"OUI" or choice$<>"n" or choice$<>"N" or choice$<>"non" or choice$<>"Non" or choice$<>"NON" print "Choix invalide." sleep 2000 gosub option2 endif if choice$="o" or choice$="O" or choice$="oui" or choice$="Oui" or choice$="OUI" input "Veuillez entrer un nouveau chemin d'accès >",access$ else exit endif loop return
Et voilà ... tout simple ... je ne vous ai pas expliquer car vous devriez savoir ce qu'il se passe. ^^
Vous pouvez d'ailleurs, je pense, créer votre propre sous-fonction qui servira à définir le/les chemins d'accès de la source de la copie.
Mais ... ne vous soulagez pas trop vite : ce n'est pas fini ... :/
Il nous manque encore la sous-fonction fondamentale à l'utilisation du code : save ... qui vas nous servir à faire des copies de sauvegardes.
C'est la master, la mastodonte ... the king ... ^^
Allez, finit de "rigoler" : on va le finir ce code.
Mais ... dites moi ... le DarkBASIC ne nous permet pas de copier des dossiers ? non ... des fichiers oui mais pas des dossiers ...
Ho non ... c'est l'apocalypse, la fin du monde ! Mais comment va-t-on faire ?!?
Une technique simple concise à utiliser un autre code capable de le faire, ici on utilisera le Batch.
Mais ... vous ne connaissez pas forcement le Batch ... ce n'est pas grave, il y a des tutos sur tout l'univers du Net ;-)
Donc, on va utiliser le DarkBASIC pour écrire un fichier Batch et le lancer par la suite.
Heureusement pour nous que le Batch n'a pas besoin d'être compilé pour être exécutable ^^
On va donc procéder comme suit :
save: cls 0 print "System de sauvgarde par copie" print " " print "Source : "+get dir$() print "Destination : "+access$ print "Voulez-vous vraiment copier le dossier" input "en cours vers "+access$+" ? (o : oui / n : non)>",choice$ if choice$<>"o" or choice$<>"O" or choice$<>"oui" or choice$<>"Oui" or choice$<>"OUI" or choice$<>"n" or choice$<>"N" or choice$<>"non" or choice$<>"Non" or choice$<>"NON" print "Choix invalide." sleep 2000 gosub save endif rem Fermeture d'un éventuel fichier ouvert. if file open(1)=1 then close file 1 rem Suppression d'un éventuel fichier de même nom déjà existant. if file exist("code.bat")=1 then delete file "code.bat" rem création et ouverture d'un fichier Batch (.bat) open to write 1,"code.bat" rem Ecriture du code. write string 1,"@ echo off" write string 1,chr$(13) write string 1,"cd "+get dir$() write string 1,chr$(13) write string 1,"xcopy '"+get dir$()+"' '"+access$+"' /s /c /q /g /h /x /y" write string 1,chr$(13) write string 1,"exit" close file 1 rem maintenant que le code est crée, on l'execute ... execute file "%windir%\System32\cmd.exe", get dir$()+"code.bat", get dir$(), 1 rem Il n'est pas sur à 100% que cette opération fonctionne :s rem Not application vas attendre que la copie soit terminé avant de continuer. rem Ne seront copier que les fichiers et sous-dossiers du répértoire actuel du code DarkBASIC. print "Copie terminé." sync rem le bloc suivant va permettre d'attendre une réaction de la part de l'utilisateur. while scancode=0 endwhile rem et voilà, c'est la fin du code ... return
Nous allons voir maitenant tout ce que vous avez appris ici :p
==3. En résumé==
Vous avez donc ""appris"" :
1) L'utilisation de l'algorithme (en quelques sortes)
2) L'appel d'une fonction du compilateur (logique lol)
3) Faire apparaitre une fenêtre à l'écran.
4) La création d'un menu principal constitué de 3 sous-menus.
5) L'appel de sous-fonctions (sub-functions)
6) L'analyse de données.
7) La récupération de données.
8) L'utilisation d'un tableau (vite vu je l'avou)
9) La gestion d'un fichier en toute sécuritée.
10) Une petite utilisation du Batch ...
Vous aurez sans doute remarquer que le code est incomplet ... désolé ...
Tutoriel de DJ Fire-Black ...
8 réponses
Oups ... je viens de remarquer un bog aprés avoir relut ^^'
Ici :
pardon ...
Ici :
print "A pour sauvegarder, B pour définir un filtre, C pour changer le chemin de sorti, Q pour quitter.Il faut mettre un guillemet à la fin de la ligne.
pardon ...
Je la mettrai dans la faq prochainement, merci en tout cas!
Au passage tu ne voudrais pas ajouter un truc pour savoir comment télécharger Dark Basic?
Au passage tu ne voudrais pas ajouter un truc pour savoir comment télécharger Dark Basic?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voilà j'ai posté ton astuce: http://www.commentcamarche.net/faq/sujet 10586 introduction au dark basic
Et c'est nous qui te remercions ;-)
Et c'est nous qui te remercions ;-)
Oups ^^"" ... il y a au moins une trentaine de bog dans mon truc ...
Bon, voici le code qui devrait fonctionner normalement :-D
et encore mes excuses suivis de mes remerciements ... parce que en fait je n'avai pas tester le code :/ (ha ! c'est malin ça !) mais vaut mieux tard que jamais ;-)
merci encore et vraiment désoler o)
Bon, voici le code qui devrait fonctionner normalement :-D
et encore mes excuses suivis de mes remerciements ... parce que en fait je n'avai pas tester le code :/ (ha ! c'est malin ça !) mais vaut mieux tard que jamais ;-)
set window on set window layout 1,1,1 set window title "System de sauvegarde par copie (1.1)" show window show mouse disable escapekey sync on gosub start end start: rem définition des valeurs par défaut access$="E:\" rem début de la boucle principale do cls 0 rem print pour afficher des textes à l'écran (et pas pour imprimer) print "Utilitaire de sauvegarde de fichiers." print " " print "A pour sauvegarder, B pour définir un filtre, C pour changer le chemin de sorti, Q pour quitter." rem Demande une valeur à l'utilisateur et l'enregistre sous key$ input "Choisissez l'action à faire et pressez Enter > ",key$ rem analyse des données reçues if key$<>"A" and key$<>"a" and key$<>"B" and key$<>"b" and key$<>"C" and key$<>"c" and key$<>"Q" and key$<>"q" then print "Veuillez choisir un choix valide." : sleep 2000 : gosub start rem La ligne précédente affiche un message d'erreur pendent 2 secondes puis retourne au début si le choix est invalide. rem Je n'est pas oublier dans la ligne précédente à analyser les minuscules et majuscules. rem Une autre solution aurait été de transformer key$ en minuscule/majuscule pour raccourcir le code. rem Maintenant que l'analyse est faite, il faut utiliser les données. rem On va donc commencer par voir si le premier choix à été fait : if key$="a" or key$="A" then gosub save rem Si le choix été A ou a alors on va sauvegarder. if key$="b" or key$="B" then gosub option1 rem de même pour B, on arrive au sous menu option1 if key$="c" or key$="C" then gosub option2 rem De même pour C pour arriver au sous menu option2 if key$="q" or key$="Q" then end rem Ici, on a vu que si le choix été de quitter, ce programme quittera sans avertir. rem maintenant que les dérivations sont faites, on ferme la boucle par mesure de sécurité (ce qui va nous sauver vous le verrez si vous exécutez ce code quand on aura fini). loop return option1: do cls 0 print "Menu Filtrages des fichiers" print " " input "Veuillez entrer un nom de fichiers à exclure ou '/\' pour quitter",next$ rem là, on va créer un tableau nommé exclude$ pouvant contenir 255x1 données, soit 255 :p dim exclude$(255,1) rem on analyse les données ... if next$="/\" or next$=chr$(34)+"/\"+chr$(34) then exit rem lors de cette analyse de données, on a fait retourner au menu principal l'utilisateur sur sa demande rem en quittant la boucle avec exit. rem Maintenant, on rempli le tableau à l'aide d'une autre boucle : la for, to, next for nb#=1 to 255 rem on analyse si la place est libre if exclude$(nb#,1)="" then exclude$(nb#,1)=next$ : exit rem on rempli la place seulement si elle est libre puis on sort de la boucle. next nb# rem mais ... et si le tableau était plein ?!? rem et bien vous savez comment analyser des données maintenant, bonne chance ^^ rem donc maintenant on ferme la boucle loop rem et on signal au compilateur que la sous-fonction s'arrête là, pour qu'il puisse retourner au menu principal. return option2: do cls 0 print "Changer la sortie de copie." print " " print "Chemin de sortie courant : "+access$ input "Voulez-vous vraiment changer le chemin d'accès ? (o : oui / n : non) >",choice$ if choice$<>"o" and choice$<>"O" and choice$<>"oui" and choice$<>"Oui" and choice$<>"OUI" and choice$<>"n" and choice$<>"N" and choice$<>"non" and choice$<>"Non" and choice$<>"NON" print "Choix invalide." sleep 2000 gosub option2 endif if choice$="o" or choice$="O" or choice$="oui" or choice$="Oui" or choice$="OUI" input "Veuillez entrer un nouveau chemin d'accès >",access$ else exit endif loop return save: cls 0 print "System de sauvegarde par copie" print " " print "Source : "+get dir$() print "Destination : "+access$ print "Voulez-vous vraiment copier le dossier" input "en cours vers "+access$+" ? (o : oui / n : non)>",choice$ if choice$<>"o" and choice$<>"O" and choice$<>"oui" and choice$<>"Oui" and choice$<>"OUI" and choice$<>"n" and choice$<>"N" and choice$<>"non" and choice$<>"Non" and choice$<>"NON" print "Choix invalide." sleep 2000 gosub save endif rem Fermeture d'un éventuel fichier ouvert. if file open(1)=1 then close file 1 rem Suppression d'un éventuel fichier de même nom déjà existant. if file exist("code.bat")=1 then delete file "code.bat" rem création et ouverture d'un fichier Batch (.bat) open to write 1,"code.bat" rem Ecriture du code. write string 1,"@ echo off" write string 1,"cd "+get dir$() write string 1,"xcopy "+chr$(34)+get dir$()+chr$(34)+" "+chr$(34)+access$+chr$(34)+" /s /c /q /g /h /x /y" write string 1,"exit" close file 1 rem maintenant que le code est crée, on l'exécute ... execute file get dir$()+"\code.bat", "", get dir$(), 0 rem Il n'est pas sur à 100% que cette opération fonctionne :s rem Notre application vas attendre que la copie soit terminé avant de continuer. rem Ne seront copier que les fichiers et sous-dossiers du répertoire actuel du code DarkBASIC. print "Quand la copie sera terminée, vous pourrez continuer. Utilisez CTRL+C dans la fenêtre" print "MS-BATCH (noire) pour stopper son exécution proprement." sync rem le bloc suivant va permettre d'attendre une réaction de la part de l'utilisateur. while scancode=0 endwhile rem et voilà, c'est la fin du code ... return
merci encore et vraiment désoler o)