Bon voici, le code en ti basic (il fonctionne très bien):
- Code: Tout sélectionner
EffDess
0→Xmin
0→Ymin
164→Ymax
264→Xmax
1→A
1→B
50→C
10→D
AxesNAff
Pt-Aff(A,B
Pt-Aff(C,D
abs(C-A)→E
abs(D-B)→F
If A<C:1→X
If A>C:1→X
If B<D:1→Y
If B>D:1→Y
E+F→G
0→I
1→H
While H
Pt-Aff(A,B
If A=C et B=D
Goto E
2G→I
If I≥F:Then
G+F→G
A+X→A
End
If I≤E:Then
G+E→G
B+Y→B
End
End
Lbl E
Voici celui en asm:
- Code: Tout sélectionner
;routine aff line
;aff point 1 et 2 pour test
ld bc,(X1)
ld a,(Y1)
call Routine_aff_point
ld (hl),$FF
ld bc,(X1)
ld a,(Y1)
call Routine_aff_point
ld (hl),$FF
;calcules des deltas
ld hl,(X2) ;delta X
ld bc,(X1)
or a,a
sbc hl,bc
jp p,$+11 ;4+1+1+2+2+1
ex de,hl
or a,a
sbc hl,hl
sbc hl,de
inc hl
ld (Delta_X),hl
ld a,(Y1) ;delta Y
ld c,a
ld a,(Y2)
sub a,c
jp m,$+6 ;4+1+1
xor a,%11111111
inc a
ld (Delta_Y),a
;test sur la nature de la ligne
ld hl,(X1) ;vars x
ld bc,(X1)
or a,a
sbc hl,bc
jp p,$+8 ;4+1+2+1
or a,a
sbc hl,hl
dec hl ;-1 dans hl
jr $+6 ;2+1+2+1
or a,a
sbc hl,hl
inc hl ;1 dans hl
ld (Vars_X),hl ;hl dans Vars_X
ld a,(Y1) ;vars Y
ld c,a
ld a,(Y2)
sub a,c
jp p,$+8 ;4+1+1+2
xor a,a
dec a ;-1 dans a
jr $+4 ;2+1+1
xor a,a
inc a ;1 dans a
ld (Vars_Y),a
;calcule de la variable G
ld hl,(Delta_X)
ld bc,(Delta_Y)
add hl,bc ;hl contient G
Boucle_aff_line:
push hl ;save hl soit G
ld bc,(X1)
ld a,(Y1)
call Routine_aff_point ;aff le point
ld (hl),28 ;couleur du point
ld a,(Y1) ;teste si on reste ou non dans la boucle
ld c,a
ld a,(Y2)
jr nz,$+16 ;2+4+5+1+2+2
ld hl,(X1)
ld bc,(X2)
or a,a
sbc hl,bc
jr z,Fin_Boucle_aff_line
pop hl
push hl ;save hl soit G
add hl,hl ;calcule de la variable I soit 2G
pop de ;G dans de
push hl ;save hl soit I
ld bc,0 ;test si I=>F
ld a,(Delta_Y)
ld c,a
sbc hl,bc
jp m,$+21 ;4+1+1+1+4+5+1+4
ex de,hl
add hl,bc ;G+F->G
ex de,hl
ld hl,(X1)
ld bc,(Vars_X)
add hl,bc ;A+X->A
ld (X1),hl
pop bc ;test si E=>I
ld hl,(Delta_X)
or a,a
sbc hl,bc
jp m,$+26 ;4+1+5+1+1+4+1+4+1+4
ex de,hl
ld bc,(Delta_X)
add hl,bc ;G+E->G
ex de,hl
ld a,(Vars_Y)
ld c,a
ld a,(Y1)
add a,c ;B+Y->B
ld (Y1),a
ex de,hl
jr Boucle_aff_line
Fin_Boucle_aff_line:
call _getkey
ret
Routine_aff_point: ;argument X=bc [1,320] et Y=a [1,240]
ld hl,$D40000
ld de,320
Boucle_aff_point:
add hl,de
dec a
jr nz,Boucle_aff_point
or a,a
sbc hl,de
add hl,bc
dec hl
ret
et enfin voici un scrn de ce qui se passe:
Si vous avez une idée je suis à l'écoute. Car ça fais un petit moment que je suis dessus et le problème est assez compliquer .
Merci beaucoup