Obligement - L'Amiga au maximum

Mardi 17 octobre 2017 - 06:02  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : Blitz Basic - simulateur de vie
(Article écrit par Sylvain Terret - octobre 2004)


Non

Non, vous n'avez pas sous les yeux un énième tutoriel sur le Blitz Basic, il est plutôt question ici d'un vieil ami oublié, mais néanmoins apprécié : "Le Listing du Mois" (et pourquoi pas de l'Année). Vous l'avez sans doute remarqué, la presse informatique est devenue bien ennuyeuse pour qui n'est pas benchmarkophile ou soucieux de savoir que la version 2004 de la suite bureautique Y est révolutionnaire par rapport à la mouture précédente, car intégrant une méga nouvelle fonction de zigouigoui machintruc qui permet au premier collègue venu de pourrir notre boîte à lettre électronique et de lagger tout l'Internet à grands coups de scripts PPS de 5 Mo. Où donc sont passés les magazines remplis de listings ? Sommes-nous condamnés à lire de la pub pour des PC bidons, des articles sur la meilleure façon de configurer sa barre des tâches ou des tests d'imprimante/scanner/fax ? Est-ce que ce n'est plus que ça la micro ?!

Moi je dis...

Moi, je dis stop. Stop à la misère intellectuelle et culturelle qui ronge les médias et qui nous tire tous vers le bas. Nous sommes autre chose que des parts de marché/cibles produit/temps de cerveau humain/brique dans un mur (oui, il y a un clin d'oeil là). C'est en songeant à tout cela que j'ai eu envie d'utiliser Obligement et l'Amiga pour nuancer (un petit peu) cette triste situation. Voici donc un court programme pas trop mal écrit qui vous permettra, je l'espère, de passer un bon moment... de réflexion. :-)

Un simulateur

Le code présenté ici est celui d'un simulateur de vie de cellules, classique. Vous pouvez consulter l'index des commandes pour avoir les explications qu'il vous faut. Globalement, le principe de fonctionnement est simple, je vous laisse le plaisir d'étudier le source soigneusement documenté pour voir comment ça marche (bah oui, si je dis tout, c'est moins marrant). Bien entendu, il y a des optimisations possibles, là encore, c'est à vous de jouer ! Les courageux qui seront allés jusqu'au bout auront le plaisir de voir évoluer les petites bêbêtes. Pour l'avoir laissé tourner pendant un moment, je peux vous dire qu'on obtient parfois des trucs surprenants ! Un 68040 à 25 MHz et une résolution de 640x512 sont nécessaires si on veut profiter décemment du spectacle (oui, vraiment, il y a des optimisations à faire :-). A noter que le Blitz ne marche pas sur Pegasos (Cf. notre ami Henes qui me l'a confirmé lors de l'excellente HunoParty 2).

Bon code !

Le code source (aussi disponible dans ce fichier)

WBStartup
WbToScreen 3
Use Screen 3

LoadFont 2,"topaz.font",8
Use IntuiFont 2

GTButton 0,1,242,252,100,15,"Restart",#PLACETEXT_IN

Window 0,0,14,600,300,$140e,"LifeSimAOS v1.0 Obligement version",-1,-1
DefaultOutput

AttachGTList 0,0

Use Window 0

;Creation du tableau contenant les informations sur les cellules
Dim cellules.b(57,24)

;Creation de la copie du tableau contenant les informations sur les cellules
Dim cellules_copie.b(57,24)

comptvoisins.b=0

Gosub InitSim

comptboucles.l=0

;Boucle principale du programme
While ev.l<>#IDCMP_CLOSEWINDOW

  comptboucles.l=comptboucles.l+1
  Use Window 0
  WLocate 10,8
  Print "Generation number ",comptboucles.l

    ;On recupere les evenements qui se produisent dans la fenêtre du logiciel
    ev.l=Event

    ;Si on clique sur le bouton RESTART
    If ev=64
      comptboucles.l=0
      Gosub InitSim
    EndIf

    ;Debut du code de la simulation
    For compteur2.w=1 To 57 Step 1
      For compteur3.w=1 To 24 Step 1
        comptvoisins.b=0
          If compteur2.w>1
            If compteur3.w>1
              ;HAUT-GAUCHE
              If cellules.b(compteur2.w-1,compteur3.w-1)=1
                comptvoisins.b=comptvoisins.b+1
              EndIf
            EndIf
            ;GAUCHE
            If cellules.b(compteur2.w-1,compteur3.w)=1
              comptvoisins.b=comptvoisins.b+1
            EndIf
            ;BAS-GAUCHE
            If compteur3.w<24
              If cellules.b(compteur2.w-1,compteur3.w+1)=1
                comptvoisins.b=comptvoisins.b+1
              EndIf
            EndIf
          EndIf
          If compteur2.w<57
            If compteur3.w>1
              ;HAUT-DROITE
              If cellules.b(compteur2.w+1,compteur3.w-1)=1
                comptvoisins.b=comptvoisins.b+1
              EndIf
            EndIf
            ;DROITE
            If cellules.b(compteur2.w+1,compteur3.w)=1
              comptvoisins.b=comptvoisins.b+1
            EndIf
            ;BAS-DROITE
            If compteur3.w<24
              If cellules.b(compteur2.w+1,compteur3.w+1)=1
                comptvoisins.b=comptvoisins.b+1
              EndIf
            EndIf
          EndIf
          ;HAUT
          If compteur3.w>1
            If cellules.b(compteur2.w,compteur3.w-1)=1
              comptvoisins.b=comptvoisins.b+1
            EndIf
          EndIf
          ;BAS
          If compteur3.w<24
            If cellules.b(compteur2.w,compteur3.w+1)=1
              comptvoisins.b=comptvoisins.b+1
            EndIf
          EndIf

          If (comptvoisins.b<2 OR comptvoisins.b>3)
            cellules_copie.b(compteur2.w,compteur3.w)=0
          Else
            If comptvoisins.b=3
              cellules_copie.b(compteur2.w,compteur3.w)=1
            EndIf
          EndIf
      Next
    Next

    For compteur2.w=1 To 57 Step 1
      For compteur3.w=1 To 24 Step 1
cellules.b(compteur2.w,compteur3.w)=cellules_copie.b(compteur2.w,compteur3.w)
      Next
    Next
    Gosub RefreshCells

    ;Fin du code de la simulation

Wend

DetachGTList 0
Free Window 0

End


..InitSim

  ;Remplissage aleatoire du tableau des cellules
  For compteur2.w=1 To 57 Step 1
    For compteur3.w=1 To 24 Step 1
      cellules.b(compteur2.w,compteur3.w)=Rnd(2)
    Next
  Next

  For compteur2.w=1 To 57 Step 1
    For compteur3.w=1 To 24 Step 1
cellules_copie.b(compteur2.w,compteur3.w)=cellules.b(compteur2.w,compteur3.w)
    Next
  Next


  ;Tracage du tableau
  ;Lignes horizontales
  For compteur.w=20 To 260 Step 10
    Wline 10,compteur.w,580,compteur.w,1
  Next

  ;Lignes verticales
  For compteur.w=10 To 580 Step 10
    Wline compteur.w,20,compteur.w,260,1
  Next

  Gosub RefreshCells

Return



..RefreshCells

  ;Remplissage des cellules
  For compteur2.w=11 To 571 Step 10
    For compteur3.w=21 To 251 Step 10
      WBox compteur2.w,compteur3.w,compteur2.w+8,compteur3.w+8,
      cellules.b(Int(compteur2.w/10),Int((compteur3.w/10)-1))
    Next
  Next

Return
		

Index des instructions

WBStartup

Syntaxe :
WBStartup

Cette instruction permet à votre programme d'être lancé à partir du Workbench. Si elle est manquante et que vous démarrez votre logiciel à partir du Workbench, le plantage est assuré.

Remonter en haut de l'index - Remonter en haut du source



WbToScreen

Syntaxe :
WbToScreen numéro écran

Cette instruction attribue un numéro d'écran à celui du Workbench. Cela vous permet d'utiliser l'écran du Workbench comme n'importe quel autre écran pour y ouvrir des fenêtres par exemple.

Remonter en haut de l'index - Remonter en haut du source



Use Screen

Syntaxe :
Use Screen numéro écran

Indique au programme qu'il doit utiliser l'écran indiqué pour les opérations d'affichage et de saisie.

Remonter en haut de l'index - Remonter en haut du source



LoadFont

Syntaxe :
LoadFont numéro attribué à la police,"nom de la police.font",taille,style

Cette instruction permet de charger une police de caractères ("fonte" dans le langage amigaïste) à partir du dossier FONTS:. Voici quelques détails concernant le paramètre style :
  • Une valeur de 1 correspond à souligné,
  • Une valeur de 2 correspond à gras,
  • Une valeur de 4 correspond à italique,
  • Une valeur de 8 correspond à plus large que la normale.
Remonter en haut de l'index - Remonter en haut du source



Use IntuiFont

Syntaxe :
Use IntuiFont numéro d'une police de caractères chargée au préalable

La police de caractères passée en paramètre sera utilisée pour inscrire du texte à l'écran.

Remonter en haut de l'index - Remonter en haut du source



GTButton

Syntaxe :
GTButton numéro de la GadgetList du bouton,numéro du bouton,position en X,position en Y,largeur,hauteur,"texte",drapeau

Cette instruction crée un bouton attaché à ce que l'on appelle une GadgetList, en quelque sorte un ensemble de composants (boutons, texte...) que l'on attribue à une fenêtre. Le paramètre drapeau optionnel spécifie, entre autres, la position du texte dans ou par rapport au bouton :

Valeur Position du texte
$1 Gauche
$2 Droite
$4 Au-dessus
$8 En dessous

Remonter en haut de l'index - Remonter en haut du source



Window

Syntaxe :
Window numéro que l'on veut donner à la fenêtre,position en X,position en Y,largeur,hauteur,drapeaux,"titre",numéro de la couleur du texte utilisée pour le titre de la fenêtre,numéro de la couleur utilisée pour la bordure de la fenêtre,numéro de la GadgetList rattachée (facultatif)

Cette instruction crée une fenêtre Workbench. Voici plus de détails sur les drapeaux :

Drapeaux Valeur Description
WINDOWSIZING $0001 Ajoute un gadget de redimensionnement à la fenêtre.
WINDOWDRAG $0002 Indique que la fenêtre est déplaçable.
WINDOWDEPTH $0004 Ajoute un gadget de profondeur à la fenêtre. Elle peut donc être placée devant ou derrière les autres. C'est là qu'on sent l'âge du Workbench...
WINDOWCLOSE $0008 Ajoute un gadget de fermeture.
SIZEBRIGHT $0010 Les drapeaux GIMME00 et WINDOWSIZING activés permettent de réserver une bordure à droite de la fenêtre interdisant l'écriture sur une largeur équivalente à la taille du gadget de redimensionnement.
SIZEBOTTOM $0020 Idem que SIZEBRIGHT si ce n'est que la marge est créée en bas de la fenêtre.
BACKDROP $0100 La fenêtre est placée derrière toutes celles qui sont déjà ouvertes. Le drapeau WINDOWDEPTH ne peut être activé et la fenêtre restera obligatoirement en arrière-plan.
GIMME00 $0400 Les bordures de la fenêtre ne peuvent en aucun cas être effacées par le contenu de la fenêtre si celui-ci vient à déborder. D'la balle.
BORDERLESS $0800 Vous voyez ce que c'est une serveuse topless ? Bon, et bien c'est pareil, à la nuance près que c'est la bordure qui saute, et pas le haut ;-)
ACTIVATE $1000 Active la fenêtre une fois ouverte.

Remonter en haut de l'index - Remonter en haut du source



DefaultOutput

Syntaxe :
DefaultOutput

Fait de la fenêtre actuellement active la sortie par défaut (des futures instructions Print par exemple). A noter que DefaultInput existe.

Remonter en haut de l'index - Remonter en haut du source



AttachGTList

Syntaxe :
AttachGTList numéro de la GadgetList,numéro de la fenêtre

Cette instruction attache un ensemble de gadgets GadTools à une fenêtre ouverte (voir GTButton).

Remonter en haut de l'index - Remonter en haut du source



Use Window

Syntaxe :
Use Window numéro de la fenêtre

Cette instruction active la fenêtre désignée. Un WindowInput et un WindowOutput sont automatiquement faits sur la fenêtre en question afin d'en faire l'entrée/sortie par défaut.

Remonter en haut de l'index - Remonter en haut du source



Dim

Syntaxe :
Dim nom_du_tableau(colonnes,lignes)

Cette instruction crée un tableau dont les cellules sont numérotées de 1 à n. Elle est riche en possibilités, je vous renvoie au manuel du Blitz pour en savoir plus.

Remonter en haut de l'index - Remonter en haut du source



Gosub

Syntaxe :
Gosub Label

Cette instruction indique à l'ordinateur qu'il doit exécuter ce qui se trouve à l'emplacement Label du programme, puis reprendre son cours normal là où il a été interrompu. A ne pas confondre avec Goto.

Remonter en haut de l'index - Remonter en haut du source



While...Wend

Syntaxe :
While condition(s)
instruction(s) à exécuter
Wend

Cette instruction appartient à la famille des boucles. Tant que la condition est satisfaite, le cycle se répète.

Remonter en haut de l'index - Remonter en haut du source



WLocate

Syntaxe :
WLocate X,Y

Cette instruction est utilisée pour spécifier la position du texte dans la fenêtre active. X et Y sont exprimés en pixels et indiquent le décalage à appliquer par rapport au coin supérieur gauche.

Remonter en haut de l'index - Remonter en haut du source



Print

Syntaxe :
Print Texte ou formule

Permet d'afficher du texte ou des valeurs numériques sur la sortie standard.

Remonter en haut de l'index - Remonter en haut du source



Event

Syntaxe :
Event

Cette instruction est similaire à WaitEvent : Elle retourne la valeur IDCMP des événements qui surviennent dans les fenêtres WB, mais se différencie par le fait qu'elle ne bloque pas l'exécution du programme pendant qu'elle attend un événement. Si rien ne se passe, Event renvoie 0.

Remonter en haut de l'index - Remonter en haut du source



If...EndIf

Syntaxe :
If condition(s) Then instruction à exécuter
OU
If condition(s)
instruction(s)
Else
instruction(s)
EndIf

La bonne vieille condition des familles, dois-je vraiment l'expliquer ?

Remonter en haut de l'index - Remonter en haut du source



For...Next

Syntaxe :
For variable=une valeur de départ To une valeur maximale Step valeur à ajouter à variable lors de chaque boucle (optionnel)
instruction(s)
Next

La boucle FOR, un grand classique. Les instructions sont exécutées jusqu'à ce que valeur de départ soit supérieure à valeur maximale. Pour décrémenter au lieu d'incrémenter, on peut spécifier un STEP négatif.

Remonter en haut de l'index - Remonter en haut du source



DetachGTList

Syntaxe :
DetachGTList numéro de la GadgetList à libérer

Utile pour libérer proprement la mémoire quand on quitte l'application.

Remonter en haut de l'index - Remonter en haut du source



Free Window

Syntaxe :
Free Window numéro de la fenêtre à détruire

Permet de supprimer de la mémoire une fenêtre dont on n'a plus besoin.

Remonter en haut de l'index - Remonter en haut du source



End

Syntaxe :
End

Indique la fin du programme.

Remonter en haut de l'index - Remonter en haut du source



Wline

Syntaxe :
Wline X1,Y1,X2,Y2,couleur

Cette instruction sert à dessiner une ligne (voire plusieurs si on spécifie X3,Y3...Xn,Yn) dans une fenêtre. Je vous laisse jouer avec les couleurs.

Remonter en haut de l'index - Remonter en haut du source



WBox

Syntaxe :
WBox X1,Y1,X2,Y2,couleur

Cette instruction dessine un rectangle plein dans une fenêtre. X1,Y1 sont les coordonnées du coin supérieur gauche et X2,Y2 celles du coin inférieur droit. Je vous laisse de nouveau jouer avec les couleurs.

Remonter en haut de l'index - Remonter en haut du source



Return

Syntaxe :
Return

Indique au programme qu'il doit reprendre le cours du programme là où il l'avait interrompu suite à un Gosub.

Remonter en haut de l'index - Remonter en haut du source



[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]