Soyez le premier à donner votre avis sur cette source.
Vue 9 786 fois - Téléchargée 820 fois
.model tiny .CODE ORG 100H START: jmp debut ; boot secteur info BootSecteur_FAT12 db 59 dup (?) ; BootSecteur_FAT16 db 59 dup (?) ; BootSecteur_FAT32 db 87 dup (?) ; BootSecteur_NTFS db 81 dup (?) ;=================================================================== afficheball proc near ; affiche la baballe (x,y)-> (bx,ax), couleur=cl,ch mov dx,320 ; di=bx+ax*320 mul dx add ax,bx mov di,ax mov es:[di-320],cl mov es:[di-1],cl mov es:[di+1],cl mov es:[di+320],cl mov es:[di],ch ret afficheball endp ;=================================================================== ;=================================================================== ;=================================================================== ;=================================================================== ;=================================================================== debut: cld ;initialisation mode graphique mov AX,13h int 10h mov ax,0a000h ; init variable mov es,ax mov ds,ax ;=================================================================== ; affichefond mov di,320*8 mov cx,6 mov al,1Fh bord1: push cx mov cx,320 rep stosb pop cx sub al,02h loop bord1 mov es:[di],320*14 mov es:[di],1715h mov es:[di+2],1B19h mov es:[di+4],1F1Dh mov es:[di+320-6],1D1Fh mov es:[di+320-4],191Bh mov es:[di+320-2],1517h mov si,320*14 mov di,320*15 mov cx,320*184 rep movsb ;=================================================================== mov si,64000 ; si pointe vers les données mov ax,00A0h mov es:[si],ax ; position de la raquette mov es:[si+2],ax ; position X mov es:[si+4],ax ; position Y mov es:[si+6],word ptr(0103h) ; vitesse VX,VY mov es:[si+8],word ptr(0028h) ; longueur raquette ; mov es:[si+10],word ptr(0000h) ; points xor bx,bx mov cx,128 tracepal: mov es:[si+12+bx],cl inc bx loop tracepal ;************************ boucleprincipale: ; boucle principale ;=================================================================== mov bx,es:[si+2] mov ax,es:[si+4] push bx push ax ; efface la balle xor cx,cx call afficheball pop ax pop bx mov cx,es:[si+6] ; faible=vx, fort=vy ; 1=-1 3=1 push cx sub bx,2 ; x=x+-1 xor ch,ch add bx,cx pop cx cmp bx,311 ; collision avec me mur de droite jb ok_bord3 ; non, on continue mov cl,1 ; oui, on inverse la vapeur!!! ok_bord3: cmp bx,8 ; collision avec me mur de gauche ja ok_bord1 ; non, on continue mov cl,3 ; oui, on inverse la vapeur!!! ok_bord1: sub ax,2 ;y=y+-1 add al,ch cmp ax,15 ; collision avec me mur d'en haut ja ok_bord2 ; non, on continue mov ch,3 ; oui, on inverse la vapeur!!! ok_bord2: mov es:[si+2],bx ; sauvegarde x, y, vx,vy mov es:[si+4],ax mov es:[si+6],cx mov cx,0e06h call afficheball ;=================================================================== ; traitememt de la raquette ; efface la raquette mov di,320*195+6 mov cx,308 xor al,al rep stosb ; affiche raquette mov cx,es:[si+8] push cx mov ax,es:[si] push ax add ax,195*320 mov di,ax mov si,64000+45 rep movsb mov si,64000 ;=================================================================== pop dx ; bouge la raquette mov ah,02h ; recupere l'etat du clavier int 16h and al,3 ; seulement les touches shifts pop cx ; recupere la longueure de la raquette cmp al,1 ; si byte 1, on bouge à droite jne pas_a_droite ; non => pas_a_droite add cx,dx cmp cx,312 ; on regarde si ca passe ja pas_a_droite ; non => pas_a_droite add dx,2 ; oui, on avance de 2 pas_a_droite: cmp al,2 ; si byte 2, on bouge à gauche jne pas_a_gauche ; non => pas_a_gauche cmp dx,7 ; on regarde si ca passe jb pas_a_gauche ;non => pas_a_gauche sub dx,2 ; oui, on recule pas_a_gauche: mov es:[si],dx ; on sauve la position mov ax,dx ; ax=position de la raquette mov bx,es:[si+2] ; bx=X mov cx,es:[si+4] ; cx=Y mov dx,es:[si+6] ; dx=vx,vy ; cas au niveau de la raquette cmp cx,195 ; si c'est pas en bas, on ne traite pas la collision avec la raquette jne suiteboucle cmp ax,bx ; a gauche de la raquette? ja fin ; oui => fin add ax,es:[si+8] cmp ax,bx ; a droite de la raquette? jb fin ; oui => fin ; ni a gauche, ni a droite, alors rebond mov es:[si+7],byte ptr 1 ; sauve vy=1 inc word ptr es:[si+10] ; on ajoute un point mov ah,02h ; on affiche les points xor bh,bh mov dx,0012h ; a la position ligne 0, colonne 12 int 10h mov ax,es:[si+10]; decompose les points push ax mov bx,10 ; sur 5 chiffres mov cx,5 decomp: xor dx,dx div bx push dx loop decomp mov cx,5 xor bl,bl affpt: pop ax add ax,30h mov ah,0Eh inc bl int 10h loop affpt pop cx and cx,3 ; on diminue la raquette que tout les 4 points jnz suiteboucle cmp word ptr es:[si+8],8 ; raquette plus petite que 8 jb suiteboucle ; oui, on continue sub word ptr es:[si+8],2 ; non, on la diminue suiteboucle: ; attend le retour vertical du rayon catodique mov dx,3dah pause: in al,dx test al,08h jz pause jmp boucleprincipale fin: jmp debut END START
6 janv. 2006 à 00:43
Vraiment merci!!
7 juil. 2005 à 14:41
8/10
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.