Article     Discussion     Modifier     Historique     Forums     Salon IRC

Introduction au dark basic

Un article de Games Creators Network.

Sommaire

[modifier] Les variables

Tout d'abord, qu'est-ce qu'une variable ? Rappelez-vous vos cours de maths, votre prof (je sais, vous le détestez et vous avez envie de lui faire avaler de la mort au rat)... votre prof, je disais, a sûrement du vous faire résoudre quelques petites équations, n'est-ce pas ? Par exemple :

5x+8 = 38
5x = 30
x = 6

Cela vous rappelle de mauvais souvenirs ? Allez, tenez-vous bien, ce x est une variable ! Une variable est une lettre (ou plusieurs lettres) qui contient une valeur. Si lors d'une épreuve, vous modifiez la valeur de x (et hop, il vaut 7), votre prof ne sera peut-être pas très heureux, par contre, en programmation, cela ne pose aucun problème. Si leur utilité ne vous a pas encore sauté aux yeux, ne vous en faite pas, cela viendra.

Il existe plusieurs sortes de variables, chacune sert à stocker une sorte de donnée particulière. Il y a plusieurs sortes de données :

  • Les nombres entiers
    • Les booleans. C'est la plus petite unité de stockage. Composés d'un seul bit (0 ou 1), ils ne peuvent prendre que ces deux valeurs (0 ou 1),
    • Les bytes sont composé de 8 bits, ils peuvent prendre des valeurs entières de 0 à 255,
    • Les words, codés sur deux bytes, peuvent prendre des valeurs entières de 0 à 65535,
    • Les dwords sont codés sur deux words. Ils peuvent prendre des valeurs entières de 0 à 4294967295,
    • Les integers. Un integer est codé sur deux dwords et peut prendre des valeurs négatives. Ses valeurs peuvent aller de -9223372036854775808 à 9223372036854775807.
  • Les nombres « réels ». Ces nombres ne sont que des approximations, c'est pourquoi j'ai mis « réels » entre guillemets.
    • les floats. Un float est composé de 4 bytes. Il peut prendre des valeurs comprises dans ce champ : [+/-]3.4E[+/-]38. Il a 7 décimales de précision.
    • les double floats. Un double float peut prendre des valeurs comprises dans ce champ : [+-]1.7E[+-]308. Il a 15 décimales de précision.
  • Les chaînes de caractères, ou strings. Dans ce cours, je parlerai toujours de strings. Tout d'abord parce que c'est « plus sympa », ensuite parce que c'est plus court. Et que peut contenir un string ? Des lettres, toujours entourées de guillemets (").

[modifier] Déclarer une variable

Déclarer une variable est quelque chose de très important. En début de programme, faites la liste de toutes les variables que vous utilisez et spécifiez leur type. Ca se fait de cette manière :

"nom_de_la_variable as sorte_de_variable"

posx as float
score as dword
nom as string

Comme on ne peut définir une variable qu'une seule fois, il vaut mieux réfléchir deux fois en choisissant son nom.

[modifier] Définir un type personnalisé

Je considère cette partie comme très importante. Je ne sais pas comment définir ce type de variables de manière simple autrement qu'en donnant un exemple :

type mon_type
	a as float
	b as byte
	c as string
endtype
var as mon_type
var.a = 7.5
var.b = 129
var.c = "Hello World"

Cette méthode est très pratique. Imaginez-vous que vous développez un FPS et que chaque ennemi doit avoir 20 variables (vie, positions, orientation, ...). Avoir 20 tableaux ne serait pas très pratique, mais un tableau comme ennemi().vie, ennemi().nom,... est beaucoup plus aisé à utiliser.

Un autre avantage est que vous êtes prévenus en cas de faute de frappe dans le nom, même s'il ne s'agit pas d'un tableau. Regardez cet exemple :

var_a as float
var_b as byte
var_c as string
var_a = 7.5
var_d = 129
var_c = "Hello World"
print var_a
print var_b
print var_c
wait key

Là, comme vous pouvez le constater, j'ai fait une faute de frappe : j'ai écrit d au lieu de b. Ce n'est pas le genre de faute qui se remarque rapidement, car le d ressemble pas mal au b. De plus, cela posera un problème sûrement beaucoup plus loin dans le code et par forcémment là où il y a l'erreur. Et maintenant, avec les types :

type abc
	a as float
	b as byte
	c as string
