1.  Le jeu

Je vous propose le listing d’un petit jeu paru dans Eyrolles « faites vos jeux » : GOAL.

Vous venez d’être sélectionné comme goal dans une grande équipe de football.
 
Saurez-vous être à la hauteur de la situation en interceptant tous les tirs de vos adversaires qui se montrent particulièrement adroits.
Les buts sont matérialisés par deux poteaux sur la droite de l’écran. Vous déplacez le goal, entre les deux poteaux à  l’aide des deux touches »HAUT » et « BAS ». Douze tirs au but vont avoir lieu. Pour chaque tir, vous voyez apparaître en un  endroit quelconque de l’écran, un joueur accompagné d’un ballon. Au bout d’un court instant (variable d’une fois à l’autre), le joueur « shoote ” dans le ballon et il vous faut l’intercepter.

Vous pouvez déplacer le goal dès que le joueur apparaît. Comme vous le constaterez, vos adversaires sont très habiles puisqu’ils tirent toujours dans les buts.

Le programme affiche le nombre d’essais, le nombre de ballons interceptés et le meilleur score réalisé depuis le début du jeu.

2. Le programme

100 ‘ *********************** GOAL ******************

110 ‘

120 DEF FNSC(X,Y)=TEST(16*(X-1)+7,16*(25-Y)+13)

130 G0SUB 9000

140 GOSUB 8000

150 FOR IC=1 TO NC

160 G0SUB 5000

170 GOSUB 3000

160 LOCATE X,Y : PRINT “ « ;

190 X=X+2: Y=Y+DY

200 IF X> = XG THEN G0SUB 4000: GOTO 230

210 PEN 3: L0CATE X,Y: PRINT B$;

220 GOTO 170

230 NEXT IC

240 IF SC>MS THEN MS = SC

250 PEN 3: LQCATE 6,13

260 WHILE INKEY$<> » »: WEND

270 PRINT « voulez vous rejouer (0/N)? » ;

280 R$=INKEY$: IF R$ = «  » THEN 280

290 IF R $ O uir THEN 140

300 END

310 ‘

3000 ‘———SP DEPLACEMENT GOAL———–

3010 ‘

3020 GA=INKEY(0): DR=INKEY<2)

3030 IF GA*DR=0 THEN 3060

3040 FOR K=1 TO 20: NEXT K

3050 RETURN

3060 LOCATE XG,YG : PRINT  » « ;

3070 LOCATE X G,Y G +1 : PRINT « 

3080 Y G = Y G-(GA = 0)*(Y G > Y P1 +1) + (DR = 0)*<YG<YP2-2)

3090 PEN 1

3100 LOCATE XG,YG : PRINT G H $ ;

3110 LOCATE XG, YG+1 : PRINT G B T- ;

3120 RETURN

3130 ‘

4000 ‘——-SP FIN DE COUP—————-

4010 ‘

4020 IF FNSC (X,Y)=0 AND FNSC(X-l,Y)=0 THEN 4070

4030 SC=SC+1

4040 SOUND 1,379,6

4050 PEN 2: LOCATE 15,24: PRINT SC;

4060 GOTO 4090

4070 FOR H = 500 TO 200 STEP -20: SOUND 1,H,1 : NEXT H

4080 ‘

4090 LOCATE X J , YJ : PRINT « 

4100 LOCATE XJ,YJ + 1 : PRINT « 

4110 FOR K = 1 TO 100: NEXT K

4120 RETURN

4130 ‘

5000 ‘———SP INITIALISATION D’UN COUP—-

5010 ‘

1020 Pi N 2: LOCATE 7,24: PRINT IC;

5030 ‘

