B : Quelques programmes utiles

Ce chapitre est consacré à des programmes et routines utiles, ainsi qu'à quelques astuces pour vous aider lorsque vous rencontrez des problèmes et que vous ne parvenez pas à résoudre certains détails. Ces programmes sont en grande partie de mon propre travail, ainsi que des bouts de code récupérés sur des forums, et des morceaux de code envoyés par des contributeurs pour publication dans mes colonnes AMOS, mais qui n'ont pas été publiés intégralement, ou même du tout. Je tiens à remercier tous ceux qui m'ont envoyé des programmes pour publication.

Voici un exemple simple de jeu sans graphiques. Il est inspiré du célèbre jeu Daleks sur Apple Macintosh et, malgré sa simplicité, il est très addictif.

Rem *
Chase.AMOS *
Rem
Screen Open 0,640,200,16,Hires
Paper 0 : Pen 4 : Hide : Curs Off : Cls 0
Locate 0,0 : Centre "Chase"
Locate 0,5 : Centre "AMOS Version @1993 Phil South"
Print : Print : Print
Print "You are within the walls of a high voltage"
Print "machines trying to destroy you."
Print " You are the ?*?. The interceptors are the"
Print "?+?. The areas marked ?X? are highvoltage. Your only"
Print "chance for survival is to manouver each interceptor"
Print "into an ?X?. ?-Good Luck--"
Print
Print
"Moves are: 7.8.9"
Print
" 4.*.6"
Print
" 1.2.3"
Print
Print
"-10 = No move until the end of the game"
Print
"-1 = Give up, situation hopeless"
Print
"0 = A tremendous (but unfortunately random)"
Print "leap"
Print : Print "" : Wait Key
Print
Dim A(10,20),A1(10,20),N(12),L(5),M(5),L1(5),M1(5)
For B=0 To 10
For C=1 To 20
X=Rnd(10)
If X=5 Then 270
A(B,C)=Asc(" ")
Goto 280
270 A(B,C)=Asc("X")
280 Next C
Next B
For D=1 To 10
A(D,1)=Asc("X") : A(D,20)=Asc("X")
Next D
For F=1 To 20
A(1,F)=Asc("X") : A(10,F)=Asc("X")
Next F
Goto 410
370 H=Rnd(8)+2
I=Rnd(18)+2
If A(H,I)<>Asc(" ") Then 310
Return
410 Gosub 370
A(H,I)=Asc("*")
J=H : K=1
For N9=1 To 5
Gosub 370
A(H,I)=Asc(L(N9)=H = M)
Next N9
For B1=1 To 10
Next B2 : Next B1
For B2=1 To 20 : A1(B1,B2)=A(B1,B2)
For B1=1 To 5
L1(B1)=L(B1) : M1(B1)=M(B1) : Next
B1
J1=J : K1=K
Y9=0
For D2=1 To 10
For B2=1 To 20
N$=Chr$(A(D2,B2))
Print N$
Next B2
Print
Next D2
If Y9<>10 Then 640
Print
Goto 890
640 Input Y9
J2=J : K2=K
If Y9=0 Then 860
If Y9<0 Then 1230
If Y9=10 Then 1010
On Y9 Goto 320,a00,1a0,a40,a90,1s0,100,120,140
700 J=J-1 : K=K-1
Goto 890
720 J=J-1
Goto 890
740 J=J-1
K=K+1
Goto B90
760 K=K+1
Goto 890
780 J=J+1
K=K+1
Goto 890
800 J=J+1
Goto 890
820 J=J+1
K=K-1
Goto 890
840 K=K-1
Goto 890
890 If A(J,K)=Asc("X") Then 1260
A(J2,K2)=Asc(" ")
A(J,K)=Asc("*")
Goto 1070
1260 Print "HIGH VOLTAGE!!!"
Print "***** ZAP ***** You?re dead!!!"
Print
1290 Print "Another game (Y/N)"
Input N9$
If N9$<>"Y" Then 1400
Print "Same setup (Y/N)"
Input N9$
If N9$<>"Y" Then 190
For B1=1 To 10 : For B2=1 To 20 : A(B1,B2)=A1(B1,B2)
: Next B2 : Next B1
For B1=1 To 5 = L(B1)=L1(B1) : M(B1)=M1(B1) : Next
B1
J=J1 : K=K1
Goto 530
1400 End

