Hello tout le monde !
Tout d'abord un bravo à toute la communauté qui permet de fournir une aide importante aux programmeurs en aide.
Si je viens vous trouver aujourd'hui, c'est parce que j'ai un petit problème : j'ai créé un jeu qui se pilote intégralement avec les touches du clavier + bouton entrer. L'idée est d'ajouter à ce pilotage le controle via la souris sans rien changer.
En effet, tout passe via une unité "clavier" qui retourne en fonction de la touche pressée 'haut", "bas", ...
Donc il me parait simple d'ajouter la sourie dans l'unité afin qu'elle retourne la même chose.
Le tout étant géré grace aux intéruptions assembleur.
L'unité clavier modifiée :
Donc une modification des coordonnées a de la souris devrait avoir pour effet d'entrainer l'action "haut".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 unit clavier; interface uses Dos, crt, souris; function lirecl : string ; implementation function Lirecl : string ; var Regs: Registers; x : char; a, b, ao, bo : integer ; begin x := char(0); initmouse; begin with Regs do repeat begin AH := $00; Intr ($16,Regs); if AL=0 then x := Char(AH or 128) else x := Char(AL); end; ao:=a; bo:=b; getmousepos(a,b); if ao<a then x:=char(208); if ord(x)= 203 then lirecl:='gauche' ; if ord(x)= 205 then lirecl:='droite' ; if ord(x)= 200 then lirecl:='haut' ; if ord(x)= 208 then lirecl:='bas' ; if ord(x)= 27 then lirecl:='echap'; if ord(x)= 13 then lirecl:='entrer'; if ord(x)= 32 then lirecl:='espace'; until ord(x) <> 0; end end; end.
Pour info, l'unité de gestion de la souris fournie dans les tuto du site :
Sauf que ... ça plante :/ Le programme reste figé : toutes les touches de mon clavier se transforment en touche "bas" ce qui est problématique. :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 unit souris; interface uses crt,dos; var reg : registers; function initmouse : boolean; Procedure Afficher ; Procedure Masquer ; Procedure getmousepos ( var mX, mY : integer ) ; function button : integer; implementation function initmouse: boolean; begin reg.ax:=$00; intr($33,reg); if reg.ax=0 then initmouse := false; if reg.ax=-1 then initmouse := true; end; {Affichage du curseur} procedure afficher ; begin reg.ax := $01; intr($33,reg); end; {Masque du curseur } procedure Masquer ; begin reg.ax := $02; intr($33,reg); end; Procedure getmousepos ( var mX, mY : integer ) ; begin reg.ax := $03; intr($33,reg); Mx := reg.cx; My := reg.dx end; function button : integer; begin reg.ax := $03; intr($33,reg); button := reg.bx; end; End .
Alors d'après vous, est-ce un conflit d'intéruption ou autre ?
Milel fois merci de votre aide !
Partager