Le Tile Mapping
Le Tile Mapping : Le code (la démarche) Le code (la démarche)
Allez, attaquons le gros du chapitre !
Avant de commencer : la meilleure façon de suivre ce tutoriel est d'essayer par soit-même de faire la démarche et le code. Bien entendu vous n'y arriverez peut-être pas et vous n'aurez surement pas la même technique que moi mais au moins vous aurez appris bien plus que si vous étiez resté passif, croyez-en mon expérience
L'organisation du chapitre Bon, je ne vais pas vous faire le topo du "avant de commencer, il faut d'abord réfléchir à comment on va s'y prendre et noter toutes les étapes du programme" puisque moi-même je ne le fais pas tout le temps. Mais quelques fois c'est utile, comme maintenant ! N'hésitez pas à réfléchir à comment vous vous y prendriez si je n'avais pas été là !
Ire ize ze liste ofe ze étapes ofe ze chapteure :
Je vais commencer par vous donner les tiles, que vous pourrez ensuite modifier à votre aise Ensuite nous allons créer la matrice qui dira au programme où se situe chaque tile Puis nous créerons le code
Les Tiles et la matrice Voici les tiles que vous devrez insérer à la fin de votre programme sous la forme .db %00101001 (par exemple).
Numéro Visuel Nom Code 6 Bloc cassable .db %11011111
.db %11011111
.db %00000000
.db %10111011
.db %10111011
.db %00000000
.db %11110111
.db %11110111
.db %11110111 7 Pièce .db %00111000
.db %01000100
.db %10111010
.db %10101010
.db %10111010
.db %01000100
.db %00111000
.db 0
.db 0 0 Bloc objet .db %11111111
.db %10000001
.db %10111101
.db %10000101
.db %10011101
.db %10010001
.db %10010001
.db %10000001
.db %11111111 1 Sol .db %11111111
.db %01110111
.db %10101010
.db %11011101
.db %11011101
.db %10101010
.db %01110111
.db %11111111
.db %00000000 8 Champignon .db %00111110
.db %01111111
.db %01111111
.db %01111111
.db %01111111
.db %01010101
.db %00100010
.db %00100010
.db %00011100 4 Tuyaux haut-gauche .db %00000111
.db %00000111
.db %00000110
.db %00000111
.db %00000111
.db %00000000
.db %00000000
.db %00000000
.db %00000000 3 Tuyaux haut-centre .db %11111111
.db %11111111
.db %00000000
.db %11111111
.db %11111111
.db %11111111
.db %11000011
.db %11000011
.db %11000011 5 Tuyaux haut-droite .db %11100000
.db %11100000
.db %01100000
.db %11100000
.db %11100000
.db %00000000
.db %00000000
.db %00000000
.db %00000000 2 Tuyaux bas-centre .db %11000011
.db %11000011
.db %11000011
.db %11000011
.db %11000011
.db %11000011
.db %11000011
.db %11000011
.db %11000011
Pas besoin de mettre des labels avant les .db puisque nous calculerons l'adresse pour gagner de la place. Enfin si, un label à mettre au début de la table des tiles, personnellement je l'ai appelé "Tiles " (on mise sur l'originalité...).
Pour ce qui est de la colonne "Numéro " on va voir ça après. En fait c'est juste l'identifiant qui sera dans la matrice. Quand on aura 8 dans la matrice, la calculatrice saura qu'elle doit afficher le champignon. Et comme j'aime vous faire travailler, vous devez mettre les tiles dans votre programme dans l'ordre des numéros, c'est-à-dire d'abord le bloc objet, puis le sol, etc
Passons à la matrice. Elle aussi je vais vous la donner en faisant quelques petites commentaires. Voilà à quoi elle va ressembler.
matrixTiles:
.db 9,9,9,9,9,9,9,9,9,9,9,9
.db 9,9,9,9,9,9,9,9,9,9,9,9
.db 9,9,9,9,9,9,9,9,9,9,9,9
.db 9,9,9,8,7,9,9,9,9,9,9,9
.db 9,9,9,6,0,6,9,9,9,9,9,9
.db 9,9,9,9,9,9,9,9,8,9,9,9
.db 9,9,9,9,9,9,9,4,3,5,9,9
.db 9,9,9,9,9,9,9,9,2,9,9,9
.db 1,1,1,1,1,1,1,1,1,1,1,1Pour ceux qui n'ont pas compris le concept de matrice en assembleur, en fait c'est juste plusieurs listes les unes à la suite des autres.
On a donc pour chaque tile un numéro différent, le 0 étant le bloc objet et ainsi de suite. Mais surprise, il y a un tile 9 ! D'où vient-il ? Non je n'ai pas oublié de tile quand je vous ai fait recopier le tableau. En effet, quand la calculatrice va voir 9, il va comprendre que c'est un tile vide et va remplacer ça en %000000... Bref, je vous invite à recopier la matrice à la fin du programme
La création du code Allez en route ! Et n'oubliez pas : le meilleur moyen pour progresser est de s'exercer !
Si on fait un petit brainstorming, voilà comment devra être fait la boucle principale d'affichage de la map de notre programme :
BOUCLE Tant qu'il reste des tiles à afficher
Fin de la BOUCLE
Récapitulatif du code Bon, pour les distraits et les flemmards, voici le code complet prêt à être inséré dans votre code ! C'est tout ce que l'on a fait petit bout par petit bout.
Je ne vous mets pas le header volontairement pour ne pas alourdir le code. Je vous laisse le mettre avec le .org etc...
displayMap:
ld hl,PLOTSSCREEN
ld de,matrixTiles
ld b,108
dispTiles:
push bc
push de
push hl
ex de,hl
ld d,0
ld a,(hl)
ld e,a
sla e
sla e
sla e
ld hl,Tiles
add hl,de
ex de,hl
pop hl
cp $FF
jp z,TileVide
ld b,8
putTile:
push bc
ld a,(de)
ld (hl),a
ld bc,12
add hl,bc
inc de
pop bc
djnz putTile
ld bc,95
sbc hl,bc
verifFinLine:
push hl
ld a,12
ld bc,PLOTSSCREEN
or a
sbc hl,bc
ld a,12
call _divHLbyA
pop hl
or a
jp nz,suit
ld bc,72
add hl,bc
suit:
pop de
inc de
pop bc
djnz dispTiles
call _GRBUFCPY
ret
; Fin du programme
TileVide:
inc hl
jp verifFinLine
Tiles:
..[Les TILES]..
matrixTiles:
..[La Matrice]..
Ce qu'on veut faire randInt()
Parce que c'est bien d'en avoir une grosse, mais encore faut-il savoir l'utiliser (la calculatrice bien sûr)
Ce site utilise des cookies - Je sais que vous vous en fichez royalement mais AssemblySchool utilise des cookies pour vous tracer, et surveiller tous vos faits et gestes :p
Plus sérieusement, si vous continuez à naviguer sur ce site, vous acceptez que je stocke sur votre ordinateur des cookies.
En savoir plus sur les cookies... Cliquez sur le message pour le faire disparaitre