Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MICRO-ORGANISME CONTRE BARDACK :D


Information sur la source

Catégorie :divers Niveau : Initié Date de création : 27/04/2004 Vu : 3 209

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

ceci est l'etude (tres simpliste ) de la propagation de bactérie dans un milieu fermé

Projet ESI , Asm n°2

un chti clin d'oeuil a notre ami Bardack =D
 

Source

  • .model small
  • .stack 100h
  • .486
  • jumps
  • locals
  • extrn random : proc
  • extrn InitRnd : proc
  • ;==========================================
  • ; donne
  • ;==========================================
  • .data
  • asci db 47 ;va etre utilisé pour le compteur de mort ;)-->la faucheuse [init='0']
  • asci2 db 48 ;deuxieme chiffre du compteur
  • proximite DW 0 ;Nombre de Micro orga qui sont suceptibles d entourer un congenère
  • handle dw ? ;Handle utiliser pour la manipulation de fichier
  • cinq dw 5 ; |
  • deux dw 2 ; |-> variables utilisées pour les divisions
  • trente dw 30 ; |
  • posx dw ? ; Coordonnée en abscisse
  • posy dw ? ; Coordonnée en Ordonnée
  • superpose DW 0 ; Boolean , declarant si il y a supperposition ou non
  • efface dw 0 ;boolean reglant la couleur 1=colorie en noir :)
  • reproduction dw 0 ;boolean reglant le check reproduction
  • entoure dw ? ; Boolean , renvoir 0-> pas entouré , 1-> entouré
  • saverandom dw ? ;Sauvegarde du retours AX (random)
  • saveEnergie dw ? ;Sauvegarde des Energie , posx , posy
  • saveposx dw ? ;Sauvegarde de la coordonne en X
  • saveposy dw ? ;Sauvegarde de la coordonne en Y
  • cpt dw ? ; compteur
  • nb_morga dw 30 ;nombre de micro orga initials
  • nb_Morgarestant dw 30 ;id nb_Morga mais utiliser pour le test de superposition
  • nb_nouriture dw 576 ; nombre initial de nouriture
  • tab_orga dw (13000) dup (0) ;tab contenant les infos sur les morga initialisé a zero
  • lenght_tabOrga dw $-tab_orga ;Longueur du vecteur
  • tab_nouriture dw (120*40) dup (0) ; tableau contanant les coordonnées de nouritures initialisé a zero
  • lenght_tabNouriture dw $-tab_nouriture ;Longueur du vecteur
  • fichier db 'Organismes.txt',0 ; Nom du fichier qui va recevoir les info des Morga
  • ;*******Variables de TXT *********
  • enplus db " enfant ok$"
  • mort db " Morts :'($"
  • titre2 db 'Legende................',10,13
  • db 'Rouge = Micro-Organisme ...',10,13
  • db 'Vert = Nouriture .........',10,13,'$'
  • Intro db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ********** ************ ****** ****** ************',10,13
  • db ' *** *** **** ******* ******* ****',10,13
  • db ' *** *** **** *************** ****',10,13
  • db ' ********** ************ ***** ***** ************',10,13
  • db ' ********** ************ ***** ***** ************',10,13
  • db ' *** *** **** ***** ***** **** ',10,13
  • db ' *** *** **** ***** ***** **** ',10,13
  • db ' *** *** ************ ***** ***** ************',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' Auteur : Digital snake ',10,13
  • db ' ------ | ',10,13
  • db ' | Prof : PBT ',10,13
  • db ' | Version : 26/03/03 ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' -> Etude de la vie de MicroBacteries <- ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' [Pour quitter appuyer sur la touche Q] ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13,'$'
  • ;==========================================
  • ; code
  • ;==========================================
  • .code
  • main proc
  • mov ax,@data
  • mov ds,ax
  • ;================================ repete 1 foi =================================
  • call mode_graphique ;on appel le mode video 640*480 ;*
  • ;---------------------- ;*
  • mov dx,offset Intro ;Affiche l intro a l'ecran ;*
  • CALL ecrit ;*
  • CALL clavier ;attente d'une touche au clavier pour commancer ;*
  • ;---------------------- ;*
  • call mode_graphique ;on appel le mode video 640*480 ;*
  • call damier ;affichage de la zone de vie des Micro orga ;*
  • ;---------------------- ;*
  • mov posx,40 ;compteur du nombre de mort ;*
  • mov posy,27 ;*
  • CALL curseur ;*
  • CALL char ;*
  • call titrelegende ;======================================== ;*
  • ;---------------------- ; ==initialisation tableau micro orga == ;*
  • ;======================================== ;*
  • mov bx,0 ; donne le morga de départ bx=indice du tab_orga ;*
  • mov cx,nb_morga ;*
  • ;*
  • @@bouclecoordonneemorga: ;*
  • push cx ;*
  • call donnecoordonneeimorga ;*
  • add bx,2 ; passe au morga suivant ;*
  • pop cx ;*
  • loop @@bouclecoordonneemorga ;*
  • ;========================================= ;*
  • ;---------------------- ; == initialisation tableau micro orga == ;*
  • ;========================================= ;*
  • mov bx,0 ;indice de départ ;*
  • mov cx,nb_nouriture ;traitement des 150 premiers nouritures ;*
  • ;*
  • @@bouclecoordonneenouriture: ;*
  • push cx ;*
  • call donnecoordonneeinouriture ;*
  • add bx,2 ;on passe a la nouriture suivante ;*
  • pop cx ;*
  • loop @@bouclecoordonneenouriture ;*
  • ;----------------------
  • CALL test_si_entoure ;au cas ou initialement un Morga est entouré ;*
  • ;=============================================================================
  • call dessine_nouriture ;ecran de base , affiche les morga ;*
  • call dessine_morga ; et les nouritures ;*
  • ;************** ;*
  • ;====================== boucle de jeux =======================================
  • ;************** ;*
  • CALL InitRnd ;initialisation pour le random
  • @@debut: ;début de la boucle
  • mov efface,1 ;booleen 1-> on efface
  • call dessine_morga ;dessine carre noir
  • call test_correspondance ;test visant a voir si les coordonnées morga
  • ;sont les meme que celle de la nouriture
  • call test_reproduction ;on test si les Morga sont aptes a se reproduire
  • call mouvement ;détermine la nouvelle coordonnée des morga
  • CALL test_si_entoure ;test si un Morga est entourer par d autres Morga
  • call add_nouriture ;add de la nouriture et la desine (celle en plus)
  • mov efface,0 ;booleen 0->on efface pas
  • call dessine_morga ;dessine carre rouge
  • call fin_prog ;test si on a appuyer sur Q pour une pause clavier ,->go out
  • ;----------------------
  • mov ax,nb_morga ;test de sortie du programme (2000 -> on sortirais du vecteur !)
  • cmp ax,2000
  • jge fin
  • ;----------------------
  • JMP @@debut ;Boucle-->on recommance
  • ;=======================================================================
  • call clavier ;procédure de pause
  • jmp fin ;goto fin
  • main endp
  • ;==========================================
  • ;== Procedures ==
  • ;==========================================
  • test_superposition proc
  • ;on va parcourir le tableau des Micro orga en partant du premier et analyser de
  • ;cette facon les suivant et leur position
  • ;-> si il y a meme position on s'arrangera pour donner de nouvelle coordonnées
  • ;->!!! le BX DOIT etre positionner sur posx !!!
  • push cx
  • mov si,bx
  • mov si,2 ;si est l indice du Morga suivant celui k on analyse
  • cmp si,bx
  • JE @@finICI
  • mov cx,nb_Morgarestant
  • cmp cx,0
  • JE @@finICI
  • @@boucle:
  • cmp tab_orga[si],0
  • JNE @@vivant
  • ADD si,8
  • JMP @@boucle
  • @@vivant:
  • push bx
  • push si ;au depart les indices sont sur posx
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@suivant
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@suivant
  • mov superpose,1
  • @@suivant:
  • pop si
  • pop bx
  • ADD si,8
  • cmp si,bx
  • JE @@finICI
  • LOOP @@boucle
  • @@finICI: pop cx
  • RET
  • test_superposition endp
  • ;-----------------------------------------------------------------------
  • char proc ;Procédure qui fais un compte du nombre de morts
  • pusha
  • cmp asci,57 ;si on est au dessus de 9
  • JL @@premierchiffre ;->on continue car <9
  • mov asci,47 ;->remise a zero
  • CALL char2 ;->on passe au second chiffre
  • @@premierchiffre:
  • mov posx,40
  • mov posy,27
  • CALL curseur
  • mov ah,09h ; Affichage
  • INC asci
  • mov al,asci ; D'un char correspondant au code ascii
  • mov bh,0
  • mov bl,01000011b ; couleur
  • mov cx,1 ; Un seul caractère
  • int 10h
  • popa
  • ret
  • char endp
  • char2 proc
  • pusha
  • cmp asci2,57
  • JL @@premierchiffre
  • mov asci2,47
  • @@premierchiffre:
  • mov posx,39 ;compteur du nombre de mort
  • mov posy,27
  • CALL curseur
  • mov ah,09h ; Affichage
  • INC asci2
  • mov al,asci2 ; D'un char correspondant au code ascii
  • mov bh,0
  • mov bl,01000011b ; couleur
  • mov cx,1 ; Un seul caractère
  • int 10h
  • popa
  • ret
  • char2 endp
  • ;-----------------------------------------------------------------------
  • test_reproduction proc
  • pusha
  • mov bx,0 ;indice positionner sur l age
  • mov cx,1500
  • @@Boucle:
  • push bx
  • mov ax,tab_orga[bx] ; test si plus de 400 ans
  • cmp ax,400
  • JL @@suivant ;si non aller a suivant
  • ADD bx,6 ;test si Energie + de 400E
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • JL @@suivant ;si non passer a suivant
  • @@A_maturite:
  • @@Fils_1: sub dx,dx ;car on fais une div
  • div deux ;l'énergie du pere est diviser par 2
  • mov tab_orga[bx],ax ;==1er fils== prend la 1/2 de l energie
  • mov saveEnergie,ax ;sauvegarde du niveau d energie
  • SUB bx,6 ;indice remis sur age
  • mov tab_orga[bx],1 ;Age reinitialisé a 1
  • ADD bx,2 ;BX surr posx
  • mov ax,tab_orga[bx]
  • mov saveposx,ax ;sauvegarde de la derniere posx
  • ADD bx,2 ;BX sur posy
  • mov ax,tab_orga[bx]
  • mov saveposy,ax ;sauvegarde de la derniere posy
  • ADD bx,2 ;BX sur energie
  • @@TQ_trouvePasLibre:
  • mov ax,tab_orga[bx] ;bx sur energie
  • cmp ax,0
  • JLE @@libre
  • add bx,8
  • JMP @@TQ_trouvePasLibre
  • @@libre:
  • mov ax,saveEnergie
  • mov tab_orga[bx],ax ;Lenergie sera iddentike
  • sub bx,4 ;bx sur posx
  • push bx
  • @@Donne_coordonne_fils:
  • push 1
  • push 800
  • CALL random
  • cmp eax,96 ;=====1 er cas=======
  • jge @@suite1
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok1
  • mov tab_orga[bx],600 ;cas ou l'on depasse le tab en x -> passage autre bord
  • @@ok1:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de dépassement
  • jmp @@fincmp
  • @@suite1:
  • cmp eax,200 ;====2 eme cas======
  • jge @@suite2
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de depassement
  • jmp @@fincmp
  • @@suite2:
  • cmp eax,296 ;======3 eme cas=====
  • jge @@suite3
  • mov ax,saveposx
  • mov tab_orga[bx],ax
  • add tab_orga[bx],5 ;incremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,600 ; cas du depassement
  • jle @@ok2
  • mov tab_orga[bx],0
  • @@ok2:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0 ;cas du depassement
  • jge @@fincmp
  • mov tab_orga[bx],400
  • jmp @@fincmp
  • @@suite3:
  • cmp eax,400 ;=====4 eme cas=====
  • jge @@suite4
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • add tab_orga[bx],5 ;incremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,600 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite4:
  • cmp eax,496 ;========5eme cas=======
  • jge @@suite5
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,600
  • jle @@ok3
  • mov tab_orga[bx],0
  • @@ok3:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite5:
  • cmp eax,600 ;=====6eme cas===========
  • jge @@suite6
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posy
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite6: ;=======7eme cas===========
  • cmp eax,696
  • jge @@suite7
  • ADD bx,2 ;indice sur posx
  • mov ax,saveposx
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok4
  • mov tab_orga[bx],600
  • @@ok4:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite7:
  • cmp eax,800 ;===8eme cas================
  • jg @@probleme
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],600
  • jmp @@fincmp
  • @@probleme:
  • JMP @@Donne_coordonne_fils
  • @@fincmp: pop bx
  • mov ax,saveposx
  • mov posx,ax
  • mov ax,saveposy
  • mov posy,ax
  • mov al,12h
  • CALL carre
  • sub bx,2 ;bx sur age
  • mov tab_orga[bx],1
  • INC nb_Morga
  • @@suivant:
  • pop bx
  • ADD bx,8 ; Morga suivant (age)
  • Loop @@boucle
  • popa
  • RET
  • test_reproduction endp
  • ;-----------------------------------------------------------------------
  • test_correspondance proc
  • mov bx,6 ;position indice sur morga 1 , energie
  • mov si,0 ;position indice tab_orga posx initial
  • mov cx,nb_nouriture
  • @@boucle2:
  • push cx
  • mov cx,nb_Morga
  • @@boucle1: ;== Parcours Tab_orga et compare chaque Morga
  • push bx
  • push si
  • ; == Pour chaque nouriture
  • mov ax,tab_orga[bx] ;== TEst vivant ou non ? ==
  • cmp ax,0 ;========Morga=============
  • Jne @@vivant
  • INC cx
  • JMP @@endMorga ;on va a la fin de la premiere boucle
  • @@vivant:
  • sub bx,4 ;indice sur posx Morga
  • mov ax,tab_orga[bx]
  • cmp ax,tab_nouriture[si] ;si=posx Nouriture
  • JNE @@endMorga ;=goto fin si posxM != posxN
  • add bx,2 ;indice sur posy Morga
  • add si,2 ;indice sur posy Nouriture
  • mov ax,tab_orga[bx]
  • cmp ax,tab_nouriture[si]
  • JNE @@endMorga
  • @@Correspondance:
  • add bx,2
  • ADD tab_orga[bx],30
  • SUB si,2
  • MOV tab_nouriture[si],0
  • @@endMorga:
  • pop si
  • pop bx
  • ADD bx,8 ; indice placer sur Energie Morga suivant
  • Loop @@boucle1
  • ADD si,4
  • Mov bx,6
  • pop cx
  • Loop @@boucle2
  • ret
  • test_correspondance endp
  • ;-----------------------------------------------------------------------
  • mouvement proc
  • mov cx,nb_morga
  • mov bx,6
  • @@boucle_mouvement:
  • mov ax,tab_orga[bx] ;on va tester si on a afaire a un morga vivant
  • cmp ax,0 ;energie plus de zero
  • jg @@debutdeplacement ;=vivant on commence les coordonnées nouvelles
  • add bx,8 ; indice sur morga suivant (energie)
  • jmp @@boucle_mouvement ;= mort , on passe au morga suivant
  • mov nb_Morgarestant,1 ;utiliser pour le test de correspondance
  • @@debutdeplacement:
  • push 0 ;donne une des 8 cases aux alentours
  • push 800
  • call random
  • push bx ;sauvegarde de l'indice morga (energie)
  • cmp eax,96 ;=====1 er cas=======
  • jge @@suite1
  • sub bx,4 ;indice sur posx
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok1
  • mov tab_orga[bx],600 ;cas ou l'on depasse le tab en x -> passage autre bord
  • @@ok1:
  • add bx,2 ;indice sur posy
  • sub tab_orga[bx],5 ;decremente d'une case
  • @@oksuperpo1: mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de dépassement
  • jmp @@fincmp
  • @@suite1:
  • cmp eax,200 ;====2 eme cas======
  • jge @@suite2
  • sub bx,2 ;indice sur posy
  • sub tab_orga[bx],5 ;decremente d'une case
  • @@oksuperpo2: mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de depassement
  • jmp @@fincmp
  • @@suite2:
  • cmp eax,296 ;======3 eme cas=====
  • jge @@suite3
  • sub bx,4 ;indice sur posx
  • add tab_orga[bx],5 ;incremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,600 ; cas du depassement
  • jle @@ok2
  • mov tab_orga[bx],0
  • @@ok2:
  • add bx,2 ;indice sur posy
  • sub tab_orga[bx],5 ;decremente d'une case
  • @@oksuperpo3: mov ax,tab_orga[bx]
  • cmp ax,0 ;cas du depassement
  • jge @@fincmp
  • mov tab_orga[bx],400
  • jmp @@fincmp
  • @@suite3:
  • cmp eax,400 ;=====4 eme cas=====
  • jge @@suite4
  • sub bx,4 ;indice sur posx
  • add tab_orga[bx],5 ;incremente d'une case
  • @@oksuperpo4:mov ax,tab_orga[bx]
  • cmp ax,600 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite4:
  • cmp eax,496 ;========5eme cas=======
  • jge @@suite5
  • sub bx,4 ;indice sur posx
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,600
  • jle @@ok3
  • mov tab_orga[bx],0
  • @@ok3:
  • add bx,2 ;indice sur posy
  • add tab_orga[bx],5
  • @@oksuperpo5: mov ax,tab_orga[bx]
  • cmp ax,400 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite5:
  • cmp eax,600 ;=====6eme cas===========
  • jge @@suite6
  • sub bx,2 ;indice sur posy
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite6: ;=======7eme cas===========
  • cmp eax,696
  • jge @@suite7
  • sub bx,4 ;indice sur posx
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok4
  • mov tab_orga[bx],600
  • @@ok4:
  • add bx,2 ;indice sur posy
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite7:
  • cmp eax,800 ;===8eme cas================
  • jg @@probleme
  • sub bx,4 ;indice sur posx
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],600
  • jmp @@fincmp
  • @@probleme: pop bx
  • jmp @@boucle_mouvement
  • @@fincmp:
  • pop bx ;indice replacé sur energie de morga traité
  • dec tab_orga[bx] ;decremente energie
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • JG @@incage
  • sub bx,6
  • mov tab_orga[bx],0 ;*
  • CALL char
  • JMP @@endnow
  • @@incage: sub bx,6 ;indice sur l'age
  • inc tab_orga[bx] ;incremente son age
  • @@endnow: add bx,14 ;indice sur energie du morga suivant
  • mov superpose,0
  • INC nb_Morgarestant
  • loop @@boucle_mouvement
  • ret
  • mouvement endp
  • ;-----------------------------------------------------------------------
  • test_si_entoure proc
  • mov bx,6
  • ;lorsque l on rentre dans cette procedure l'indice BX est positionnée sur l Energie du Tab_orga
  • ;in va faloir tester di autour de la case du Morga , il y en a d'autres si il ne sais plus bouger ->il meut
  • Mov cx,nb_Morga
  • @@Boucle_traite_TT_orga:
  • mov ax,tab_orga[bx] ;on va tester si on a afaire a un morga vivant
  • cmp ax,0 ;energie plus de zero
  • JNE @@ok
  • ADD bx,8
  • JMP @@Boucle_traite_TT_orga
  • @@ok:
  • mov proximite,0 ;init de la proximite pour chaque Morga
  • push bx
  • push cx
  • mov cx,nb_Morga
  • mov si,6 ;indice sur' Energie 1 ER Morga [ici utilisé est SI]
  • @@Test_tt_les_autres:
  • mov ax,tab_orga[si] ;on va tester si on a afaire a un morga vivant
  • cmp ax,0 ;energie plus de zero
  • JNE @@ok2
  • ADD si,8
  • @@ok2:
  • @@CAS_1: ;test si Morga au Nord a gauche
  • push bx ;Sauvegarde des Indices ->sur Energie
  • push si
  • sub bx,4 ;bx sur posx
  • mov ax,tab_orga[bx] ;
  • sub si,4 ;si sur posx
  • dec ax ;test sur X-1
  • cmp ax,tab_orga[si]
  • JNE @@CAS_2
  • ADD bx,2 ;bx sur posy
  • ADD si,2 ;si sur posy
  • mov ax,tab_orga[bx]
  • dec ax ;test sur Y-1
  • cmp ax,tab_orga[si]
  • JNE @@CAS_2
  • INC proximite
  • @@CAS_2: ;test si Morga au nord centre
  • pop si
  • pop bx ;-->on revient au indice sur Energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;bx,si sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@CAS_3
  • ADD bx,2 ;bx,si sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • dec ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_3
  • INC proximite
  • @@CAS_3: ;test avec la case nord DRoite
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp tab_orga[si],ax
  • JNE @@CAS_4
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • DEC ax
  • cmp tab_orga[si],ax
  • JNE @@CAS_4
  • INC proximite
  • @@CAS_4: ;test sur la case centre droite
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_5
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@CAS_5
  • INC proximite
  • @@CAS_5: ;test sur case SUD droite
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_6
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_6
  • INC proximite
  • @@CAS_6: ;Test sur case sud centre
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • SUB bx,4 ;indice sur posx
  • SUB si,4
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@CAS_7
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,Tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_7
  • INC proximite
  • @@CAS_7: ;Test sur case Sud gauche
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • DEC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_8
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_8
  • INC proximite
  • @@CAS_8: ;Test sur case gauche
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si
  • sub bx,4
  • sub si,4
  • mov ax,tab_orga[bx]
  • dec ax
  • cmp ax,tab_orga[si]
  • JNE @@fin_cas
  • add bx,2
  • add si,2
  • mov ax,tab_orga[bx]
  • inc ax
  • JNE @@fin_cas
  • INC proximite
  • @@fin_cas:
  • pop si
  • pop bx
  • ADD si,8
  • LOOP @@Test_tt_les_autres
  • pop cx
  • pop bx
  • @@Test_si_proximite_egal_8:
  • cmp proximite,8
  • JNE @@pas_egal
  • mov tab_orga[bx],0 ;=>si l orga a une proximite de 8
  • ; il dois mourir =>car plus de place pour vivre
  • @@pas_egal:
  • ADD bx,8 ;passage au Morga suivant
  • LOOP @@Boucle_traite_TT_orga
  • RET
  • test_si_entoure endp
  • ;-----------------------------------------------------------------------
  • donnecoordonneeimorga proc ;procedure d'initialisation du tab des morga
  • mov tab_orga[bx],1 ;age=1 il est donc vivant
  • push 0
  • push 119
  • call random
  • mul cinq ; appel random ds ax
  • add bx,2 ;indice en posx
  • mov tab_orga[bx],ax ;donne nbre aleatoire
  • push 0
  • push 79
  • call random
  • mul cinq ; appel random ds ax
  • add bx,2 ;indice en posy
  • mov tab_orga[bx],ax ;nbre aleatoire ds posy
  • add bx,2 ;indice en energie
  • push 150
  • push 250
  • CALL random
  • mov tab_orga[bx],ax ;energie=[150-250] initialisation
  • ret
  • donnecoordonneeimorga endp
  • ;-----------------------------------------------------------------------
  • donnecoordonneeinouriture proc
  • push 0
  • push 119
  • call random
  • mul cinq
  • mov tab_nouriture[bx],ax ;indice sur posx ,donne nbre aleatoire
  • push 0
  • push 79
  • call random
  • mul cinq
  • add bx,2 ;indice sur posy
  • mov tab_nouriture[bx],ax ;donne nbre aleatoire
  • ret
  • donnecoordonneeinouriture endp
  • ;-----------------------------------------------------------------------
  • add_nouriture proc ;nb_nouriture+=(nb_nouriture/nb_orga)
  • pusha
  • MOV si,0 ;indice sur posx de nouriture
  • mov ax,nb_Morga
  • sub dx,dx
  • DIV trente
  • MOV cx,ax ;nbre d de nouriture rajoutée
  • ;on va remplir le tableau de nouriture
  • @@Boucle:
  • ;== seul les cases posx=0 seront comblée ==;
  • mov ax,tab_nouriture[si]
  • cmp ax,0
  • JNE @@okp
  • push 0
  • push 120
  • CALL random
  • mul cinq
  • mov tab_nouriture[si],ax ;posx de tab_nouriture
  • mov posx,ax
  • push 0
  • push 80
  • CALL random
  • mul cinq
  • ADD si,2 ;posy de tab_nouriture
  • mov tab_nouriture[si],ax
  • mov posy,ax
  • mov al,02h
  • CALL carre
  • ADD si,2 ;posx suivant
  • JMP @@suivant
  • @@okp:
  • INC cx
  • ADD si,4
  • @@suivant:
  • Loop @@Boucle
  • popa
  • ret
  • add_nouriture endp
  • ;------------------------------------------------------------------------
  • dessine_nouriture proc ;procedure qui va parcourire le vecteur et dessiner
  • ;les cases avec nouritures
  • mov cx,nb_nouriture
  • mov si,0
  • @@boucle1:
  • mov ax,tab_nouriture[si] ;test pour voir si il y a de la nouriture
  • cmp ax,1 ;car impossible k il y en ai en posx=0
  • jge @@ok
  • add si,4
  • jmp @@boucle1
  • @@ok:
  • mov ax,tab_nouriture[si]
  • mov posx,ax
  • add si,2
  • mov ax,tab_nouriture[si]
  • mov posy,ax
  • mov al,02h
  • call carre
  • add si,2
  • loop @@boucle1
  • ret
  • dessine_nouriture endp
  • ;-----------------------------------------------------------------------
  • dessine_morga proc
  • ;== parcours du vecteur tab_orga ==
  • mov bx,6 ;indice sur energie Morga n°1
  • mov cx,nb_morga
  • @@bouclem:
  • push bx
  • mov ax,tab_orga[bx] ;== 1/ test si vivant ==
  • cmp ax,0
  • jg @@vivant
  • INC cx
  • jmp @@finboucle
  • @@vivant:
  • sub bx,4 ;indice sur posx
  • mov ax,tab_orga[bx]
  • mov posx,ax ;donne la coordonnée
  • add bx,2 ;indice sur posy
  • mov ax,tab_orga[bx]
  • mov posy,ax ;donne la coordonnée
  • pusha
  • mov ax,efface ;on va tester si il sagit de colorier
  • cmp ax,0 ;la case ou se trouve le morga ou de l'effacer
  • jne @@couleur_noir
  • @@couleur_rouge:
  • mov al,04h
  • jmp @@couleurok
  • @@couleur_noir:
  • mov al,00h
  • @@couleurok:
  • call carre ;appel procedure pour dessiner le carre
  • popa
  • @@finboucle:
  • pop bx
  • add bx,8 ;indice sur energie suivant
  • loop @@bouclem
  • ret
  • dessine_morga endp
  • ;--------------------------------------------------------
  • carre proc
  • push cx
  • mov cx,4
  • inc posy
  • inc posx
  • @@bouclecaseok: ;l'utilisation est tres simple,donner les coordonnées
  • call colorie_caseok2 ;du pixel en haut a gauche(max sup gauche)
  • inc posy ;avec posx & posy
  • loop @@bouclecaseok
  • sub posy,4
  • pop cx
  • ret
  • carre endp
  • ;--************phase_suiv*******************--
  • colorie_caseok2 proc ;comme on a afaire a une boucle impriqué
  • push cx ;le chois de ssroutine est plus judicieux
  • mov cx,4 ;colorie_caseok2 est donc relié a colorie_caseok
  • @@bouclecase2ok:
  • call pixel
  • inc posx
  • loop @@bouclecase2ok
  • sub posx,4
  • pop cx
  • ret
  • colorie_caseok2 endp
  • ;-----------------------------------------------------------
  • damier proc
  • mov al,07h
  • mov posx,0
  • mov posy,0
  • lignes_horizontales:
  • mov cx,82
  • @@boucle2h:
  • push cx
  • mov cx,605
  • @@boucle1h:
  • call pixel
  • inc posx
  • loop @@boucle1h
  • add posy,5
  • mov posx,0
  • pop cx
  • loop @@boucle2h
  • mov posx,0
  • mov posy,0
  • lignes_vertivales:
  • mov cx,122
  • @@boucle2v:
  • push cx
  • mov cx,405
  • @@boucle1v:
  • call pixel
  • inc posy
  • loop @@boucle1v
  • add posx,5
  • mov posy,0
  • pop cx
  • loop @@boucle2v
  • ret
  • damier endp
  • ;-----------------------------------------------------
  • titrelegende proc
  • mov posx,5
  • mov posy,26
  • call curseur
  • mov dx,offset titre2
  • call ecrit
  • mov posx,41
  • mov posy,27
  • call curseur
  • mov dx,offset mort
  • call ecrit
  • ret
  • titrelegende endp
  • ;-----------------------------------------------------
  • mode_graphique proc
  • mov al,12h ; mode graphique 12h->640*480
  • mov ah,00h
  • int 10h
  • ret
  • mode_graphique endp
  • ;------------------------------------------------------
  • pixel proc ;procédure permettant l'affichage
  • pushad ;d'un pixel,selon les coordonnées
  • mov ah,0ch ;ici posx et posy
  • ; mov al,01h ;01-->bleu
  • mov bx,0000h
  • mov cx,posx
  • mov dx,posy
  • int 10h
  • popad
  • ret
  • pixel endp
  • ;------------------------------------------------
  • ;***************************************
  • ;*Test si appui sur Q pour quitter *
  • ;***************************************
  • fin_prog proc
  • pusha
  • mov ah,0bh
  • int 21h
  • cmp al,0ffh
  • jne fin_test_q
  • mov ah,01
  • int 21h
  • cmp al,113 ;113 = valeur ascii de la lettre Q
  • jne fin_test_q
  • CALL clavier
  • JMP fin
  • fin_test_q:
  • popa
  • ret
  • fin_prog endp
  • ;---------------------------------------------------
  • clavier proc
  • pusha
  • mov ah,07h ; attente d'une touche
  • int 21h
  • popa
  • ret
  • clavier endp
  • ;-------------------------------------------------
  • curseur proc near ;ssroutine de positionnement du curseur
  • push ax ;utilisé pour l'affichage
  • mov dl,byte ptr posx
  • mov dh,byte ptr posy
  • mov ax,0200h
  • int 10h
  • pop ax
  • ret
  • curseur endp
  • ;-------------------------------------------------
  • ecrit proc ;écriture, va etre utilisé avec un mov dx,offset .nom.
  • pusha
  • mov ax,0900h
  • int 21h
  • popa
  • ret
  • ecrit endp
  • ;--------------------------------------------------
  • ; fin du programme**************************
  • fin:
  • ; création d'un fichier et ouverture
  • MOV AH,3CH
  • MOV CX,0000000b ; attibuts standards
  • MOV DX,offset fichier
  • int 21h
  • MOV handle,AX
  • ; écriture d'un buffer
  • MOV AH,40h
  • MOV BX,handle
  • MOV CX,lenght_tabOrga
  • mov dx,'0'
  • ADD tab_orga,dx
  • MOV DX,offset tab_orga
  • int 21h
  • ; femeture du fichier
  • MOV AH,3Eh
  • MOV BX,handle
  • int 21h
  • mov al,03h ;modevideo 03h (texte)
  • mov ah,00h
  • int 10h
  • mov ax,04c00h
  • int 21h
  • end main
  • ;-------------------------------------------------------------
