Accueil > QBasic > QBasic – La manette de jeu

QBasic – La manette de jeu

This entry is part 25 of 30 in the series QBasic - Tutoriel
  1. STICK
  2. STRIG
  3. ON STRIG, STRIG ON, STRIG OFF, STRIG STOP

Dans QBasic, aucune fonction ne permet de se servir de la souris (du moins, par les moyens conventionnels…).
Par contre, l’utilisation d’un ou plusieurs JoySticks, JoyPads ou manettes de jeu, appellez ça
comme vous voulez, reste simple.

Vu que je n’ai qu’une manette, je n’ai pas pu tester les codes en impliquant deux. C’est à donc
à titre informatif que je vous les communique. Pour indication, ma manette s’appelle Saitek
CYBORG 3D Digital
, avec l’accélerateur sur le coté et tout et tout ! Super pour les jeux d’avions !

Contrairement à Windaube qui est chi… concernant l’installation de la manette de jeu (souvent
on doit ré-installer la carte son), en QBasic, c’est vraiment ce que l’on appelle du Plug and
Play
: on branche et sa marche (sauf exceptions, bien sûr…). Par contre, il faudra oublier
les multiples boutons ulta-sensitifs, mollettes d’ajustements ou autres viseurs infra-rouge si
on ne veut pas se compliquer la vie avec des lignes de codes compliquées. En effet, QBasic ne
reconnait que 2 boutons : celui du haut et celui du dessus, ce qui est déja pas mal.

Voici un petit programme illustrant les principales fonctions et instructions permettant de communiquer
avec les manettes de jeu :


CLS
DO
LOCATE 1, 1
PRINT « Manette 1 : X= »; STICK(0), « Y= »; STICK(1),
PRINT « Bouton 1= »; STRIG(1); « Bouton 2= »; STRIG(5)
PRINT
PRINT « Manette 2 : X= »; STICK(2), « Y= »; STICK(3),
PRINT « Bouton 1= »; STRIG(3); « Bouton 2= »; STRIG(7)
LOOP UNTIL INKEY$ <> «  »

Maintenant que vous êtes assez calés sur le QBasic, je ne sais pas si il est utile de vous détailler
ces lignes de code.

Bon aller…


STICK


L’instruction STICK renvoi les coordonnées X et Y des manettes.

  • STICK(0) : coordonnées X de la manette 1

  • STICK(1) : coordonnées Y de la manette 1

  • STICK(2) : coordonnées X de la manette 2

  • STICK(3) : coordonnées Y de la manette 2


À noter qu’il faut toujours faire appelle à STICK(0) avant d’utiliser les autres coordonnées.


STRIG


STRIG renvoi l’état des différents boutons des manettes de jeu. Il renvoi -1 (TRUE) lorsque
le bouton correspondant est enfoncé.

  • STRIG(1) : bouton inférieur de la manette 1

  • STRIG(3) : bouton inférieur de la manette 2

  • STRIG(5) : bouton supérieur de la manette 1

  • STRIG(7) : bouton supérieur de la manette 2


Vous remarquez qu’il manque des numéro. Normalement ils sont censés représenter l’état du bouton
correspondant depuis le dernier appel à ce dernier appel. Chez moi, l’emploi en est plutôt aléatoire.

  • STRIG(0) : bouton inférieur de la manette 1 de puis le dernier STRIG(0)

  • STRIG(2) : bouton inférieur de la manette 2 de puis le dernier STRIG(2)

  • STRIG(4) : bouton supérieur de la manette 1 de puis le dernier STRIG(4)

  • STRIG(6) : bouton supérieur de la manette 1 de puis le dernier STRIG(6)


Tout ça, c’est pour la théorie. En pratique, c’est parfois différent. Par exemple, si chez moi
j’execute le petit programme en haut de cette page, voici les conclusions que je tire avec le
Saitek (rappelez-vous que je n’ai qu’une seule manette). Voici pour la manette 1 :

  • STICK(0) : OK

  • STICK(1) : OK

  • STRIG(1) : correspondant à la gachette, OK

  • STRIG(3) : le troisième bouton en partant de la gauche, tout en haut, PRESQUE OK


