J'avais besoin d'aide pour faire rebondir un personnage sur mon écran en utilisant l'emu8086. La taille de l'écran est (80x25 char). J'ai réussi à le déplacer en diagonale, mais il ne rebondit pas. Au lieu de cela, il va tout droit sur x axes après avoir atteint la limite (c'est-à-dire 24e ligne) Voici ce que j'ai fait jusqu'à présent.comment faire rebondir un char en assemblage
enter code here
Data_seg segment 'data'
char db 'A'
char2 db ' '
x1 db (1)
y1 db (1)
Data_seg ends
Code_seg segment 'code'
assume CS:Code_seg,DS:Data_seg
main PROC far
mov ax,Data_seg
mov ds,ax
mov cx,40
loop1:
;gotoxy
mov ah,02
mov dl,x1
mov dh,y1
mov bh,0
int 10H
;print a
mov al,char
mov dl,al
mov ah,02H
int 21H
;gotoxy
mov ah,02
mov dl,x1
mov dh,y1
mov bh,0
int 10H
;print " "
mov dl,char2
mov ah,02H
int 21H
inc x1
inc y1
;if(x1<2)||(x1>79)
mov al,x1
cmp al,2
jl ifPart
mov al,x1
cmp al,79
jge ifPart
;if(y1<2)||(y1>79)
y11:
mov al,y1
cmp al,2
jl ifPart2
mov al,y1
cmp al,24
jge ifPart2 ;jge for boundry(24)
jmp endif
ifPart:
dec x1
jmp y11
ifPart2:
dec y1
endif:
loop loop1
Code_seg ends
end main
Le personnage rebondit maintenant, en déplaçant les vecteurs. Theres un léger problème qui se produit quand il rebondit.Il montre le personnage à la colonne la plus à gauche de la 24e rangée, puis rebondir. –
Correction: J'ai réussi à résoudre le problème (décrit dans le commentaire) en changeant "cmp al, 24" en "cmp al, 23". Le programme fonctionne parfaitement maintenant. Merci beaucoup pour votre aide. –
@MUHAMMADAHMEDVOHRA environ 24/23 .. n'est pas le problème avec votre utilisation de l'interruption de sortie DOS, rendant l'écran "défiler" lorsque la dernière ligne est utilisée? Considérez les écritures directes sur VRAM (le mode texte commence à B800: 0000 par défaut sauf si vous reconfigurez les composants internes de la carte graphique), ce qui sera beaucoup plus rapide et vous donnera un contrôle total sur le contenu VRAM. et utilisez toutes les combinaisons possibles de couleur/clignotement. Et pas de défilement à la dernière ligne (vous devrez faire défiler manuellement par code, soit en déplaçant le contenu VRAM, soit en changeant le début de la mémoire vidéo). – Ped7g