.model small
.stack 100h
.486
jumps
locals
extrn random : proc
extrn InitRnd : proc

;==========================================
; donne
;==========================================
.data
asci             db 47 ;va etre utilisé pour le compteur de mort ;)-->la faucheuse [init='0']
asci2            db 48 ;deuxieme chiffre du compteur
proximite        DW 0  ;Nombre de Micro orga qui sont suceptibles d entourer un congenère
handle           dw ?  ;Handle utiliser pour la manipulation de fichier

cinq		 dw 5   ; |
deux		 dw 2   ; |-> variables utilisées pour les divisions
trente           dw 30  ; |

posx		 dw ?   ; Coordonnée en abscisse
posy		 dw ?   ; Coordonnée en Ordonnée

superpose       DW 0  ; Boolean , declarant si il y a supperposition ou non
efface		 dw 0 ;boolean reglant la couleur 1=colorie en noir :)
reproduction	 dw 0 ;boolean reglant le check reproduction
entoure          dw ? ; Boolean , renvoir 0-> pas entouré , 1-> entouré

saverandom	 dw ? ;Sauvegarde du retours AX (random)
saveEnergie	 dw ? ;Sauvegarde des Energie , posx , posy
saveposx	 dw ? ;Sauvegarde de la coordonne en X
saveposy	 dw ? ;Sauvegarde de la coordonne en Y

