Tutoriel : Intro au DarkBASIC

Résolu
Utilisateur anonyme - 19 avril 2008 à 19:04
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 24 avril 2008 à 21:38
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 :

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

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
20 avril 2008 à 23:56
Interessant et pas mal du tout!

Bon ya des petits soucis d'orthographe mais le fond est bien.
0
Utilisateur anonyme
21 avril 2008 à 06:11
Oups ... je viens de remarquer un bog aprés avoir relut ^^'

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 ...
1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 avril 2008 à 02:36
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?
0
Utilisateur anonyme
22 avril 2008 à 06:34
Ce logiciel n'est pas gratuit :S
Mais je crois qu'il a une version d'essai limitée à 1 000 lignes et 30 jours et le compilage ne peut se faire sans un Splash Screen avec écrit dessus Dark BASIC Software :-D

Et voilà ...

D'ailleurs, je vais essayer de le mettre dans la logitheque ...

0
Utilisateur anonyme
22 avril 2008 à 06:51
Ca y est : Je l'ai mis.
Manque plus que vous l'acceptiez ...

et merci encore ;-)
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 avril 2008 à 20:20
Voilà j'ai posté ton astuce: http://www.commentcamarche.net/faq/sujet 10586 introduction au dark basic
Et c'est nous qui te remercions ;-)
-1
Utilisateur anonyme
23 avril 2008 à 15:13
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 ;-)

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)
0
Utilisateur anonyme
24 avril 2008 à 17:35
Re ...
J'ai vu un truc en passant : il y a 2 rubriques pour Dark Basic.

Voilà. bonne journée ;-)
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
24 avril 2008 à 21:38
Oooh, misère, vais corriger...
0