Bonjour
J'avance sur la partie "hall of fame" du jeu (mode "challenge"), il y a 16 tableaux. J'ai créé une routine pour initialiser ces 16 fichiers à accès direct (bonne nouvelle, d'après Daniel, c'est aussi possible sur MO6... tant mieux parce qu'il y a des italiens qui attendent ce jeu).
Et je me suis rendu compte que certains niveaux étaient IMPOSSIBLE à trouver sans une grosse part de chance (les niveaux 2, 5, voire 4 aussi), aussi j'ai diminué le nombre de mines à trouver pour les niveau 1, 2, 4 et 5, et cette fois, les niveaux sont jouables
Pour ce qui est des scores initiaux, j'avais essayé de trouver une formule avec des ln, puissances etc... mais rien de satisfaisant. Samuel m'ayant suggéré de partir de mes meilleurs scores, et ajouter 10% pour le meilleur score du Hall of Fame (pour les personnages, ça sera une surprise...).
Correction d'un bug:
- lorsqu'un clic gauche était effectué sur une case avec fanion, le nombre de mines découvertes n'était pas décrémenté. Et pour résoudre ça, j'ai trouvé par hasard une particularité du Basic qui n'existe sur aucun autre langage à ma connaissance : en Basic on peut aller n'importe où dans une ligne de sous routine par un Gosub! Illustration par ce code
Code:
800 'Traitement clic gauche : on sauve les valeurs de couleur, locate et attrb pour Interval
801 IF STATUT=1 THEN NBMARK=NBMARK-1 : GOSUB 890 'astuce perso : on va à un point d'une routine!!
802 if charcase=130 then poke ADRGAMESTATUT, 2
810 show 0: POKE ADRXPOS,X : POKE ADRYPOS,Y : POKE ADRIDTAB, I@256:POKE ADRIDTAB+1, I and 255
820 CONSOLE,,0: ATTRB carsize0,carsize1 :EXEC &H8500
830 GAMESTATUT=PEEK (ADRGAMESTATUT)
831 IF GAMESTATUT<>0 THEN GOTO 849
840 PLAY "O5L12A6DO" : NBRESTANT = PEEK (ADRNBREST)*256+PEEK (ADRNBREST+1)
841 ATTRB 0,0 : color couleurforme,couleurfond : LOCATE 3,0 : ?NBRESTANT
842 b$=inkey$ : if b$="" then 849
843 if chr$(asc(b$) OR 32) = "q" then end
849 RETURN
850 'TRAITEMENT CLIC DROIT
860 IF statut=0 THEN 899
861 show 0:CONSOLE ,,0 :
862 attrb carsize0,carsize1
863 xtmp= X*(1+carsize0)+XOFFSET:ytmp=Y*(1+carsize0)+YOFFSET+carsize0 :LOCATE xtmp,ytmp
870 IF statut=2 THEN COLOR 1,7 : NBMARK=NBMARK+1 : PRINT GR$(1) : poke &h9200+i,1: PLAY "O5L6A0SI" : GOTO 890
880 IF statut=1 THEN COLOR 7,8 : NBMARK=NBMARK-1 : PRINT GR$(0): PLAY "O4L6A0SI" : poke &h9200+i,2
890 attrb 0,0 : color couleurforme,couleurfond : LOCATE 13,0 :?NBMARK
899 attrb carsize0,carsize1:RETURN
800 et 850 sont sensés être des entrées de sous routines basic, mais
avec la ligne 801, on peut aller directement (par exemple) en 890 (sous routine) par un GOSUB!! J'ai vraiment fait ça par hasard et je ne crois pas que le C, Java, Pascal, PHP etc soit capable de faire ça (je me trompe peut-être ?) même si le C, Pascal ont des étiquettes, il me semble qu'on ne peut y accéder que par des "goto"... Quelqu'un peut me confirmer ? Par contre, en Assembleur, ceci est tout à fait possible.
Sinon, au niveau améliiorations, j'ai ajouté une fonction assembleur qui affiche toutes les mines restantes quand on s'est planté (l'affichage, même pour les gros niveaux, est quasi instantané), par contre, je me demande si
ça ne serait pas intéressant d'ajouter la possibilité de rejouer le niveau perdu (Comme c'est le cas pour Kmines sous Linux) ? C'est pas difficile à ajouter comme fonction vu que les routines assembleur le permettent déjà quasiment : au cours du jeu, les données "cases" ne sot pas modifiés, seuls les statuts des cases -caché, drapeau, découvert- changent.
Il y a aussi la possibilité d'
ajouter une (ou plusieurs) aide (une croix sur une case grise non minée)... Mais ça pourrait être un truc du genre comme les cheat codes des tous premiers jeux vidéo... Mais en Basic LOL.