cpt		 dw ? ; compteur
nb_morga	 dw 30   ;nombre de micro orga initials
nb_Morgarestant  dw 30   ;id nb_Morga mais utiliser pour le test de superposition
nb_nouriture	 dw 576 ; nombre initial de nouriture

tab_orga	 dw	(13000)   dup (0)   ;tab contenant les infos sur les morga initialisé a zero
lenght_tabOrga   dw  $-tab_orga             ;Longueur du vecteur
tab_nouriture	 dw	(120*40)   dup (0)  ; tableau contanant les coordonnées de nouritures initialisé a zero
lenght_tabNouriture dw  $-tab_nouriture     ;Longueur du vecteur

fichier          db       'Organismes.txt',0  ; Nom du fichier qui va recevoir les info des Morga

;*******Variables de TXT *********
enplus		       db " enfant ok$"
mort                   db " Morts :'($"
titre2		       db 'Legende................',10,13
                       db 'Rouge = Micro-Organisme ...',10,13
                       db 'Vert  = Nouriture .........',10,13,'$'


Intro	     db    ' ',10,13
             db    ' ',10,13
             db    ' ',10,13
             db    '	 **********	  ************	   ******   ******     ************',10,13
	     db    '	 ***    ***	  ****		   ******* *******	       ****',10,13
	     db    '	 ***    ***	  ****		   ***************	       ****',10,13
	     db    '	 **********	  ************	   *****     *****     ************',10,13
	     db    '	 **********	  ************	   *****     *****     ************',10,13
	     db    '	 ***    ***		  ****	   *****     *****     ****	   ',10,13
	     db    '	 ***    ***		  ****	   *****     *****     ****	   ',10,13
	     db    '	 ***    ***	  ************	   *****     *****     ************',10,13
	     db    ' ',10,13
             db    ' ',10,13
             db    ' ',10,13
             db    ' Auteur : Digital snake 		  ',10,13
	     db    ' ------ |  		  ',10,13
	     db    '        |  Prof : PBT	 	  ',10,13
	     db    '        |  Version : 26/03/03   ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    '                     ->  Etude de la vie de MicroBacteries  <-   ',10,13
	     db    '				                ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    '	[Pour quitter appuyer sur la touche Q]    ',10,13
	     db    '				   ',10,13
	     db    '				   ',10,13
	     db    '				   ',10,13,'$'

