Prob de gestion de souris [débutant]

cs_hagakure Messages postés 2 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 16 décembre 2003 - 16 déc. 2003 à 14:03
cs_hagakure Messages postés 2 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 16 décembre 2003 - 16 déc. 2003 à 16:28
bonjour a vous tous

voila je suis débutant en asm, et je doi coder un jeu de combat naval, dont voici les règles :
-le champ de mouillage est de 10 sur 10 en mode video 80*25
-je dois placer trois navires de manière séquentielle, un de 5 case, un de 3, un de 1 seule, soit horizontalement ou verticalement,on cliquant dans le champ de mouillage.

mon problème, c'est que je n'arrive pas a coder , de manière a afficher un navire la ou je clic.

voici mon code source (dsl de la longueur... )
le problème se situe tout a la fin, je l'ai indiqué en commentaire

.model small
.stack 100h
.386

;-------------------------------------------------------------------------
;- LMI3 -
;- Combat naval -
;-------------------------------------------------------------------------

.data

;-------------------------------------------------------------------------
;- Donn‚es -
;-------------------------------------------------------------------------

colonne db ? ; variable pour repr‚senter les colonnes de pixels
ligne db ? ; variable pour repr‚senter les lignes de pixels
carac db ? ; variable pour les caractŠres
couleur db ? ; variable pour la couleur des caractŠres
s db 'S$' ; champ pour les navires
nav db 'Navires$' ; champ 'navire'
pos db 'Position$' ; champ 'position'
vh db 'VH$' ; champ 'vertical' ou 'horizontal'
quitter db 'Quitter$'
suivant db 'Suivant$'
zmess db 'Zone de message$'
malpos db 'Mal positionn‚$'
bienpos db 'Bien positionn‚$'

.code

;-------------------------------------------------------------------------
;- D‚but de la proc‚dure -
;-------------------------------------------------------------------------

main proc

MOV AX,@data
MOV DS,AX

; Appels d'interuptions
; ---------------------

CALL video ; apel du mode video 80*25

; Zone de Mouillage
; *****************

; Affichage des coins j'affiche d'abords les coins vide du champ de mouillage
; -------------------
; Coin sup‚rieur gauche vide

MOV couleur,01000001b ; pixel rouge sur fond vide
MOV colonne,30 ; je place mon champ de mouillage a la colonne 30
MOV ligne,0 ; je place mon champ de mouillage a la ligne 0
MOV carac,0 ; 0, pour qu'il n'affiche rien

CALL position ; on apelle la proc‚dure de positionnement
CALL caractere

; Coin inf‚rieur gauche

MOV colonne,30
MOV ligne,11
MOV carac,0

CALL position
CALL caractere

; Coin sup‚rieur droit

MOV colonne,41
MOV ligne,0
MOV carac,0

CALL position
CALL caractere

; Coin inf‚rieur droit

MOV colonne,41
MOV ligne,11
MOV carac,0

CALL position
CALL caractere

; Affichage des lignes de caractŠres
; ----------------------------------

; Ligne sup‚rieure
; j'afiche la ligne indiquant les chiffres 0 1 2 etc.
MOV colonne,31
MOV ligne,0
MOV carac,48
MOV CX,10 ; CX est le "compteur", il d‚cr‚mente jusqu'a 10

lignesup: ; label pour ma boucle

CALL position
CALL caractere
ADD colonne,1 ; j'avance d'une colonne lors de la boucle
ADD carac,1 ; j'avance d'une ligne lors de la boucle
LOOP lignesup

; Ligne inf‚rieure
; affiche la ligne inf‚rieure du champ de mouillage
MOV colonne,31
MOV ligne,11
MOV carac,48
MOV CX,10

ligneinf: ; label de ma boucle

CALL position
CALL caractere
ADD colonne,1
ADD carac,1
LOOP ligneinf

; Ligne de gauche
; affiche la ligne sur les cot‚s du champ de mouillage A B C
MOV colonne,30
MOV ligne,1
MOV carac,65
MOV CX,10

ligneg: ; label de ma boucle

CALL position
CALL caractere
ADD ligne,1
ADD carac,1
LOOP ligneg

; Ligne de droite

MOV colonne,41
MOV ligne,1
MOV carac,65
MOV CX,10

ligned: ; label de la boucle

CALL position
CALL caractere
ADD ligne,1
ADD carac,1
LOOP ligned

; Champs ; code pour l'affichage des diff‚rents champs
; ******

; Champ S
; -------

MOV colonne,25
MOV ligne,13
MOV carac,178
CALL position ; procedure afin de positionner la premiŠre case du champ
MOV DX,offset s ; S = adresse de la chaine
CALL affichage ; apel de la proc‚dure d'affichage
ADD ligne,1 ; on descend d'une ligne
MOV CX,3 ; … trois reprises

boucles: ; label de la boucle

CALL position
CALL caractere
ADD ligne,2
LOOP boucles

; Champ Navires
; ------------
; Navire 5 affiche le navire … 5 cases

MOV couleur,01001010b
MOV colonne,30
MOV ligne,13
MOV carac,178
CALL position
MOV DX,offset nav ; nav = adresse de la chaine
CALL affichage
ADD ligne,1
MOV CX,5 ; r‚pition … 5

bouclenav5: ; label de la boucle

CALL position
CALL caractere
ADD colonne,1 ; augmente d'une colonne a chaque passage dans la boucle
LOOP bouclenav5

; Navire 3

MOV couleur,01001001b
MOV colonne,30
ADD ligne,2
MOV CX,3