endtype
var as abc
var.a = 7.5
var.d = 129
var.c = "Hello World"
print var.a
print var.b
print var.c
wait key

Là, le compilateur remarque que la variable n'existe pas, cela évite de chercher une erreur dans le code pendant trop longtemps.

Toutefois, il ne faut pas utiliser les types à tord et à travers, seulement lorsque vous avez plusieurs variables qui se rapportent à la même chose.

[modifier] Les tableaux

Van Eyck était d'après moi le peintre le plus doué de tous les temps. Mais le genre de tableaux qu'il faisait n'a absolument rien à voir avec celui dont je vais vous parler ici. Je tenais juste à citer ce peintre ^_^

Un tableau, en programmation, est une variable pouvant contenir plusieurs valeurs. Voici un petit exemple :

dim mon_tableau(5)
for t=1 to 5
	mon_tableau(t) = 3*t
next t
for t=1 to 5
	print mon_tableau(t)
next t
wait key

Ce code crée un tableau contenant cinq cellules. Ensuite, on peut l'utiliser comme n'importe quelle variable - à condition de spécifier un numéro de la cellule. Si vous ne le faites pas, le dieu du compilateur vous maudira d'un joli bug.

Les tableaux ne sont pas seulement en une dimension, mais peuvent en avoir jusqu'à neuf ! Je dois dire que je n'utilise presque jamais des tableaux de plus de deux dimensions, mais parfois, plus de dimensions peuvent être utiles. Voici un exemple de tableau à deux dimensions :

dim var(10,10)
for t=1 to 10
	for u=1 to 10
		var(t,u)=rnd(5)
	next u
next t
for x=1 to 10
	for y=1 to 10
		print var(x,y)," ";
	next y
	print ""
next x
wait key 

Le ; après le print signifie que le prochain print s'affichera à la suite et non après un retour à la ligne.

Comme avec les autres variables, il est possible de définir le type de tableau que vous désirez (byte, string, float,...) de la manière suivante :

dim mon_tableau(3) as dword

type t_tab
	x as string
	y as float
	z as float
endtype
dim mon_autre_tableau(1234) as t_tab

Contrairement aux autres variables, il est possible de supprimer un tableau pour libérer de la mémoire - ou pour le recréer avec d'autres dimensions. La commande est undim, consultez l'aide pour plus d'informations.

[modifier] Modifier la structure d'un tableau

Avec un tableau à une dimension, on peut faire pas mal de choses. Je ne vais vous donner qu'un court exemple car avec cela vous devriez être capable d'utiliser les autres commandes que vous trouverez dans la partie core du manuel.

dim var(5)
for t=1 to 5
	var(t)=t
next t

print "le tableau a ", array count(var(0)), " éléments : "
array insert at element var(0), 3
print "le tableau a maintenant ", array count(var(0)), " éléments : "

for t=1 to array count(var(0))
	print t, ". ", var(t)
next t
wait key

Dans ce code, un tableau de cinq éléments est crée. Ensuite, une valeur est assignée à chaque élément, de 1 à 5 pour que ça soit plus lisible.

Puis, array insert at element ajoute un élément au tableau. Le second paramètre (ici : 3) correspond à l'élément d'arrivée.

Finalement, tous les éléments sont affichés et vous pouvez voir que le troisième est vide, c'est celui qui vient d'être crée.

[modifier] Les conditions

Un ordinateur est capable de reconnaître différentes conditions :

A = B  : A est égal à B
A < B  : A est inférieur à B
A > B  : A est supérieur à B
A <= B : A est inférieur ou égal à B
A >= B : A est supérieur ou égal à B
A <> B : A est inférieur ou supérieur à B, donc A n'est pas égal à B

Chacune de ses conditions renvoie un boolean : 1 si elle est vraie, 0 si elle est fausse. Il est aussi possible de comparer plusieurs conditions, avec and, or, et xor. Xor signifie eXclusive or. Il ne renvoie 1 que si une des deux conditions est vraie. Voici ce qu'ils peuvent renvoyer :

0 and 0 = 0
0 and 1 = 0
1 and 0 = 0
1 and 1 = 1
0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
0 xor 0 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0

On peut définir une condition - et la réaction - de plusieurs manières différentes. Certaines sont plus pratiques que d'autres dans certaines conditions.

if [condition] then [action si oui]
if [condition] then [action si oui] else [action si non]
if [condition]
	[action 1 si oui]
	[action 2 si oui]
	...