;==========================================
; code
;==========================================
.code
main proc
  mov ax,@data
  mov ds,ax
;================================ repete 1 foi =================================
  call mode_graphique	  ;on appel le mode video 640*480	              ;*
;----------------------                                                       ;*
  mov dx,offset Intro     ;Affiche l intro a l'ecran                          ;*
  CALL ecrit                                                                  ;*
  CALL clavier            ;attente d'une touche au clavier pour commancer     ;*
;----------------------                                                       ;*
  call mode_graphique	  ;on appel le mode video 640*480	              ;*
  call damier		  ;affichage de la zone de vie des Micro orga	      ;*
;----------------------                                                       ;*
    mov posx,40         ;compteur du nombre de mort                           ;*
    mov posy,27                                                               ;*
    CALL curseur                                                              ;*
    CALL char						                      ;*
  call titrelegende	 ;========================================	      ;*
;----------------------  ; ==initialisation tableau micro orga ==	      ;*
			 ;========================================	      ;*
  mov bx,0		 ; donne le morga de départ bx=indice du tab_orga     ;*
  mov cx,nb_morga							      ;*
									      ;*
  @@bouclecoordonneemorga:						      ;*
  push cx								      ;*
		       call donnecoordonneeimorga			      ;*
		       add bx,2  ; passe au morga suivant		      ;*
  pop cx								      ;*
  loop @@bouclecoordonneemorga						      ;*
			 ;=========================================	      ;*