bouclenav3:

CALL position
CALL caractere
ADD colonne,1
LOOP bouclenav3

; Navire 1

MOV couleur,01001100b
MOV colonne,30
ADD ligne,2
CALL position
CALL caractere

; Champ Position
; -------------

MOV colonne,42
MOV ligne,13
CALL position
MOV DX,offset pos
CALL affichage

; Champ VH
; --------

MOV colonne, 25
MOV ligne,20
CALL position
MOV DX,offset vh
CALL affichage
ADD ligne,1
MOV CX,2

bouclevh:

CALL position
CALL caractere
ADD colonne,1
LOOP bouclevh

; Champ Quitter
; -------------

MOV colonne,35
CALL position
CALL caractere
ADD colonne,2
CALL position
MOV DX,offset quitter
CALL affichage

; Champ Suivant
; -------------

MOV colonne,45
CALL position
CALL caractere
ADD colonne,2
CALL position
MOV DX,offset suivant
CALL affichage

; Zone de message
; ---------------

MOV carac,0
MOV couleur,01111000b
MOV colonne,1
MOV ligne,22
CALL position
MOV DX,offset zmess
CALL affichage
ADD ligne,1
MOV CX,60

bouclemess:

CALL position
CALL caractere
ADD colonne,1
LOOP bouclemess

;=========================================================================

MOV colonne,1
MOV ligne,23
CALL position

; Initialisation de la souris

CALL init_souris

; Afficher le curseur de la souris

CALL aff_curseur

; Clic de la souris
; -----------------

@@debut: CALL clic ; comparaison avec la case suivant et quitter

cmp dx,20
jne @@suivant
cmp cx,35
jne @@suivant

call quiter

@@suivant:
cmp dx,20
jne @@debut
cmp cx,45
jne @@debut

@@clicH: CALL clic ; comparaison avec la case H ou V
cmp dx,20
jne @@clicV
cmp cx,25
jne @@clicV

; call horizontalenav5

@@clicV:
cmp dx,20
jne @@clicH
cmp dx,26
jne @@clicH

; call verticalenav5

;--------------------------------------------------------------------------
;- Fin de la proc‚dure -
;--------------------------------------------------------------------------

MOV AX,4C00h
INT 21h

main endp

;--------------------------------------------------------------------------
;- Proc‚dures secondaires -
;--------------------------------------------------------------------------

video proc
pusha
MOV AH,00h
MOV AL,03h
INT 10h
popa
ret
video endp

position proc
pusha
MOV DL,colonne
MOV DH,ligne
MOV AL,00h
MOV AH,02h
INT 10h
popa
ret
position endp

caractere proc
pusha
MOV CX,1
MOV BH,0
MOV BL,couleur
MOV AL,carac
MOV AH,09h
INT 10h
popa
ret
caractere endp

clavier proc
pusha
MOV AH,00h
INT 16h
popa
ret
clavier endp

affichage proc
pusha
MOV AH,09h
MOV AL,00h
INT 21h
popa
ret
affichage endp

init_souris proc
pusha
MOV AH,00h
MOV AL,00h
INT 33h
popa
ret
init_souris endp

aff_curseur proc
pusha
MOV AH,00h
MOV AL,01h
INT 33h
popa
ret
aff_curseur endp

clic proc
pusha
@@rebond:
mov ax,3
int 33h
cmp bx,0
jne @@rebond

@@attend:
int 33h
cmp bx,0
je @@attend
cmp bx,1
je @@fin
@@fin:
shr cx,3
shr dx,3
popa
ret
clic endp

quiter proc
pusha
mov ax,4c00h
int 21h
popa
ret
quiter endp

horizontalenav5 proc
si on clic sur H, afficher un navire de 5 case horizontalement la ou je clic sans le champ de mouillage
pusha
mov couleur,01001010b
call clic
call position
mov cx,5

bouclenavi5:
call position
add colonne,1
loop bouclenavi5
popa
ret
horizontalenav5 endp

verticalenav5 proc
si on clic sur V, afficher un navire de 5 case verticalement la ou je clic
pusha
mov couleur,01001010b
call clic
mov colonne,dx ; prob
mov ligne,cx ; prob
call position
mov cx,5
bouclenavire5:
call position
add ligne,1
loop bouclenavire5
popa
ret
verticalenav5 endp

end main

1 réponse

cs_hagakure Messages postés 2 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 16 décembre 2003
16 déc. 2003 à 16:28
horizontalenav5 proc
si on clic sur H, afficher un navire de 5 case horizontalement la ou je clic sans le champ de mouillage
pusha
mov couleur,01001010b
mov colonne,dx ; prob !!!!!!!!!!!!!!!!!!!
mov ligne,cx ; prob !!!!!!!!!!!!!!!!!
call clic
call position
mov cx,5

bouclenavi5:
call position
add colonne,1
loop bouclenavi5
popa
ret
horizontalenav5 endp

verticalenav5 proc
si on clic sur V, afficher un navire de 5 case verticalement la ou je clic
pusha
mov couleur,01001010b
call clic
mov colonne,dx ; prob !!!!!
mov ligne,cx ; prob !!!!!
call position
mov cx,5
bouclenavire5:
call position
add ligne,1
loop bouclenavire5
popa
ret
verticalenav5 endp

la ou j'ai mis "prob ", je voudrai en fait que 'colonne' et 'ligne' aient les coordonées de la souris, pour que le navire puisse s'afficher la ou je clic...
0
Rejoignez-nous