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.