❤ 0 Chapitre 9 :Je Commande , tu obéis !
Aller on va prendre en main cette megadrive. Jusque la, cette console exécute le code tous seul comme un grand, mais il va falloir lui donner des ordres en directe.
Pour cela on va utiliser un périphérique branché sur cette console. Une manette de jeu. C'est ce qui permet donc de donner des ordres à cette bestiole.
Une manette standard de mégadrive c'est un pad avec 4 directions.
Haut
Bas
Gauche
Droite
Les diagonales pour information, c'est juste le cumule de deux directions. Le pad possède aussi un bouton Start et trois boutons d'action nous allons dire. (A-B-C)
Il existe aussi des pad à 6 Boutons (Z X Y) et avec un bouton "mode". Vous savez quoi ? Second Basic permet d'utiliser tous ça.
Pour récupérer la touche utilisé, c'est simple il y a une fonction.
La fonction Joypad(id_pad)
id_pad est le port de la machine. (0 ou 1). 0 c'est le player 1 et 1 c'est le player 2.
fait un test !
1
2
3
4
5
6
7
| local A as integer
while 1
A=joypad(0)
print A
wend
|
Vous pouvez maintenant tester la pad avec l'emulateur ce qui donne pour le pad 0 :
Haut = 1
Bas = 2
Gauche = 4
Droite = 8
A=64
B=16
C=32
Start=128
Si vous avez configuré en 6 boutons.
Z =1024
X = 512
Y = 256
Mode : 2048
Ceci dit c'est pas trop la bonne méthode pour tester si une touche est utilisé. Il faut mieux utiliser les "bits"
voici un exemple concret.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| local A as integer
Local A As Integer
While 1
A=JoyPad(0)
If A.0 Then
Print "touche Haut"
ElseIf A.1 Then
Print "touche Bas"
ElseIf A.2 Then
Print "touche Gauche"
ElseIf A.3 Then
Print "touche Droite"
ElseIf A.4 Then
Print "touche B"
ElseIf A.5 Then
Print "touche C"
ElseIf A.6 Then
Print "touche A"
ElseIf A.7 Then
Print "touche Start"
ElseIf A.8 Then
Print "touche Z"
ElseIf A.9 Then
Print "touche Y"
ElseIf A.10 Then
Print "touche X"
ElseIf A.11 Then
Print "touche Mode"
Else
Print "rien"
EndIf
Wend
|
Et voila vous avez un belle exemple et une belle routine pour gérer le pad !
Maintenant nous allons déplacer notre sprite avec le pad ! et bloquer le sprite pour pas qu'il sorte de l'écran.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
Local sp1 As Integer,X As Integer,Y As Integer,A As Integer
LoadTiles E_Tiles,4,256
X=128
Y=128
sp1=AddSprite(2,2)
PropSprite sp1,256,0
MoveSprite sp1,X,129
While 1
Locate 10,0
Print y
A=JoyPad(0)
If a.3 And X<432 Then
X=X+1
ElseIf a.2 And x>128 Then
X=X-1
ElseIf a.0 And Y>128 Then
Y=Y-1
ElseIf a.1 And y<352 Then
Y=Y+1
End If
MoveSprite sp1,X,Y
Sleep 1,TvBlank
Wend
E_Tiles:
Rem Tile A
DataLong $11111111
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $11111111
DataLong $11111111
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $11111111
|
Explication :
Citation:
Nous savons que pour les sprites, il y a un décalage de 128 points en haut et à gauche ! donc on va mémoriser la valeur 128 à X et à Y.
Citation:
Je revient sur cette boucle. While 1 veux dire , boucle toujours !
C'est mal en programmation les boucles infinis ! Sauf que la nous sommes sur console. Et une console on quite le programme seulement quand nous plaçons l’interrupteur power sur off de la bête !
Citation: If a.3 And X<432 Then
X=X+1 |
Je vais expliquer seulement cette exemple.
le .3 test donc le 3em bit de A (Bon on verra ça un autre jour) en gros c'est si la touche Droite est utilisé.
Que ce passe t'il ? On ajoute tout simplement 1 à X donc on va le faire déplacer à droite ! A la condition que X est inférieure à 432. 432 c'est la limite de l'écran !
X=X-1 fait déplacer le sprite à Gauche.
Y=Y-1 (oui -1) le fait monter en Haut.
Y=Y-1 le fait descendre en bas.
C'est vraiment simple non ?
A oui pour pouvoir faire les diagonal, il ne faut pas faire des ElseIf mais de simple If qui permet de vraiment tester toutes les touches en même temps !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
If a.3 And X<432 Then
X=X+1
end if
If a.2 And x>128 Then
X=X-1
end if
ElseIf a.0 And Y>128 Then
Y=Y-1
end if
If a.1 And y<352 Then
Y=Y+1
End If
|
Citation:
On affiche le Sprite1 à la cordooné X et Y.
X et Y sont des valeurs contenues dans les variables adéquate !
Voila, vous savez poser un sprites, le faire déplacer avec vote pad ! Vous trouvez pas que ça manque un peu de couleur ? Si, ba c'est au programme de la prochaine leçon !
|