Ce programme simple choisit une lettre aléatoire de l'alphabet, une idée originale basée sur le principe de choisir des nombres aléatoires.

Paper 0 : Cls 0
Do
Print Chr$(Rnd(25)+65);" ",
Wait 2
Loop

Ce programme imprime une liste de noms d'extraterrestres utilisant la fonction ci-dessus.

Screen Open 0,640,200,16,Hires
Paper 0 : Cls 0
Do
Print ?My name is ";
Print Chr$(Rnd(25)+65);
For A=0 To 4
Print Chr$(Rnd(25)+97);
Next A
Print " from Planet ";
Print Chr$(Rnd(25)+65);
For A=0 To 4
Print Chr$(Rnd(25)+97);
Next A
Print
Loop

Ce programme génère un indicateur qui monte lentement de vide à plein. Utilisez-le dans vos jeux d'aventure ou dans les jeux d'arcade qui utilisent des niveaux d'oxygène ou d'énergie.

Rem ** AMOS Meter
Rem ** 1993 Snout
Curs Off : Hide :
Ink 4 : Paper 0 : Cls 0
Centre "- Fill 'er up! -"
Ink 5 : Box 38,18 To 242,32
Ink 4
A=40 : B=20
For J=0 To 200
If J=50 Then Bell : Centre "- Quarter Full!"
If J=100 Then Bell : Centre "- Halfway there!"
If J=150 Then Bell : Centre "- Three Quarters!"
For I=0 To 10
Plot A,B+I
Next I
Inc A
Wait 3
Next J
Centre "<- Finished! ->"
Bell
Wait Key

Ce programme crée un pointeur animé comme celui que vous voyez sur les ordinateurs IBM. Assignez chaque image de l'animation à un sprite et attachez-le au pointeur pour un effet complet.

Curs Off : Paper 0 : Cls 0
Dim A(4)
For Z=1 To 4 : Read A(Z) : Next Z
Do
Locate 15,15
Print Chr$(A(B))
Inc B
If B=5 Then B=0
Wait 3
Loop
Data 124,92,137,47

Voici une routine pratique pour afficher du texte centré et défilant verticalement. Le texte dans les déclarations DATA est centré et défile vers le haut de l'écran, tout en s'estompant en haut et en bas à l'aide d'un arc-en-ciel.

Rem * Vertscroll.AMOS *
Rem
Rainbow Del : Auto View Off : Hide
Restore TEKST : Read N : Dim TE$(N)
For x=1 To N = Read TE$(X) : Next
Screen Open 0,640,N*8+256,2,Hires : Curs Off : Cls 0
Colour 0,$0 : Colour 1,$0
SPEED=0
For I=1 To N : Centre TE$(I) : Print : Next
Set Rainbow 0,1,s000,"(1e,1,1o)","(1e,1,1e)","(1o,1,1o)"
EFX
Rainbow 0,,0,256
Screen Display 0,128,300,320,255
Auto View On
Repeat
Screen Display 0,,280,,
Screen Offset 0,0,0
For Y=280 To 40 Step -1
If SPEED>0 Then Wait SPEED
Wait Vbl
Screen Display 0,128,Y,320,258
Next
For Y=0 To N*8
If SPEED>0 Then Wait SPEED
Screen Offset 0,0,Y
Wait Vbl
Next
Wait 100
Until Inkey$<>""
End

Les informations suivantes et les programmes vous fourniront des outils très utiles pour vos projets de développement sur AMOS. Ce sont des exemples simples qui peuvent

Rem * Some Useful Programs Continued *
Rem
TEKST
Data 64-36
Data
"?o0000o0?-"
Data
Data
"Hello there!"
Data
Data
"Welcome to the Vertscroller"
Data
Data
"Specially made by KV"
Data
Data
"and freshly baked by Phil Snout." 
Data
Data
"AMOS allows you to do many things"
Data
Data
Data
Data
Data
"?o0000o0?-"
Data
Data
Data
Data
"Original code by KV"
"92 version by Phil South"
"Produced by Bruce Smith"
"That's all we have time for now See you later"
"Okie dokie artichokiel"
For L=0 To 127 Step B
For X=0 To 7
Rain(0,L+X)=C
Next
C=C+$111
Next
C=$FFF
For L=128 To 255 Step 8
For X=0 To 20
Rain(0,L+X)=C
Next
C=C-$111
Next
End Proc

