Samuel Devulder a écrit:
Je me demande s'il ne serait pas bien aussi d'avoir l'affichage de la grille en assembleur. Car en basic, cet affichage est lent à mort.
C'est prévu également... Ca ne sera pas long à mettre en place... La vitesse sera équivalente à celle qu'on trouve dans "Super Androide" quand on voit la spirale, ce ne sont que des caractères,... et c'est fort dommage, parce que le jeu Super Androide perd en lisibilité... La version Amstrad de Lode Runner est géniale et on pourrait faire la même sur TO8 et MO6 en mode bm4.
Samuel Devulder a écrit:
Y a t'il des calculs couteux pour compter le nombre de bombes dans le voisinage et en déduire la couleur de chaque cellule? Dans ce cas, faire ce calcul en ASM sera intéressant pour accélérer le jeu en basic.
Les cellules contiennent déjà les chiffres (de 0 à 8) lors du démarrage d'une partie, le clic ne fait que les afficher au lieu du cache (il y a un tableau "statut" à 2 pour "caché" à 1 pour "drapeau" et à 0 pour "découvert")... Quand il y a le statut "découvert", plus aucune action n'est possible sur la case.
En fait, pour chaque nouvelle bombe positionnée, le programme fait le calcul des cases alentours dans la foulée.
A l'origine toutes les cases ont la valeur 48 (asci = "0", et la couleur 0 est justement le noir!! C'est ce qui est pas mal dans l'algorithme c'est que la couleur est donnée par rapport au code ASCI de la case, ensuite pour le caractère, ya juste qu'à afficher un CHR$())
1/ Tirage au sort d'une bombe
2/ Quand la bombe est positionnée, pour chacune des 8 cases autour:
a/ si c'est une bombe on passse à c/
b/ on incrémente l'octet de la case
c/on passe au test de la case suivante
3/ Si nbbomb <>0 retour en 1/
Pour les tests des 8 cases aux alentours, comme dans le programme basic, I est la position de la bombe courante et J celle de la case à tester. Sachant qu'on a déjà les coordonnées de X et Y de chaque bombe (a servi à calculer son rang dans le tableau à 1 dimension).
J = I
J=J-XMAX-1 (c'est pas grave si l'index est inférieur à 0 ici : position juste au desus de la bombe)
Si X=0 on saute à l'étape 4
Test : on augmente de 1 si <> bombe
etape 2
J=J-1 (case a gauche ne J précédent
Test : on augmente de 1 si <> bombe
etape 3
J=J+2 (case +2 / J précédent)
Si X=XMAX on saute à l'étape 4
Test : on augmente de 1 si <> bombe
etape 4
Si J>I on passe à l'étape 5
J=I
->etape 2
etape 5
J=J+1
Si J>I (on a fini les tests puisque ça signifie qu'on a dépassé I+XMAX+2 pour J) -> tirage d'une autre bombe
J=J+XMAX (on se retrouve dans la case en dessous de la bombe)
Test : on augmente de 1 si <> bombe
->etape 2
Cette routine a l'avantage de réduire le nombre de lignes de code puisque la partie tests en X-1 et X+1 est redondant (étape 2 et 3)
Je fournis la partie du code Basic qui traite de ceci
Code:
600 'ROUTINE D'INITIALISATION GRILLE
601 FOR I=0 TO TAILTAB : GRILBOMB(I)=48 : GRILSTAT(I)=2 : NEXT : I=0
602 IF NBBOMB=0 THEN 699
603 X=INT(RND*(XMAX+1)) : Y=INT(RND*(YMAX+1)) : I=Y*(XMAX+1)+X : IF GRILBOMB(I)=130 THEN 603
604 NBBOMB=NBBOMB-1 : GRILBOMB(I)=130
607 J=I-XMAX-1
608 IF Y=0 then 612
609 gosub 700
610 J=J-1 : IF X>0 then gosub 700
611 J=J+2 : IF X<XMAX THEN gosub 700
612 IF J>I THEN 614
613 J=I : GOTO 610
614 J=J+1 : IF J>I THEN 602
615 J=J+XMAX
616 IF Y=YMAX THEN 602
617 GOSUB 700 : GOTO 610
699 RETURN
700 IF GRILBOMB(J)<>130 THEN GRILBOMB(J)=GRILBOMB(J)+1
710 RETURN
Samuel Devulder a écrit:
La routine récursive de découverte des zones à 0, sera aussi super intéressant en assembleur je pense.
Je me demande si je vais utiliser les PSH et PULS... Des tests en Basic ont montré qui'l faut au moins une pile de 150 éléments (pour les grosses grilles et avec peu de mines initiales)... dans le code Assembleur, j'ai prévu de la place dès l'emplacement $9600 pour les TO8 (sans utilisation des PUL et PSH)
Sinon, je réfléchirai aussi à la possibilité de jouer sur les TO7 et MO5 avec crayon optique, ça suppose une légère modification dans le code Basic... et d'avoir une alternative pour le "clic droit"... Mais bon ça suppose d'utiliser le clavier et le crayon optique en même temps...pas top si l'écran est éloigné du clavier.
Pour ce qui est de l'aspect fun, j'ai bien envie de mettre une intro avec un Ersatz de Mc Gyver (parce que dans la nouvelle série, à l'armée, il était spécialiste du déminage avant de rejoindre Phenix)
Sinon, j'ai vu qu'il est sorti un démineur sur Atari ST en 2020-2021, BOMBWATCH, où, ici, il y a une case "0" montrée au départ...