endif
if [condition]
	[action 1 si oui]
	[action 2 si oui]
	...
else
	[action 1 si non]
	[action 2 si non]
	...
endif

Il est très important d'avoir ces quatre schémas en tête : vous en aurez besoin tout au long de votre vie de programmeur. Et les and, or et xor ? Où vont-ils ? Dans condition. Regardez cette exemple :

a = 5
b = 6
c = 5
if a = B then print "A = B"
if a = b or a = c then print "A = B ou A = C"
if a = b and a = c then print "A = B et A = C"
wait key

Examinons cas par cas :

a = b
5 = 5 -> 1

Le résultat est 1, la condition est remplie.

a = b or a = c
5 = 6 or 5 = 5
0 or 1 -> 1

Le résultat est 1, la condition est aussi remplie, même si l'un de ses termes est faux.

a = b and a = c
5 = 6 and 5 = 5
0 and 1 -> 0

Le résultat est 0, la condition n'est pas remplie.

Normalement, tout cela devrait vous sembler très simple. Si ce n'est pas le cas, ne vous affolez pas : ça viendra tout naturellement. Les conditions étant quelque chose de très important, je vous conseille de vous entraîner jusqu'à ce que vous les maîtrisiez : vous ne devez plus avoir la moindre hésitation en en écrivant une.

[modifier] Les boucles

Un jour, un débutant m'avait affirmé avoir écrit un programme de 11 000 lignes, en C. Il me semblait que ça faisait un peu beaucoup pour un débutant et je lui ai demandé des précisions. Il voulait, en fait, que son programme fasse un grand nombre de fois la même chose, alors il avait copié-collé son code, jusqu'à ce que le temps de compilation lui semble trop long pour en ajouter davantage.

L'informatique serait quelque chose de bien triste (et de terriblement frustrant) si les boucles n'existaient pas. En gros, elles servent à répéter plusieurs fois le même groupe de lignes. Combien de fois ? Cela dépend autant de la boucle que du programmeur et du programme.


[modifier] Do - loop

Cette boucle répète indéfiniment tout ce qui se trouve entre le do et le loop. Voici un petit exemple :

nom as string
do
	print "Bonjour, comment vous appelez-vous ?"
	input "Je m'appelle ", nom
loop

Là, vous pouvez répondre autant que vous le désirez, vous ne pourrez pas gagner. Votre ordinateur est beaucoup plus patient que vous, il continuera de vous saluer jusqu'à ce que vous quittiez le programme, quelle que soit la réponse. On peut quitter une boucle de deux manières différentes : soit avec un goto soit avec un exit.

[modifier] repeat - until

Cette boucle n'est pas infinie : elle s'arrête lorsque la condition est remplie. Toutes les commandes se trouvant entre l'endroit où la condition est remplie et le until sont encore lues une fois.

nom as string
repeat
	print "Bonjour, comment vous appelez-vous ?"
	input "Je m'appelle ",nom
	print "Enchanté, ",nom, ", moi c'est Ordinateur."
until nom="quitter"
wait key

Entrez "quitter" comme nom pour remplir la condition. Il est aussi possible de quitter cette boucle avec un goto ou un exit.

[modifier] while - endwhile

Cette boucle se répète tant qu'une condition est valide. Lorsque la condition est modifiée, le programme lira encore les commandes jusqu'à endwhile. Ensuite, il retournera au while, et comme la condition n'est plus remplie, il ignorera la boucle.

Il est intéressant de remarquer que cette boucle n'est lue que si la condition est remplie lorsque le programme y arrive. Si vous entrez 11 dès la première fois, tout le contenu de la boucle sera ignoré.

input "Entrez un nombre de 1 à 20> ", nombre
while nombre <> 11
	input "Entrez un nombre de 1 à 20> ", nombre
	print "Merci"
endwhile
print "Gagné !"
wait key

Bien entendu, un goto ou un exit fera quitter la boucle.

[modifier] For - next

J'ai déjà utilisé cette boucle en parlant des tableaux. Son principe est simple : elle se répète en modifiant la valeur d'une variable, la faisant passer de la valeur minimale à la valeur maximale. Il est possible d'incrémenter la variable de n'importe quelle valeur, le défaut est 1.

for variable = min to max step étape
	[choses à faire]
next variable

Voici deux exemples :