5040 X = X1+ 2* INT(RND(1)*(X2-X1 + 11/2)

5050 Y = Y1+2*1 NT(RND(1)*(Y2-Y1 + 1)/2)

5060 D Y = IN T (RND(l)*5)-2

5070 Y I = Y + ( XF’-X+l ) *DY/2

5080 IF ■Y K = YP1 + 1 OR YI>YP2- 1 THEN 5040

5090 ‘

5100 X J = X — 1 : Y J=Y — 1

5110 PEN 3: LOCATE X,Y: PRINT B*;

5120 LOCATE X J , YJ : PRINT JH$;

5130 LOCATE XJ , YJ+1 : PRINT JB1T;

5140 ‘

5150 FOR IA = 1 TQ T M * R N D (1)

5160 G0S U B 3000

5170 NEXT IA

5190 PEN 3: LOCATE XJ.YJ+l: PRINT JB2Î;

5200 SOUND 1,478.6

5210 RETURN

5220 ‘

8000 ‘———SP INITIALISATION PARTIE

8010 ‘

8020 SC = Û: XG = XP : YG = ( YP1+YP2)/2 : CLS

8030 ‘

8040 PEN 2

8050 LOCATE X P—1,Y P1 — 1 : PRINT P$;

8060 LOCATE X P-1,Y P1 : PRINT P*;

8070 LOCATE X P-1,Y P 2 : PRINT P$;

8080 LOCATE XP-1,YP2+1: PRINT P*;

8090 ‘

8100 PEN 1

8110 LOCATE XG , YG : PRINT GH$;

8120 LOCATE XG,YG+1: PRINT GBfj

8130 ‘

8140 PEN 2: LOCATE 5,23

8150 PRINT “BALLON SCORE M-SCÜRE »;

8160 LOCATE 23,24: PRINT MS;

8170 RETURN

8180 ‘

9000 ‘SP INITIALISATION DU JEU

9010 ‘

9020 MODE 1

9030 CE = 21 : BR = 0: CG = 6 : CP = 7: CB = 2

9040 INK 0,CE : INK 1 , CG : INK 2,CP: INK 3,CB

9050 BORDER BR: PAPER 0: CLS

9060 ‘

9070 X 1 =4 : X 2 = 26 : Y1=2 : Y2 = 21

9080 YP1=2: Y P 2 =18 : XP = 37

9090 N C =12 :. T M = 10 0 : MS = 0

9100

9110 SYMBOL A F T E R 160

9120 SYMBOL 160, 0,56,56,48,63,56,52,50

9130 SYMBOL 161, 49,40,40,40,40,40,60,0

9140 SYMBOL 162, 49,40,36,38,38,38,51,0

9150 SYMBOL 163, 0,28,28,12,252,28,44,76

9160 SYMBOL 164, 120,20,36,68,68,68,204,0

9170 SYMBOL 165, 24,60,126,126,126,126,60,24

9180 JH’i = CHR$ (160): JB 1 J = CHR$ (161): JB2f = CHR$ ( 162)

9190 GH$ = CHR$ ( 16*3) : GB$ = CHR$ ( 1 64 ) : B$ = CHR$ ( 165 )

9200 P ÿ=C H R $ ( 143) + C H R f- ( 143)

9210 ‘

9220 RETURN 

3. Si vous souhaitez personnaliser ce programme

Pour changer:

Les couleurs du terrain.  Remplacez, en 9030, la valeur 21 (dans CE=21) par un nombre de votre choix (entre O et 26).   

Du tour de l’écran Remplacez, en 9030, la valeur O (dans BR=O) par un nombre de votre choix (entre O et 26). 

Du joueur Remplacez, en 9030, la valeur 2 (dans CB=2) par un nombre de votre choix (entre 0 et 26). 

Du goal Remplacez, en 9030, la valeur 6 (dans CG=6) par un nombre de votre choix (entre 0 et 26). 

Pour modifier le nombre d’essais d’une partie Remplacez, en 9090, le nombre 1 2 (dans NC=12) par une valeur de votre choix. 

Pour modifier la taille des buts Modifiez, en 9080, les valeurs de YP1 (ici 2) et de YP2(ici 18) qui fixent la posi­tion des poteaux. 

Ainsi par exemple : 

9080  YP1 =8:  YP2= 18  :  XP = 37 

vous fourniront des petits buts, tandis qu’avec : 

9080  YP1 =2  :  YP2 = 22  :  XP = 37 

ils  occuperont presque toute la hauteur de l’écran. 

Pour utiliser une poignée de jeu 

Remplacez les lignes 3020 et 3030 par : 

3020  D=J0Y(0)
  

3030  IF  D  O 0 T H E N   3060 

et remplacez 3080 par : 

3080  YG = YG — (D = 1 )  .  (YG  >YP1 + 1)  +  (D = 2)  .  (YG<YP2-2) 

4.  Description du programme 

a)  Techniques employées, décrites en annexe 