;----------------------  ; == initialisation tableau micro orga ==	      ;*
			 ;=========================================	      ;*
mov bx,0		 ;indice de départ				      ;*
mov cx,nb_nouriture	 ;traitement des 150 premiers nouritures	      ;*
									      ;*
@@bouclecoordonneenouriture:						      ;*
push cx 							              ;*
		       call donnecoordonneeinouriture			      ;*
		       add bx,2 ;on passe a la nouriture suivante	      ;*
pop cx								              ;*
loop @@bouclecoordonneenouriture					      ;*
;----------------------
CALL test_si_entoure   ;au cas ou initialement un Morga est entouré           ;*
;=============================================================================
  call dessine_nouriture     ;ecran de base , affiche les morga 	      ;*
  call dessine_morga	     ; et les nouritures			      ;*
		       ;**************                                        ;*
;====================== boucle de jeux =======================================
		       ;**************                                        ;*
CALL InitRnd               ;initialisation pour le random
@@debut:		   ;début de la boucle

    mov efface,1		       ;booleen 1-> on efface
  call dessine_morga	       ;dessine carre noir
  call test_correspondance     ;test visant a voir si les coordonnées morga
			       ;sont les meme que celle de la nouriture
  call test_reproduction       ;on test si les Morga sont aptes a se reproduire

  call mouvement	       ;détermine la nouvelle coordonnée des morga

  CALL test_si_entoure         ;test si un Morga est entourer par d autres Morga
  call add_nouriture	       ;add de la nouriture et la desine (celle en plus)

    mov efface,0		       ;booleen 0->on efface pas
  call dessine_morga	       ;dessine carre rouge
  call fin_prog                ;test si on a appuyer sur Q pour une pause clavier ,->go out

;----------------------

  mov ax,nb_morga              ;test de sortie du programme (2000 -> on sortirais du vecteur !)
  cmp ax,2000
  jge fin
;----------------------
JMP @@debut                    ;Boucle-->on recommance

;=======================================================================
  call clavier	   ;procédure de pause
  jmp fin	   ;goto fin
main endp
;==========================================
;== Procedures				 ==
;==========================================
test_superposition proc
;on va parcourir le tableau des Micro orga en partant du premier et analyser de
;cette facon les suivant et leur position
;-> si il y a meme position on s'arrangera pour donner de nouvelle coordonnées
;->!!! le BX DOIT etre positionner sur posx !!!

           push cx
           mov si,bx
           mov si,2         ;si est l indice du Morga suivant celui k on analyse
           cmp si,bx
                  JE @@finICI
           mov cx,nb_Morgarestant
           cmp cx,0
           JE @@finICI
           @@boucle:
                         cmp tab_orga[si],0
                         JNE @@vivant
                         ADD si,8
                         JMP @@boucle
              @@vivant:
                 push bx
                 push si                    ;au depart les indices sont sur posx
                      mov ax,tab_orga[bx]
                      cmp ax,tab_orga[si]
                      JNE @@suivant
                            ADD bx,2                      ;indice sur posy
                            ADD si,2
                        mov ax,tab_orga[bx]
                        cmp ax,tab_orga[si]
                        JNE @@suivant
                            mov superpose,1

               @@suivant:
                  pop si
                  pop bx
                  ADD si,8
                  cmp si,bx
                  JE @@finICI
           LOOP @@boucle

    @@finICI: pop cx
RET
test_superposition endp
;-----------------------------------------------------------------------
char proc                          ;Procédure qui fais un compte du nombre de morts
	pusha
	cmp asci,57                ;si on est au dessus de 9
	JL @@premierchiffre        ;->on continue car <9
        mov asci,47                ;->remise a zero
        CALL char2                 ;->on passe au second chiffre