for t=1 to 5
	print t
	print 2*t
	print t^2
	print ""
next t
wait key
for t=1 to 10 step 2
	print t
	print 2*t
	print t^2
	print ""
next t
wait key

Si vous désirez que la variable passe d'un maximum à un minimum, cela est aussi possible, mais il faut absolument mettre une valeur négative à step.

for t=10 to 1 step -2
	print t
	print 2*t
	print t^2
	print ""
next t
wait key

Un exit et un goto peuvent faire quitter cette boucle. Mais modifier la valeur de la variable (lui assigner une valeur supérieure à la valeur maximale) peut aussi faire l'affaire.

[modifier] La boucle "oops"

La boucle "oops" est une boucle très énervante. C'est quand vous vous gourez en écrivant la condition et qu'elle ne se remplit jamais. Là, c'est le programme qui reste bloqué. Bien entendu, cette boucle peut être de n'importe quelle sorte, mais faites attention : si c'est une boucle for-next, presser escape ne servira à rien. En effet, pour optimiser sa vitesse, les créateurs de Dark Basic Pro ont enlevé la vérification de la touche escape.

Lorsque vous avez une boucle for-next qui prend un certain temps à s'accomplir, ajoutez-y une condition permettant de quitter le programme avec escape. Faites aussi de même si vous programmez quelque chose de difficile dans une boucle for-next, vous serez ainsi quitte de quitter le programme avec la fameuse combinaison de touches "ctrl-alt-del" en cas de problème.


[modifier] Le texte

Bon, là, vous pouvez me demandez « Pourquoi on ne parle du texte qu'ici ? », mais je ne saurais pas quoi vous répondre à part « Soyez heureux qu'on en parle ».

Le texte, qu'est-ce ? C'est tout simplement les caractères qu'on affiche à l'écran. La commande de base est print, mais il en existe d'autres. Le texte a trois paramètres généraux : police, taille et couleur. Il est possible de modifier ces données ainsi que quelques autres secondaires. Certaines commandes peuvent renvoyer des informations sur les strings, par exemple la largeur qu'ils prendraient si on les affichait à l'écran, en tenant compte autant de la police que de la taille.

Il existe trois manières d'afficher du texte : print, text et center text. Pour plus d'informations sur ces commandes, lisez l'aide.

Que peut-on faire avec du texte ? Beaucoup de choses. Tenez, voici un exemple :

for t=100 to 1 step -1
	print "Il y a ",t," bières sur un mur. J'en prend une, je la bois."
	wait 50
next t
print "Il n'y a plus de bière !"
wait key

D'accord, cet exemple n'est pas très intelligent, mais il donne soif (je vous conseille la Franziskäner, elle est bonne). Un autre pourrait vous sembler plus intéressant.

sync on
sync rate 25

txt as string = "All those moments will be lost in time... like tears in rain. - Blade Runner"
modified as string

do
	for t=0 to len(txt)
		cls
		set text size 10+10*sin(36*t)
		modified = left$(txt, t)
		text screen width()-text width(modified), screen height()/2,  modified
		sync
	next t
	for t=len(txt) to 0 step -1
		cls
		set text size 10+10*sin(36*t)
		modified = left$(txt, t)
		text screen width()-text width(modified), screen height()/2,  modified
		sync
	next t
	for t=0 to len(txt)
		cls
		set text size 10+10*sin(36*t)
		modified = right$(txt, t)
		text screen width()-text width(modified), screen height()/2,  modified
		sync
	next t
	for t=len(txt) to 0 step -1
		cls
		set text size 10+10*sin(36*t)
		modified = right$(txt, t)
		text screen width()-text width(modified), screen height()/2,  modified
		sync
	next t
loop

Ou encore :

sync on
sync rate 0
txt as string
set text font "Fixed sys"
do
	size = 0
	repeat
		txt = chr$(rnd(255))
		set text size 8+rnd(15)
		inc size, text width(txt)
		ink rgb(rnd(10), rnd(155)+100, rnd(25)),0
		print txt;
		sync
	until size > screen width()
	print ""
loop

Ce dernier exemple est assez joli, même si le film auquel il vous fera penser est une véritable m***e. Comme vous pouvez le constater, le texte peut donner un assez bon effet, à condition de bien l'utiliser.

Maintenant, je commence un peu d'en avoir marre d'écrire, je continuerai un autre jour.

Tutoriel provenant de http://www.seuret.com

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.