Voici une petite démonstration qui vous permet de créer un effet de texte grand format défilant à l'écran. Ce programme prendra du texte depuis la variable LET$ et l'affichera à travers l'écran. Vous pouvez le modifier pour que le texte défile plus lentement ou de façon plus fluide. Essayez de rendre le programme plus impressionnant en modifiant l'affichage du texte.

Rem * Big Text.AMOS *
Rem
LET$=" Let's hear it for AMOS!!! "
LET$=LET$+". It's a brilliant programming language, and now with AMOS 3D and the Compiler..."
LET$=LET$+" AMOS is the best program in the WORLD!!! That's all folks..... "
LETOFF=0
J
Screen Open 1,416,256,4,Lowres
Def Scroll 1,0,0 To 416,256,-53,0
Curs Off : Flash Off
Do
_SCROLLIT
If Mouse Key=1 Then Exit
Loop
Edit
Procedure _SCROLLIT
Shared LET$,LETOFF
If LETOFF=Len(LET$) Then LETOFF=0
Screen 0 : Locate 0,0 : Print Mid$(LET$,LETOFF+1,1)
Zoom 0,0,0,8,8 To 1,352,0,400,256
Screen 1
Scroll 1
Inc LETOFF
End Proc

Il s'agit d'un simple programme pour obtenir les coordonnées de la souris et les afficher à l'écran. Ce programme charge une image IFF en arrière-plan, puis vous permet de lire les coordonnées de la souris à chaque fois que vous la déplacez sur l'écran. Cela vous permet de tester et d'enregistrer les positions avec une précision plus grande.

Rem * MouseMeUp.AMOS *
Rem
Paper 0 : Cls 0
Curs Off
F$=Fsel$("*.IFF",""," Load Background IFF Pic ")
If F$="" Then Edit
Load Iff F$,O
Locate 0,0
Print "Mouse Co-ords Tool v1.1"
Locate 0,1 : Print "X= " : Print "Y="
Locate 0,20 : Print "CTRL-C to stop"
Do
Y1=Y Mouse
X1=X Mouse
Y1$=Str$(Y1) : X1$=Str$(X1)
Locate 6-Len(X1$),1 : Print X1 : Locate 6-Len(Y1$),2 : Print Y1
Loop

Voici un exemple de remplacement de la fonction Sort de l'original manuel AMOS. Ce programme trie une liste de chaînes dans un tableau et les affiche par ordre croissant. C'est un bon exemple de gestion de chaînes et de tableau, et vous pouvez l'adapter pour d'autres types de tri.

Rem * Stringsort.AMOS *
Rem
Screen Open 0,64,256,4,Hires
Paper 0 : Cls 0
Locate 0,0
Print "This routine replaces that given in the AMOS manual for the Sort command."
Print "It can also be modified to use variables."
Print "" : Wait Key : Cls
Input "Enter max array values"; N
Dim A$(N)
P=1
Repeat
Input "Enter string (Null to stop)"; A$(P)
Inc P
Until A$(P-1)=""
A$(P-1)=""
For I=0 To N-1
For J=I+1 To N-1
If A$(I)>A$(J) Then
Temp$=A$(I)
A$(I)=A$(J)
A$(J)=Temp$
End If
Next J
Next I
Cls
Print "Sorted array in ascending order:"
For J=1 To N
Print A$(J)
Next J
Wait Key

Dans cet exemple, nous avons un tableau de chaînes et nous effectuons un tri à bulles pour organiser les chaînes dans l'ordre croissant. Cela démontre l'utilisation de boucles imbriquées pour effectuer un tri simple.

Ces programmes pratiques sont conçus pour faciliter les opérations courantes dans les jeux, le traitement de texte et la gestion des ressources dans AMOS. Il existe de nombreuses autres façons d'utiliser AMOS pour améliorer vos projets. L'un des avantages majeurs de AMOS est la facilité d'intégration de composants et d'extensions pour élargir les possibilités de votre programme.

← Retour au sommaire