@@premierchiffre:
                mov posx,40
                mov posy,27
                CALL curseur
	mov	ah,09h		; Affichage
	INC     asci
        mov	al,asci 	; D'un char correspondant au code ascii
	mov	bh,0
	mov	bl,01000011b	; couleur
	mov	cx,1		; Un seul caractère
	int	10h
	popa
	ret
char endp
char2 proc
	pusha
	cmp asci2,57
	JL @@premierchiffre
        mov asci2,47


@@premierchiffre:
                mov posx,39         ;compteur du nombre de mort
                mov posy,27
                CALL curseur
	mov	ah,09h		; Affichage
	INC     asci2
        mov	al,asci2 	; D'un char correspondant au code ascii
	mov	bh,0
	mov	bl,01000011b	; couleur
	mov	cx,1		; Un seul caractère
	int	10h
	popa
	ret
char2 endp
;-----------------------------------------------------------------------
test_reproduction proc
pusha
			 mov bx,0 ;indice positionner sur l age
			 mov cx,1500

			 @@Boucle:
			     push bx

				   mov ax,tab_orga[bx]	 ; test si plus de 400 ans
				   cmp ax,400
				   JL @@suivant 	 ;si non aller a suivant

				   ADD bx,6		 ;test si Energie + de 400E
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   JL @@suivant 	 ;si non passer a suivant

                 @@A_maturite:
                 @@Fils_1:         sub dx,dx		 ;car on fais une div
				   div deux		;l'énergie du pere est diviser par 2
				   mov tab_orga[bx],ax	;==1er fils== prend la 1/2 de l energie
				   mov saveEnergie,ax	;sauvegarde du niveau d energie
				   SUB bx,6		;indice remis sur age
				   mov tab_orga[bx],1	;Age reinitialisé a 1
				   ADD bx,2		;BX surr posx

                                   mov ax,tab_orga[bx]
				   mov saveposx,ax	;sauvegarde de la derniere posx
				   ADD bx,2		;BX sur posy
				   mov ax,tab_orga[bx]
				   mov saveposy,ax	;sauvegarde de la derniere posy
				   ADD bx,2		;BX sur energie

				     @@TQ_trouvePasLibre:

							   mov ax,tab_orga[bx]	;bx sur energie
							   cmp ax,0
							   JLE @@libre
							   add bx,8
							   JMP @@TQ_trouvePasLibre

						      @@libre:

							    mov ax,saveEnergie
							    mov tab_orga[bx],ax ;Lenergie sera iddentike
							    sub bx,4		;bx sur posx

							    push bx
                @@Donne_coordonne_fils:
                                                            push 1
							    push 800
							    CALL random

				  cmp eax,96		;=====1 er cas=======
		      jge @@suite1
		                  mov ax,saveposx
				  mov tab_orga[bx],ax	;indice sur posx
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@ok1
				  mov tab_orga[bx],600	;cas ou l'on depasse le tab en x -> passage autre bord
			    @@ok1:
				  add bx,2		;indice sur posy
				  mov ax,saveposy
				  mov tab_orga[bx],ax
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	;cas de dépassement
				  jmp @@fincmp

		   @@suite1:
				  cmp eax,200		;====2 eme cas======
		      jge @@suite2
				  add bx,2		;indice sur posy
				  mov ax,saveposy
				  mov tab_orga[bx],ax
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	 ;cas de depassement
				  jmp @@fincmp


		   @@suite2:
				  cmp eax,296	       ;======3 eme cas=====
		      jge @@suite3
				  mov ax,saveposx
				  mov tab_orga[bx],ax
				  add tab_orga[bx],5   ;incremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,600	       ; cas du depassement
				  jle @@ok2
				  mov tab_orga[bx],0
			    @@ok2:
				  add bx,2	       ;indice sur posy
				  mov ax,saveposy
				  mov tab_orga[bx],ax
				  sub tab_orga[bx],5   ;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0	       ;cas du depassement
				  jge @@fincmp
				  mov tab_orga[bx],400
				  jmp @@fincmp


		   @@suite3:
				   cmp eax,400		 ;=====4 eme cas=====
		      jge @@suite4
				   mov ax,saveposx
				   mov tab_orga[bx],ax		 ;indice sur posx
				   add tab_orga[bx],5	 ;incremente d'une case
				   mov ax,tab_orga[bx]
				   cmp ax,600		  ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite4:
				   cmp eax,496		 ;========5eme cas=======
		      jge @@suite5
				   mov ax,saveposx
				   mov tab_orga[bx],ax		  ;indice sur posx
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,600
				   jle @@ok3
				   mov tab_orga[bx],0
			     @@ok3:
				   add bx,2		 ;indice sur posy
				   mov ax,saveposy
				   mov tab_orga[bx],ax
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400		 ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite5:
				   cmp eax,600		;=====6eme cas===========
		      jge @@suite6
				   mov ax,saveposx
				   mov tab_orga[bx],ax		;indice sur posy
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite6:			       ;=======7eme cas===========
				   cmp eax,696
		      jge @@suite7
				   ADD bx,2	      ;indice sur posx
				   mov ax,saveposx
				   mov tab_orga[bx],ax
                                   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@ok4
				   mov tab_orga[bx],600
			      @@ok4:
				   add bx,2	      ;indice sur posy
				   mov ax,saveposy
				   mov tab_orga[bx],ax
                                   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite7:
				   cmp eax,800	      ;===8eme cas================
		   jg @@probleme
				   mov ax,saveposx
				   mov tab_orga[bx],ax	      ;indice sur posx
				   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@fincmp
				   mov tab_orga[bx],600
				   jmp @@fincmp
                  @@probleme:
                  JMP @@Donne_coordonne_fils

                                               @@fincmp:    pop bx

                                                            mov ax,saveposx
                                                            mov posx,ax
                                                            mov ax,saveposy
                                                            mov posy,ax
							    mov al,12h
							    CALL carre

							    sub bx,2	      ;bx sur age

							     mov tab_orga[bx],1

							     INC nb_Morga

			      @@suivant:
			     pop bx
				       ADD bx,8 ; Morga suivant (age)

			 Loop @@boucle
popa
RET
test_reproduction endp
;-----------------------------------------------------------------------
test_correspondance proc
			mov bx,6	  ;position indice sur morga 1 , energie
			mov si,0	  ;position indice tab_orga posx initial
mov cx,nb_nouriture
@@boucle2:
	push cx
	    mov cx,nb_Morga
	    @@boucle1:	      ;== Parcours Tab_orga et compare chaque Morga
		    push bx
		    push si
					    ; == Pour chaque nouriture
		       mov ax,tab_orga[bx]  ;== TEst vivant ou non ? ==
		       cmp ax,0 	    ;========Morga=============
		       Jne @@vivant
		       INC cx
		       JMP @@endMorga	    ;on va a la fin de la premiere boucle
		 @@vivant:
		       sub bx,4    ;indice sur posx Morga
		       mov ax,tab_orga[bx]
		       cmp ax,tab_nouriture[si] ;si=posx Nouriture
		       JNE @@endMorga	;=goto fin si posxM != posxN

		       add bx,2    ;indice sur posy Morga
		       add si,2    ;indice sur posy Nouriture
		       mov ax,tab_orga[bx]
		       cmp ax,tab_nouriture[si]
		       JNE @@endMorga
		    @@Correspondance:
				     add bx,2
				     ADD tab_orga[bx],30
				     SUB si,2
				     MOV tab_nouriture[si],0


		 @@endMorga:

		    pop si
		    pop bx

		    ADD bx,8   ; indice placer sur Energie Morga suivant
	     Loop @@boucle1
	 ADD si,4
	 Mov bx,6
     pop cx
  Loop @@boucle2