Et voici pour la manette 2. Normalement, tout devrai être inactif :

  • STICK(2) : c’est la torsion de la manette, PAS OK

  • STICK(3) : c’est mon accélérateur, PAS OK

  • STRIG(5) : premier bouton en partant de la gauche, PAS OK

  • STRIG(7) : le bouton du milieur, PAS OK


J’ai donc deux manettes en une ! C’est révolutionnaire ! Vu que presque tous les boutons sont
reconnus, je vais pouvoir faire Flight Simulator en mieux ! Plus sérieusement, c’est certainement
que lorsque le QBasic est né, les manettes à 5 pattes et 3 têtes n’existaient pas.


ON STRIG, STRIG ON, STRIG OFF, STRIG STOP


Pour ne pas avoir a vérifier constament la valeur des boutons, on peut utiliser une routine qui
s’éxecutera à chaque fois que le bouton voulu sera actionné, à l’aide de ON STRIG.

La syntaxe est similaire en tout point à celle de ON ERROR vu précédement, sauf qu’on utilise
GOSUB et non GOTO.

Donc on poura écrire :

ON STRIG(0) GOSUB Feu ‘ On va au label Feu lorque le bouton inférieur
‘ de la manette est actionné
STRIG(0) ON ‘ Ne pas oublier d’activer l’intercéption d’évenement !

DO ‘ Voici une boucle où il ne se passe absolument rien
LOOP

Feu: ‘ Et pourtant…
SOUND 37, 4
PRINT « Tu as eu ma peau, rascal, argh! »
PRINT « The End »
END
RETURN


Le STRIG ON est indispensable pour activer l’intercéption des évenements. Sinon, on
aurait pu appuyer comme un sourd sur la gachette, rien ne se serait passé.

De même, si on veut, pour une raison ou pour une autre, susprendre l’intercéption des évenements,
on écrit tout simplement STRIG OFF :

ON STRIG(0) GOSUB Feu
STRIG(0) ON ‘ on active l’intercéption d’évenements …
STRIG(0) OFF ‘ … et ici on le désactive.

DO
LOOP

Feu:
SOUND 37, 4
PRINT « Tu as eu ma peau, rascal, argh! »
PRINT « The End »
END
RETURN


L’utilisation de STRIG STOP est d’un tout autre ordre. L’intercéption n’est pas désactivée.
Mais c’est la routine qui n’est pas éxecutée. C’est une subtilité qu’il faut sésir.

C’est à dire que si je fais appelle à STRIG STOP, je peux appuyer sur le bouton, rien ne se passe.
Mais lorsque je fais appelle à STRIG ON, si j’avais appuyé sur le bouton, la routine est traitée.
Sinon, rien.

L’exemple ci-dessous n’est peut-être pas des mieux trouvés (pas pire que le Marabou :) ), mais
il illustre cette technologie :

ON STRIG(0) GOSUB Feu
STRIG(0) STOP ‘ on STOPPE l’intercéption d’évenements …

CLS
PRINT « Je te donne 3 secondes pour dégainer le premier. »
PRINT « Passé ce délai, j’te butte salopard ! »
Fin = TIMER + 5 ‘ calcul du délai
DO
LOOP UNTIL TIMER > Fin ‘ fin du délai
STRIG(0) ON ‘ on réactive l’intercéption d’évenements

SOUND 37, 4
PRINT « J’t'avais laisser ta chance. »
END

Feu:
SOUND 37, 4
PRINT « Tu as eu ma peau, rascal, argh! »
PRINT « The End »
END
RETURN


Mais au fait, pourquoi à chaque fois STRIG(0) ? Pour identifier le bouton, bien sûr :

  • STRIG(0) : bouton inférieur de la manette 1

  • STRIG(2) : bouton inférieur de la manette 2

  • STRIG(4) : bouton supérieur de la manette 1

  • STRIG(6) : bouton supérieur de la manette 2


Ici aussi, c’est théorique…

Series Navigation«QBasic – Le traitement des erreursQBasic – Encore plus loin dans le graphisme»
Categories: QBasic Tags:
  1. Pas encore de commentaire
  1. Pas encore de trackbacks