Et voila la suite du début de 'Je vais vous faire
un super prog qui tue et qui fait de moi un gars
super connu du milieu !'
Ce coup ci c'est la gestion clavier et joystick.
Et oui c'est chouette d'affiché des bonzommes, mais
c'est mieux quand on peut les bougés, sinon cela
s'appelle une démo !!
Donc pour bougé vos lutins au clavier, comment faire ?
Vous utilisez pour beaucoup d'entre vous la fonction
'Inkey$' qui renvoie une chaine avec dedans la touche
appuyé. Par contre petit pb, si vous appuyez sur F1 que
vous affiche inkey$ ? Et bien surement pas F1 !!! Mais
un caractère du clavier, donc bonjour les confusions, et
de toute façon certaines touches n'ont pas d'équivalence
'chaine' donc on va règlé le pb tout de suite. J'ai vite
écrit une 'little routine' qui va vous donné le code ascii
de la touche appuyé et le scan code de celle ci.
Mais qu'est ce qu'un scan code ? Le scan code est un 'code'
(bravo GT !) qui est attribué a chaque touche du clavier.
C'est un code 'physique' cela signifie que quelque soit le
clavier (qwerty, qwertz, voire turc !) cela sera toujours le
meme code, donc prudence utilisé seulement le scan code
quand c'est pas possible d'utilisé le code ascii. Car sinon
pour la table des scores, les anglais vont trinqué avec
une chouette permutation de certaines touches, (a et q, etc..)
Voila la routine et un exemple :
DO
@key
IF scan_code& ! Une touche de pressé ?
PRINT AT(10,10);CHR$(key&) ! Affiche la touche (N'oubliez pas la parenthèse, les smiles me l'ont mangé !)
PRINT AT(10,12);HEX$(scan_code&) ! et son scan code en hexa.
ENDIF
LOOP
'
> PROCEDURE key ! la procédure
yop%=GEMDOS(6,W:&HFF) ! un appel a gemdos
key&=yop% AND &HFF ! traitement pour la touche
scan_code&=SHR(yop%,16) AND &HFF ! traitement pour r‚cup le scan code.
RETURN
Dans votre programme vous appelez la procédure key et après celle
ci vous aurez deux variables : key& et scan_code& donc pour
mémoire, dans key& vous aurez le code ascii de la touche appuyez
sinon 0 et scan_code& bien sur le scan_code& de la touche pressé.
(Par contre quelqu'un sait ou on peut trouvé sur le net, un descriptif
des scan code du clavier Atari ? Celle du compendium est assez incompréhensible, sinon faut que je réussisses a scanné celle du livre du dvp et la posté)
C'est classe non ?
je vais pas trop m'étallé la dessus, il y a rien de magique.
On passe au vrais truc, les joysticks !!!!
Pas de pb de ce coté, le GFA pense a nous, vous avez 2 fonctions pour
cela :
stick() et strig() qui renvoie respectivement la position du joy
et l'état du bouton de feu.
Exemple :
joy1&=stick(1)
renvoie dans joy1& la position du joy 1.
joy1&=1 pour le haut, 2 pour le bas, 4 pour la gauche et 8 pour la droite.
et pareil pour le joy 0 avec stick(0).
fire1&=strig(1)
renvoie une valeur différente de zéro si fire est pressé et zéro pour
un fire pressé. Pareil pour l'autre fire avec fire0&=strig(0)
La planque les joys, n'est ce pas ?
Un piège et oui, sinon la programmation serait trop simple !!!
Pour faire allez votre bonhomme a gauche, vous ferez surement un truc comme :
if joy1&=4 then
x&=x&-1
endif
Cela marche pas de soucis, pour les autres directions pareil mais ou est
le pb vous allez me dire ? Essayez une diagonale, ARGHHH !!! Ca marche pas !!
Cela ne dérange pas pour un pacman mais essayez donc sur un shoot'em up sans
les diago !!!
Et oui, une diagonale est composé de l'addition de deux valeurs fondamentales
qui la composent (Par exemple gauche et haut, etc...) donc comment faire ?
Il y a deux solutions, une simple mais longue et une un peu plus courte mais
plus technique et qui utilise btst, affichez donc l'état d'un joy en binaire
vous comprendrez.
Je vais vous laisser cherché un peu, cette partie n'est pas terminé. J'ai ‚crit
ceci histoire de vous occupé un peu au lieu de faire des cochonneries avec la
copine vous ferez un truc intelligent !!! L'upload pour chargé les fichiers
refonctionne mais pour l'instant qu'avec les images, donc voila pourquoi
ceci n'est qu'un fichier texte et pas de sources. Donc vous allez pouvoir
cherché un peu pour les joys, réponse dans la seconde partie de ce chapitre
avec en plus la gestion des joys sur le port centronics (Adaptateur demandé !)
si vous avez pas l'adaptateur pas de soucis, et aussi le necessaire pour la
gestion des jagpads pour les heureux possesseurs de Ste et d'un Jagpad.
Voili, voilou !!!
GT Turbo (C.V.S.D.)