J'ai (enfin) ajouté un gestion de la map par matrice (comme tu me l'avais fortement conseillé deeph et à juste titre d'ailleurs).
Pour l'instant je l'utilise pour lire un emplacement et savoir s'il est pris, et inversement de stocker un tuyau dans un emplacement.
Ca donne quelque chose comme ceci :
; Lire le contenu a l'emplacement (b,c) tel que b = x et c = y
MATRIX_READ:
push hl
push de
push bc
push af
;ld b,3 ;on prends les coordonnées (3,2)
;ld c,2 ;
ld a, (xcoord)
ld d,0 ; Do x/8
ld e,a
srl e
srl e
srl e
ld b, e
push bc
;ld hl, 0
;ld (CURROW),hl
;ld hl, 0
;ld (CURCOL),hl
;ld h, 0
;ld l, b
;call _dispHL
;call WAITKEY
ld a, (ycoord)
ld d, 0
ld e, a
srl e
srl e
srl e
ld b, a
ld a, e
sub 1
pop bc
ld c, a
;ld hl, 0
;ld (CURROW),hl
;ld hl, 0
;ld (CURCOL),hl
;ld h, 0
;ld l, c
;call _dispHL
;call WAITKEY
;call WAITKEY
;call WAITKEY
lecturematrice:
ld a,c ;\
add a,a ; |
add a,a ; |a=c*16
add a,a ; |
add a,a ;/
sub c
sub c
sub c
sub c
sub c
sub c
add a,b ; ajouter le x
ld e,a
ld d,0
ld hl, map
add hl,de
ld a,(hl)
ld hl, 0
ld (CURROW),hl
ld hl, 0
ld (CURCOL),hl
ld h, 0
ld l, a
call _dispHL
call WAITKEY
call WAITKEY
call WAITKEY
pop af
pop bc
pop de
pop hl
ret
; Sauver un block dans la matrice
MATRIX_SAVE_BLOCK:
push hl
push de
push bc
push af
ld a, (xcoord)
ld d,0 ; Do x/8
ld e,a
srl e
srl e
srl e
ld b, e
push bc
ld a, (ycoord)
ld d, 0
ld e, a
srl e
srl e
srl e
ld b, a
ld a, e
sub 1
pop bc
ld c, a
lecturematrice2:
ld a,c ;\
add a,a ; |
add a,a ; |a=c*16
add a,a ; |
add a,a ;/
sub c
sub c
sub c
sub c
sub c
sub c
add a,b ; ajouter le x
ld e,a
ld d,0
ld hl, map
add hl,de
push hl
ld hl, tub_index
ld a, (hl)
ld b, a
ld ix, liste
dec ix
inc_ix2:
inc ix
djnz inc_ix2
ld a, (ix)
pop hl
ld (hl), a
pop af
pop bc
pop de
pop hl
ret
(liste est la liste qui contient les tubes, tub_index est le decalage dans la liste, (ix) est donc le tuyau courant)
Et la matrice :
map:
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
J'ai également fait le score dans la foulée (on perd 2 points si on pose sur une case prise, on gagne un point si on pose sur une case vide)
Si mes souvenir sont bons, la gestion du score se faisait comme ça (mais avec des 10aines de points + 10 et -20).
Il me reste donc que la fin du jeu à faire (gros morceau) et les niveau, page de demarrage, amélioration de l'affichage et toutes les bricoles de ce genre.
Voici un screenshot de la version actuelle (avec score) :
(c'est normal que les derniers tubes ne sont pas bons car on sort de la liste et ce sont donc des valeurs piochées en mémoire xD)
J'espère arriver à faire l'algo de fin, je vais retrousser mes manches et j'aurai surement besoin de votre aide à tous les 2.
Merci encore.