—   Hasard, 

—   Animation, 

—   Lecture rapide du clavier, 

—   Examen du conten u de l’écran.  

b) Le  programme principal (100-300)  

120 définit une fonctio n permettant de connaître le numéro d’encre d’un point graphique de l’emplacement texte de coordonnées X,Y (ce point est choisid de telle manière qu’il figure à la fois dans la partie haute et la partie basse du goal).  

130 appelle le sous – progamme d’initialisation du jeu.  

140-290 correspondent au déroulement d’une partie. Elles sont répétées jusqu’à ce que vous précisiez que vous ne souhaitez plus rejouer : 

140 appelle le sous-programme d’initialisation d’une partie.

150-230 proposent les douze essais. Pour chaque coup :

160 appelle le sous-programme de début d’un coup.

170-220 sont répétées jusqu’à ce que le ballon atteigne la ligne des buts:

170 appelle le sous-programme de déplacement du goal.

180-210 déplacent le ballon et vérifient s’il atteint la ligne des buts.

240 actualise le meilleur score.

250-280 vous demandent si vous souhaitez rejouer.

c) Le  sous-programme d’initialisation du jeu (9000-9220)9020-9050 déterminent les différentes couleurs

9070-9080 fixent les limites de la zone à l’intérieur de laquelle le joueur peut apparaître ainsi que la position des poteaux.

9090 fixe le nombre d’essais, le temps d’attete maximum et initialise le meilleur score.

9110-9200 fabriquent les caractères graphiques utilisés  pour représenter le joueur, le goal et le ballon.

d) Le sous-programme d’initialisation d’une partie (8000-8170)

8030 initialise le score, détermine la position initiale du goal et efface l’écran.

8040-8080 dessinent les poteaux des buts.

8100-8120 dessinent le goal dans sa position initiale.

8140-8170 affichent le meilleur score

e) Le sous-programme d’initialisation d’un coup (5000-5210)

5020 affiche le numéro du coup qui va être joué.

5040-5050 choisissent au hasard un em placement pour le joueur.

5060-5080 choisissent au hasard une direction de tir telle que la trajectoire du ballon passe entre les deux poteaux.

5100-5130 dessinent le ballon et le joueur dans la position « prêt à shooter ».

5150-5170 permettent d’attendre pendant un temps tiré au hasard. a répéti­tion de l’appel du sous-programme 3000 permet de déplacer le goal pendant ce temps.

5190-5210 dessinent le joueur en train de shooter dans le ballon et émettent un son approprié.

f) Le sous-programme de déplacement du goal (3000-3120)

3020-3050 examinent le clavier. Si aucune des 2 touches <- et -»  n’est pressée, on quitte le sous-programme après un léger temps d’attente (qui permet ainsi au ballon de ne pas se déplacer plus vite que lorsque vous déplacez le goal).

3060-3070 effacent le goal de sa position actuelle.

3080-3110 déterminent la nouvelle position du goal et l’y redessinent.

g) Le sous-programme de fin d’un coup (4000-4130)

4020 examine si le ballon est intercepté parle goal.

4030-4060 exécutées en cas de succès, ces instructions actualisent le score, l’affichent et émettent un son approprié.

4070 émet un son correspondant à l’échec.

4090-4110 effacent le joueur et attendent un instant.