ret
test_correspondance endp
;-----------------------------------------------------------------------
mouvement proc
	      mov cx,nb_morga
	      mov bx,6
	      @@boucle_mouvement:

		    mov ax,tab_orga[bx]    ;on va tester si on a afaire a un morga vivant
		    cmp ax,0		   ;energie plus de zero
		    jg @@debutdeplacement  ;=vivant on commence les coordonnées nouvelles
		    add bx,8		   ; indice sur morga suivant (energie)
		    jmp @@boucle_mouvement ;= mort , on passe au morga suivant

                 mov nb_Morgarestant,1  ;utiliser pour le test de correspondance
		 @@debutdeplacement:
				  push 0	 ;donne une des 8 cases aux alentours
				  push 800
				  call random
				  push bx	 ;sauvegarde de l'indice morga (energie)


				  cmp eax,96		;=====1 er cas=======
		      jge @@suite1
				  sub bx,4		;indice sur posx
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  
                                  cmp ax,0
				  jge @@ok1
				  mov tab_orga[bx],600	;cas ou l'on depasse le tab en x -> passage autre bord
			    @@ok1:
				  add bx,2		;indice sur posy
				  sub tab_orga[bx],5	;decremente d'une case


                    @@oksuperpo1: mov ax,tab_orga[bx]
                                  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	;cas de dépassement
				  jmp @@fincmp


		   @@suite1:
				  cmp eax,200		;====2 eme cas======
		      jge @@suite2
				  sub bx,2		;indice sur posy
				  sub tab_orga[bx],5	;decremente d'une case
				  
                     @@oksuperpo2:  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	 ;cas de depassement
				  jmp @@fincmp


		   @@suite2:
				  cmp eax,296	       ;======3 eme cas=====
		      jge @@suite3
				  sub bx,4	       ;indice sur posx
				  add tab_orga[bx],5   ;incremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,600	       ; cas du depassement
				  jle @@ok2
				  mov tab_orga[bx],0
			    @@ok2:
				  add bx,2	       ;indice sur posy
				  sub tab_orga[bx],5   ;decremente d'une case


                    @@oksuperpo3: mov ax,tab_orga[bx]
				  cmp ax,0	       ;cas du depassement
				  jge @@fincmp
				  mov tab_orga[bx],400
				  jmp @@fincmp


		   @@suite3:
				   cmp eax,400		 ;=====4 eme cas=====
		      jge @@suite4
				   sub bx,4		 ;indice sur posx
				   add tab_orga[bx],5	 ;incremente d'une case


                      @@oksuperpo4:mov ax,tab_orga[bx]
				   cmp ax,600		  ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite4:
				   cmp eax,496		 ;========5eme cas=======
		      jge @@suite5
				   sub bx,4		  ;indice sur posx
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,600
				   jle @@ok3
				   mov tab_orga[bx],0
			     @@ok3:
				   add bx,2		 ;indice sur posy
				   add tab_orga[bx],5

                     @@oksuperpo5: mov ax,tab_orga[bx]
				   cmp ax,400		 ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite5:
				   cmp eax,600		;=====6eme cas===========
		      jge @@suite6
				   sub bx,2		;indice sur posy
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite6:			       ;=======7eme cas===========
				   cmp eax,696
		      jge @@suite7
				   sub bx,4	      ;indice sur posx
				   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@ok4
				   mov tab_orga[bx],600
			      @@ok4:
				   add bx,2	      ;indice sur posy
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite7:
				   cmp eax,800	      ;===8eme cas================
		   jg @@probleme
				   sub bx,4	      ;indice sur posx
				   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@fincmp
				   mov tab_orga[bx],600
				   jmp @@fincmp

	 @@probleme: pop bx
		     jmp @@boucle_mouvement


	 @@fincmp:

		  pop bx	    ;indice replacé sur energie de morga traité

		  dec tab_orga[bx]  ;decremente energie
		  mov ax,tab_orga[bx]
		  cmp ax,0
		  JG @@incage
                  sub bx,6
                  mov tab_orga[bx],0                                                                                                                            ;*
                CALL char
                  JMP @@endnow

	@@incage:	  sub bx,6	    ;indice sur l'age
		          inc tab_orga[bx]  ;incremente son age
	@@endnow:	  add bx,14	    ;indice sur energie du morga suivant
	                  mov superpose,0
	                  INC nb_Morgarestant

       loop @@boucle_mouvement
ret
mouvement endp
;-----------------------------------------------------------------------
test_si_entoure proc
                    mov bx,6
  ;lorsque l on rentre dans cette procedure l'indice BX est positionnée sur l Energie du Tab_orga
  ;in va faloir tester di autour de la case du Morga , il y en a d'autres si il ne sais plus bouger ->il meut
  Mov cx,nb_Morga
  @@Boucle_traite_TT_orga:
                    mov ax,tab_orga[bx]    ;on va tester si on a afaire a un morga vivant
		    cmp ax,0		   ;energie plus de zero
		    JNE @@ok
		    ADD bx,8
		    JMP @@Boucle_traite_TT_orga

              @@ok:
              mov proximite,0     ;init de la proximite pour chaque Morga
              push bx
              push cx
              mov cx,nb_Morga
              mov si,6             ;indice sur' Energie 1 ER Morga  [ici utilisé est SI]
              @@Test_tt_les_autres:
                            mov ax,tab_orga[si]    ;on va tester si on a afaire a un morga vivant
		            cmp ax,0		   ;energie plus de zero
		            JNE @@ok2
		            ADD si,8

		            @@ok2:
		              @@CAS_1:        ;test si Morga au Nord a gauche
		                   push bx       ;Sauvegarde des Indices ->sur Energie
		                   push si
		                       sub bx,4              ;bx sur posx
                                       mov ax,tab_orga[bx]   ;
                                       sub si,4              ;si sur posx
                                       dec ax                ;test sur X-1
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_2
                                          ADD bx,2           ;bx sur posy
                                          ADD si,2           ;si sur posy
                                          mov ax,tab_orga[bx]
                                          dec ax             ;test sur Y-1
                                          cmp ax,tab_orga[si]
                                          JNE @@CAS_2
                                           INC proximite

                              @@CAS_2:        ;test si Morga au nord centre
                                   pop si
                                   pop bx    ;-->on revient au indice sur Energie
                                   push bx
                                   push si   ;-->sauvegarde des indices
                                       sub bx,4         ;bx,si sur posx
                                       sub si,4
                                       mov ax,tab_orga[bx]
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_3
                                          ADD bx,2         ;bx,si sur posy
                                          ADD si,2
                                          mov ax,tab_orga[bx]
                                          dec ax
                                          cmp ax,tab_orga[si]
                                          JNE @@CAS_3
                                           INC proximite



                              @@CAS_3:       ;test avec la case nord DRoite
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                       sub bx,4       ;indice sur posx
                                       sub si,4
                                       mov ax,tab_orga[bx]
                                       INC ax
                                       cmp tab_orga[si],ax
                                       JNE @@CAS_4
                                          ADD bx,2     ;indice sur posy
                                          ADD si,2
                                          mov ax,tab_orga[bx]
                                          DEC ax
                                          cmp tab_orga[si],ax
                                          JNE @@CAS_4
                                            INC proximite


                              @@CAS_4:        ;test sur la case centre droite
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                        sub bx,4     ;indice sur posx
                                        sub si,4
                                        mov ax,tab_orga[bx]
                                        INC ax
                                        cmp ax,tab_orga[si]
                                        JNE @@CAS_5
                                           ADD bx,2  ;indice sur posy
                                           ADD si,2
                                           mov ax,tab_orga[bx]
                                           cmp ax,tab_orga[si]
                                           JNE @@CAS_5
                                              INC proximite


                              @@CAS_5:       ;test sur case SUD droite
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                      sub bx,4    ;indice sur posx
                                      sub si,4
                                      mov ax,tab_orga[bx]
                                      INC ax
                                      cmp ax,tab_orga[si]
                                      JNE @@CAS_6
                                        ADD bx,2   ;indice sur posy
                                        ADD si,2
                                        mov ax,tab_orga[bx]
                                        INC ax
                                        cmp ax,tab_orga[si]
                                        JNE @@CAS_6
                                          INC proximite



                              @@CAS_6:         ;Test sur case sud centre
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                       SUB bx,4   ;indice sur posx
                                       SUB si,4
                                       mov ax,tab_orga[bx]
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_7
                                         ADD bx,2   ;indice sur posy
                                         ADD si,2
                                         mov ax,Tab_orga[bx]
                                         INC ax
                                         cmp ax,tab_orga[si]
                                         JNE @@CAS_7
                                            INC proximite


                              @@CAS_7:        ;Test sur case Sud gauche
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                       sub bx,4    ;indice sur posx
                                       sub si,4
                                       mov ax,tab_orga[bx]
                                       DEC ax
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_8
                                         ADD bx,2  ;indice sur posy
                                         ADD si,2
                                         mov ax,tab_orga[bx]
                                         INC ax
                                         cmp ax,tab_orga[si]
                                         JNE @@CAS_8
                                            INC proximite



                              @@CAS_8:       ;Test sur case gauche
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si
                                      sub bx,4
                                      sub si,4
                                      mov ax,tab_orga[bx]
                                      dec ax
                                      cmp ax,tab_orga[si]
                                      JNE @@fin_cas
                                         add bx,2
                                         add si,2
                                         mov ax,tab_orga[bx]
                                         inc ax 
                                         JNE @@fin_cas
                                            INC proximite


     @@fin_cas:
              pop si
              pop bx
                  ADD si,8
              LOOP @@Test_tt_les_autres

              pop cx
              pop bx

        @@Test_si_proximite_egal_8:
                                    cmp proximite,8
                                    JNE @@pas_egal
                                    mov tab_orga[bx],0  ;=>si l orga a une proximite de 8
                                                        ;  il dois mourir =>car plus de place pour vivre
        @@pas_egal:
              ADD bx,8           ;passage au Morga suivant
  LOOP @@Boucle_traite_TT_orga


RET
test_si_entoure endp
;-----------------------------------------------------------------------
donnecoordonneeimorga proc	  ;procedure d'initialisation du tab des morga

	      mov tab_orga[bx],1    ;age=1 il est donc vivant

	      push 0
	      push 119
	      call random
	      mul cinq		  ; appel random ds ax

	      add bx,2		    ;indice en posx
	      mov tab_orga[bx],ax   ;donne nbre aleatoire

	      push 0
	      push 79
	      call random
	      mul cinq		  ; appel random ds ax

	      add bx,2		   ;indice en posy
	      mov tab_orga[bx],ax  ;nbre aleatoire ds posy

	      add bx,2		    ;indice en energie
	      push 150
	      push 250
	      CALL random
	      mov tab_orga[bx],ax   ;energie=[150-250] initialisation
ret
donnecoordonneeimorga endp
;-----------------------------------------------------------------------
donnecoordonneeinouriture proc

	      push 0
	      push 119
	      call random
	      mul cinq
	      mov tab_nouriture[bx],ax	;indice sur posx ,donne nbre aleatoire

	      push 0
	      push 79
	      call random
	      mul cinq
	      add bx,2			;indice sur posy
	      mov tab_nouriture[bx],ax	;donne nbre aleatoire
ret
donnecoordonneeinouriture endp
;-----------------------------------------------------------------------
add_nouriture proc		     ;nb_nouriture+=(nb_nouriture/nb_orga)
  pusha
		  MOV si,0    ;indice sur posx de nouriture
		  mov ax,nb_Morga
		  sub dx,dx
		  DIV trente
		  MOV cx,ax    ;nbre d de nouriture rajoutée

				;on va remplir le tableau de nouriture
		  @@Boucle:
			     ;== seul les cases posx=0 seront comblée ==;
			  mov ax,tab_nouriture[si]
			  cmp ax,0
			  JNE @@okp

			  push 0
			  push 120
			  CALL random
			  mul cinq
			  mov tab_nouriture[si],ax   ;posx de tab_nouriture

			  mov posx,ax

			  push 0
			  push 80
			  CALL random
			  mul cinq
			  ADD si,2		     ;posy de tab_nouriture
			  mov tab_nouriture[si],ax

			  mov posy,ax

			  mov al,02h
			  CALL carre

			  ADD si,2		     ;posx suivant

			  JMP @@suivant
		     @@okp:
			  INC cx
			  ADD si,4
		     @@suivant:


		  Loop @@Boucle
  popa
ret
add_nouriture endp
;------------------------------------------------------------------------
dessine_nouriture proc		   ;procedure qui va parcourire le vecteur et dessiner
				   ;les cases avec nouritures
    mov cx,nb_nouriture
    mov si,0
    @@boucle1:
		mov ax,tab_nouriture[si]   ;test pour voir si il y a de la nouriture
		cmp ax,1		   ;car impossible k il y en ai en posx=0
		jge @@ok
		add si,4
		jmp @@boucle1
	   @@ok:
		mov ax,tab_nouriture[si]
		mov posx,ax

		add si,2
		mov ax,tab_nouriture[si]
		mov posy,ax

		mov al,02h
		call carre
		add si,2
    loop @@boucle1
ret
dessine_nouriture endp
;-----------------------------------------------------------------------
dessine_morga proc
		       ;== parcours du vecteur tab_orga ==

		       mov bx,6    ;indice sur energie Morga n°1
		       mov cx,nb_morga

		       @@bouclem:
			 push bx
				     mov ax,tab_orga[bx]     ;== 1/ test si vivant ==
				     cmp ax,0
				     jg @@vivant
				     INC cx
				     jmp @@finboucle

				@@vivant:
					   sub bx,4    ;indice sur posx
					   mov ax,tab_orga[bx]
					   mov posx,ax ;donne la coordonnée

					   add bx,2   ;indice sur posy
					   mov ax,tab_orga[bx]
					   mov posy,ax ;donne la coordonnée



			  pusha
				  mov ax,efface   ;on va tester si il sagit de colorier
				  cmp ax,0	  ;la case ou se trouve le morga ou de l'effacer
				  jne @@couleur_noir
		     @@couleur_rouge:
				  mov al,04h
				  jmp @@couleurok
		     @@couleur_noir:
				  mov al,00h
		     @@couleurok:
				  call carre	  ;appel procedure pour dessiner le carre
			  popa

		     @@finboucle:

		     pop bx
		     add bx,8  ;indice sur energie suivant

		     loop @@bouclem

ret
dessine_morga endp
;--------------------------------------------------------
carre proc
	 push cx
	 mov cx,4
	 inc posy
	 inc posx
   @@bouclecaseok:		;l'utilisation est tres simple,donner les coordonnées
	 call colorie_caseok2	;du pixel en haut a gauche(max sup gauche)
	 inc posy		;avec posx & posy
	 loop @@bouclecaseok
	 sub posy,4
	 pop cx
	 ret
carre endp
;--************phase_suiv*******************--
colorie_caseok2 proc	  ;comme on a afaire a une boucle impriqué
	 push cx	  ;le chois de ssroutine est plus judicieux
	 mov cx,4	  ;colorie_caseok2 est donc relié a colorie_caseok
    @@bouclecase2ok:
	 call pixel
	 inc posx
	 loop @@bouclecase2ok
	 sub posx,4
	 pop cx
	 ret
colorie_caseok2 endp
;-----------------------------------------------------------
damier proc
  mov al,07h
    mov posx,0
    mov posy,0
   lignes_horizontales:
			 mov cx,82
			 @@boucle2h:
				     push cx
				     mov cx,605

				     @@boucle1h:
						call pixel
						inc posx
				     loop @@boucle1h

				     add posy,5
				     mov posx,0
				     pop cx
			loop @@boucle2h
    mov posx,0
    mov posy,0
   lignes_vertivales:
			mov cx,122
			@@boucle2v:
				    push cx
				    mov cx,405

				    @@boucle1v:
					       call pixel
					       inc posy
				    loop @@boucle1v

				    add posx,5
				    mov posy,0
				    pop cx
			loop @@boucle2v
	   ret
damier endp
;-----------------------------------------------------
titrelegende proc

mov posx,5
mov posy,26
call curseur
mov dx,offset titre2
call ecrit

mov posx,41
mov posy,27
call curseur
mov dx,offset mort
call ecrit
	    ret
titrelegende endp
;-----------------------------------------------------
mode_graphique proc
	mov	al,12h ; mode graphique 12h->640*480
	mov	ah,00h
	int	10h
	ret
mode_graphique endp
;------------------------------------------------------
pixel proc	     ;procédure permettant l'affichage
  pushad	     ;d'un pixel,selon les coordonnées
  mov ah,0ch	     ;ici posx et posy
		  ;   mov al,01h	     ;01-->bleu
  mov bx,0000h
  mov cx,posx
  mov dx,posy
  int 10h
  popad
  ret