Logicielsmoto.com

Nous sommes le 05 Juil 2022, 06:43

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 86 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante
Auteur Message
MessagePosté: 21 Mai 2022, 12:32 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
La toute dernière version (avec effet sonores) en Basic de Demineur Xtreme en opièce jointe (fonctionne pour TO8 et MO6, car nécessite une souris).

J'aimerais des avis sur les niveaux de difficultés, j'ai l'impression que pour les niveaux les plus dur (10x10 30 bombes ou 20x20 80 bombes), le hasard aide pas mal...


Fichiers joints:
Minesweeper2.BAS.zip [2.31 Kio]
Téléchargé 18 fois
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Mai 2022, 13:03 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Merci ! J'essaye ça dans le week end ;-)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Mai 2022, 16:47 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
Bentoc a écrit:
Merci ! J'essaye ça dans le week end ;-)



Pas de problème Benoit et je te met au défi de réussir 3 partties de suite du niveau 10x10 30 bombes ou 25x20 100 bombes LOL.

Snon pour rejouer une partie, c'est la touche "n" ou "N". autrement ça quitte le programme.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 22 Mai 2022, 12:06 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
Oh, il y a un bug! :( (d'interface utilisateur :lol: )

Le jeu ne peut marcher que sur émulateur. En effet, sur la vraie machine il n'y a pas de pointeur souris visible. Du coup on ne sait pas ce que l'on pointe à l'écran.

Il faudrait utiliser l'instruction TURTLE pour dessiner un pointeur sous les coordonnées souris durant la saisie. Je dois avoir dans mes vieux code une TURTLE à la forme de pointeur utilisable en basic (et extramon).
Fichier(s) joint(s):
Commentaire: Flèche en 640x200
Image1.png
Image1.png [ 79.54 Kio | Vu 492 fois ]
Fichier(s) joint(s):
Commentaire: Flèche en 320x200
Image2.png
Image2.png [ 56.13 Kio | Vu 492 fois ]
Ce qui serait bien serait alors aussi de vouloir déplacer ce pointeur au clavier avec les flèches. L'appui sur des touches permettrait aussi de poser un drapeau (P) ou découvrir la case pointée (D). Ainsi le jeu marcherait sur toutes les machines ayant le basic 128.

Et pourquoi pas alors utiliser les coordonnées du light-pen pour pointer une case aussi (si une souris est branchée, les instruction inpen retournent les coordonnées souris il me semble) et le clavier pour choisir de poser un drapeau ou découvrir la case. Ainsi le jeu utiliserait tous les périphériques d'entrée thomson.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 22 Mai 2022, 22:07 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
Samuel Devulder a écrit:
Oh, il y a un bug! :( (d'interface utilisateur :lol: )

Le jeu ne peut marcher que sur émulateur. En effet, sur la vraie machine il n'y a pas de pointeur souris visible. Du coup on ne sait pas ce que l'on pointe à l'écran.

Il faudrait utiliser l'instruction TURTLE pour dessiner un pointeur sous les coordonnées souris durant la saisie. Je dois avoir dans mes vieux code une TURTLE à la forme de pointeur utilisable en basic (et extramon).
Fichier(s) joint(s):
Le fichier joint Image1.png n’est plus disponible.
Fichier(s) joint(s):
Le fichier joint Image2.png n’est plus disponible.
Ce qui serait bien serait alors aussi de vouloir déplacer ce pointeur au clavier avec les flèches. L'appui sur des touches permettrait aussi de poser un drapeau (P) ou découvrir la case pointée (D). Ainsi le jeu marcherait sur toutes les machines ayant le basic 128.

Et pourquoi pas alors utiliser les coordonnées du light-pen pour pointer une case aussi (si une souris est branchée, les instruction inpen retournent les coordonnées souris il me semble) et le clavier pour choisir de poser un drapeau ou découvrir la case. Ainsi le jeu utiliserait tous les périphériques d'entrée thomson.


Je sais Samuel mais c'est déjà intégré à la dernière version depuis hier soir (et c'est galère en mode TO7 pour les modes tracés! Mais je m'en suis sorti... a coup de "console,,0" et de "show 0")

Je livre cette dernière version même si elle n'est pas encore totalement optimisée... Cette dernière version calcule plus rapidement les grilles puisqu'en fait elle fait la somme des cases autour dès qu'une bombe est validée (et pas comme la version précédente qui passait en revuee toutes les cases avant de dévouvrir une bombe..) Suivat le nombre de bombe, le gauin de vitesse peut être jusqu'à triplé. Mais plus il y a de bombe pour une même grille et plus le gain diminue. Un exemple, une grille de 20x20 avec 40 bombes mettra 12s contre plus de 25 auparavant.

Pour ce qui est de la tortue, j'ai fait une simple flècje dirigée en haut et à gauche... Je pense que c'est assez visible mais pour les cases noire, vue que la couleure de tracée est noire, la tortue ne sera plus visible dans ces zone, en fait ya juste a changer ma procédure pour les cases "vide".

En fait le basic des Thomson est vraiment génial!! Dommage qu'i n'y ait pas un compilateur pour accélerer les trruc critiques comme justement le calcul de grille ou les découverte de cases en cascade... Ok ya "Speedy Wonder" (qui est en fait issu du Basic 1.1 des Amstrad) mais ya énormément de contraintes sur ce code basic
c'est pour ça que Pascal Base serait préférable s'il était plus complet...


Fichiers joints:
Minesweeper2C.BAS.zip [2.48 Kio]
Téléchargé 16 fois
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2022, 00:10 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
Hello, j'ai commencé les premiers tests en assembleur, notamment pur la constitution de la grille et c'est très très rapide!! Moins d'1 seconde pour la plus forte grille (25x20 avec 100 bombes)

Cependant, j'ai un soucis dans l'algorithme que j'ai adpaté de la source basic. Il s'agit du calcul des cases se trouvant au dessus et en dessous d'une bombe. L'estrait de code qui pose probème semble être ici

Code:
*Début TTMT CASES AUTOUR
 LDD ADTAB1 ';5,2
 SUBD XMAX ';7,3
 SUBD #1 ';4,3
 STD ADTAB2 'J LOCAL EN BASIC ;5,2
 LDA YTMP1 ';4,2
 BEQ INITA4 'SI YTMP1=0 ';3,2
 JSR ADDCAS ';7,2


- addtab1 est l'adresse en RAM dcontenant la bombe posée (dans un tableau de TAILLE cases)
- XMAX contient le nombre de case horizontale-1
- ADTAB2 est un word dans lequel on stocke l'adresse en RAM d'une des cases environnante... Vu que la table commence en $9000 si on a des case en dessous ça ne pose pas de problème
- YTMP1 : est l'ordonnée de la bombe dasn la grille.
- INIT4 est la suite du programme quand, ici, on est déjà au sommet de la grille (Y)

J'ai l'impression que l'instruction SUB ne fonctionne pa comme je le voudrais.Supposojns qu'on soit en $9040 (donc Y>0) pour ADTAB1 (
D contient l'adresse ADTAB1, on lui soustrait le contenu de XMAX, soit ici, 25. puis on lui soustrait 1. la nouvelle adresse en ADTAB2 devrait être$9014 on est bien d'accord ?

Ou alors ça agit comme si YTMP1 valait 0 po_rtant ça n'est pas le cas puisque les coordonnées des bombes sont calculés en fonction de XTMP1 et YTMP et sur la gtille il y a biend es bombes réparties un peu partout.

Je sèche là...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2022, 00:21 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
Citation:
Supposojns qu'on soit en $9040 (donc Y>0) pour ADTAB1 (
D contient l'adresse ADTAB1, on lui soustrait le contenu de XMAX, soit ici, 25. puis on lui soustrait 1.
$9040 - 25 - 1 = $9026
Citation:
la nouvelle adresse en ADTAB2 devrait être $9014 on est bien d'accord ?
Ben non.. 40 - 26 = 14 en décimal, mais là tu travailles en hexa et la soustraction donne $9026.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2022, 14:53 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
j'ai pu finalement écrire le programme assembleur pour la création de grilles avec le randomizer de Samuel. La vitesse est d'au moins x30 comparé au Basic (avec le même algorithme de création de grille)

Voir la vidéo

phpBB [video]


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2022, 17:09 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
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.

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.

La routine récursive de découverte des zones à 0, sera aussi super intéressant en assembleur je pense.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mai 2022, 19:12 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
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...

phpBB [video]


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Mai 2022, 14:53 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
Bon ben j'ai voulu envoyé un mp à Samuel pour tester la version affichage assembleur des grilles de mines, mais ya pas possibilité de joindre des fichier en mp dans les forum... donc je le fais ici.

J'ai donc fini la partie calcul et affichage de grille en assembleur sur Thomson TO8... cf pièce joointe qui est donc cette démo mais avec affochage de grille en assembleur cette fois. La grille de 25x20 100 bombes (500 caractères ASCI à positionner) met entre 1 et 2 secondes contre 14s en BASIC (vitesse x14 tout de même à vue de nez), c'est plus que correct!!

Vous pouvez tester les différents niveaux. Et parfois, vous avez des grilles où le chiffre 8 apparait (dans les niveaux où il y a une forte densité de mines).

Pour le reste du jeu, j'ai bnesoin d'avis sur:
- les différents niveaux de jeu à insérer (le 25x20/100 me parait énoprme mais ça s'appelle "demineur Xtreme, c'est pas pour rien)... cependant les tailles de grille 25x20 ou 20x20, même 15x15 ne pourrait se faire avec des caractères de taille double. C'est pourtant le cas du Jeu Atari ST de même type mais avec une taille de grille plus faible. en 40 caractères de large, on pourrait avoir 20 en grille et 10 (voire 11, il faut laisser une ligne en haut pour les informations) en vertical pour des caratères doubles mais on ne serait plus en niveau Xtreme ici... a moins d'avoir une forte densité de bombe... Mais initialement, je voulais reproduire les niveauix qui existent dans kmines de Linux (30x16 est la taille maxi, soit 480 cases)
- le look des caractères (la bombe est franchement moche LOL)
- faut-il insérer une aide initiale (sur case=0) comme c'est recommandé ?

Voici la partie de code ASS permettant l'affichage de la grille "visible"
Code:
***************************
* Decouverte grille visible
***************************
 ORG $8400
 SETDP $84
 LDX #GRILLC
 LDB #$1B 'ECHAPPEMENT
 JSR PUTC
 LDB #$50 'COULEUR FOND=NOIR
 JSR PUTC
FN3S0 *
*POSITION CURSEUR ECRAN
 LDB #$1F
 JSR PUTC
 LDB YTMP2
 ADDB YOFSET 'OFFSET DE Y ECRAN
 ADDB #$40 'NECESSAIRE POUR N1
 JSR PUTC
 LDB XTMP2
 ADDB XOFSET 'OFFSET DE Y ECRAN
 ADDB #$41 'NECESSAIRE POUR N2
 JSR PUTC
*ATTRIBUTS COULEUR FORME
 LDB #$1B
 JSR PUTC
 LDA ,X 'CODE ASCI
 LDB ,X+ 'TRAITEMENT COULEUR
 CMPB #130
 BEQ FN3S2
 ANDB #15
 CMPB #8 'SI COULEUR PASTEL
 BLO FN3S1
 SUBB #8
 ORB #$30 'B=xx11xxxx=>7
FN3S1 *
 ORB #$40
 BRA FN3S3
FN3S2 *
* LDA #66
 LDB #$74
FN3S3 *
 JSR PUTC
 TFR A,B
*ECRITURE CARACTERE
 TFR A,B 'CARACTERE A VERS B
 JSR PUTC
* FIN BOUCLE X ET Y
 INC XTMP2
 LDA XTMP2
 CMPA XMAX
 BLS FN3S0
 CLR XTMP2
 INC YTMP2
 LDA YTMP2
 CMPA YMAX
 BLS FN3S0
* RETOUR FONCTION
 CLR YTMP2
 RTS
XTMP2 FCB 0 '1er octet tjrs à 0
YTMP2 FCB 0


Ca utilise majoritairement la routine moniteur PUTC. Soit en direct (caractère), soit en utilisant $1F en préambule (pour positionner le curseur) soit en échappement $1B=27 (pour la couleur)

Ce qui est étonnant dans le positoinnement du cutrseur est que s'il faut ajouter $40 à la vraie position d'Y il faille ajouter $41 pour la position de X!! bizarre.


Fichiers joints:
MineSweeper_to8-FD_01.zip [3.07 Kio]
Téléchargé 14 fois
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Mai 2022, 10:07 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
Quelques remarques
Code:
 TFR A,B
*ECRITURE CARACTERE
 TFR A,B 'CARACTERE A VERS B
Je crois que l'un des deux TFR A,B est en trop. En outre comme A et B ont la même valeur, tu peux remplacer lez TFR par un LDB ,x+ pour le caractere et utiliser un simple LDB ,x pour la couleur (voir plus bas).

Ensuite, je pense que tu peux (encore) gagner en affichage en remarquant ceci: Actuellement tu envois l'équivalent d'une LOCATE pour chaque cellule (FN3S0). Or comme l'affichage est de gauche à droite, sur une même ligne le curseur est déjà à la bonne position. En fait tu ne devrais faire le LOCATE que pour chaque nouvelle ligne Y. Cela ne nécessite que d'ajouter un label:
Code:
***************************
* Decouverte grille visible
***************************
 ORG $8400
 SETDP $84
 ...
FN3S0 *
*POSITION CURSEUR ECRAN
 ...
 LDB XTMP2
 ADDB XOFSET 'OFFSET DE Y ECRAN
 ADDB #$41 'NECESSAIRE POUR N2
 JSR PUTC

NEXTCELL <=== nouveau label
*ATTRIBUTS COULEUR FORME
 LDB #$1B
 JSR PUTC
 ...
*ECRITURE CARACTERE
 TFR A,B 'CARACTERE A VERS B
 JSR PUTC
* FIN BOUCLE X ET Y
 INC XTMP2
 LDA XTMP2
 CMPA XMAX
 BLS NEXTCELL <== nouveau label
 CLR XTMP2

 INC YTMP2
 LDA YTMP2
 CMPA YMAX
 BLS FN3S0

* RETOUR FONCTION
 CLR YTMP2
 RTS

Enfin pour l'usage de XTMP2/YTMP2, moi j'utiliserais plutôt la pile et les registres A/B comme compteurs en x et y:
Code:
***************************
* Decouverte grille visible
***************************
  ORG $8400
  SETDP $84
  LDX #GRILLC
  LDB #$1B 'ECHAPPEMENT
  JSR PUTC
  LDB #$50 'COULEUR FOND=NOIR
  JSR PUTC
  LDD #0
NOUVELLE_LIGNE
*POSITION CURSEUR ECRAN
  BSR LOCATE_A_B
NOUVELLE_CASE
  PSHS D
*ATTRIBUTS COULEUR FORME
  LDB #$1B
  JSR PUTC
  LDB ,X 'TRAITEMENT COULEUR
  CMPB #130
  BEQ FN3S2
  ANDB #15
  CMPB #8 'SI COULEUR PASTEL
  BLO FN3S1
  SUBB #8
  ORB #$30 'B=xx11xxxx=>7
FN3S1
  ORB #$40
  BRA FN3S3
FN3S2
  LDB #$74
FN3S3
  JSR PUTC
*ECRITURE CARACTERE
  LDB ,X+ 'CODE ASCII
  JSR PUTC
* FIN BOUCLE X ET Y
  PULS D
  INCA
  CMPA XMAX
  BLS NOUVELLE_CASE
  CLRA
  INCB
  CMPB YMAX
  BLS NOUVELLE_LIGNE
* RETOUR FONCTION
  RTS

* routine séparée car ca rends le code plus lisible
LOCATE_A_B
  PSHS D
  LDB #$1F
  JSR PUTC
  LDB 1,S
  ADDB YOFSET 'OFFSET DE Y ECRAN
  ADDB #$40 'NECESSAIRE POUR N1
  JSR PUTC
  LDB ,S
  ADDB XOFSET 'OFFSET DE Y ECRAN
  ADDB #$41 'NECESSAIRE POUR N2
  JSR PUTC
  PULS D,PC
car le code sera plus compact et rapide tout comptes faits. On pourrait même accentuer les fonctions en isolant la partie couleur dans une sous routine dédiée (qui protège B avec un PSHS B en entrée). Ca rendrait le code encore plus lisible je pense. Mais bon, c'est toi qui vois car ca ne changera pas la vitesse. Bref au final on pourrait avoir ce code:
Code:
***************************
* Decouverte grille visible
***************************
  ORG $8400
  SETDP $84
  LDX #GRILLC
  LDB #$1B 'ECHAPPEMENT
  JSR PUTC
  LDB #$50 'COULEUR FOND=NOIR
  JSR PUTC
  CLRB

NOUVELLE_LIGNE
  CLRA
*POSITION CURSEUR ECRAN
  BSR LOCATE_A_B

NOUVELLE_CASE
  PSHS D
  LDB ,X+ 'CODE ASCII CELLULE
  BSR COULEUR_CELLULE
  JSR PUTC 'AFFICHAGE CARACTERE CELLULE
* FIN BOUCLE X ET Y
  PULS D
  INCA
  CMPA XMAX
  BLS NOUVELLE_CASE

  INCB
  CMPB YMAX
  BLS NOUVELLE_LIGNE

* RETOUR FONCTION
  RTS

* gestion couleur (B= code cellule)
COULEUR_CELLULE
  PSHS B
*ATTRIBUTS COULEUR FORME
  LDB #$1B
  JSR PUTC
  LDB ,S 'TRAITEMENT COULEUR
  CMPB #130
  BEQ FN3S2
  ANDB #15
  CMPB #8 'SI COULEUR PASTEL
  BLO FN3S1
  SUBB #8
  ORB #$30 'B=xx11xxxx=>7
FN3S1
  ORB #$40
  BRA FN3S3
FN3S2
  LDB #$74
FN3S3
  JSR PUTC
  PULS B,PC

* l'équivalent de LOCATE A,B
LOCATE_A_B
  PSHS D
  LDB #$1F
  JSR PUTC
  LDB 1,S
  ADDB YOFSET 'OFFSET DE Y ECRAN
  ADDB #$40 'NECESSAIRE POUR N1
  JSR PUTC
  LDB ,S
  ADDB XOFSET 'OFFSET DE Y ECRAN
  ADDB #$41 'NECESSAIRE POUR N2
  JSR PUTC
  PULS D,PC
qui me semble vraiment bien.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 28 Mai 2022, 20:13 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
Bonjour

Dans la dernière version Basic que j'avais envoyé, il y avait des bugs et en plus, pas optimisé.

Je livre ici 2 versions Basic, l'une qui change la couleur de forme des chiffres et l'autre changeant la couleur de fond... Le but de cette 2ème version est de prévisualiser le jeu ayant le look "BombWatch" le démineur de l'Atari ST montré en vidéo ci-dessus. Alors bien sûr ça utilise Attrb du Basic en caractère double taille (Ce qui donne un look Intellivision) mais en les remplaçant par des images 16x16, on pourrait obtenir des images équivalentes au jeu Atari ST.

J'ai aussi apporté des modifications :
1/ si le nombre de case est <20 en H et <11 en V, on affiche en double taille et ça m'a fait prendre consicence d'un "bug" de l'instruction locate dans cette taille... c'est que ça affiche la position Y en Y-1...
2/ le pointeur de souris s'affiche pour une case découverte nulle
3/ J'ai aussi changé la couleur de fond des cases découvertes (couleur sable, ce qui a du mal à passer avec le "3" jaune).
4/ J'ai amélioré le processus d'affichage en cascade... J'ai passé bcp de temps là dessus, j'avais encore un bug aujourd'hui par rapport à l'ancienne version... Le code Basic est codé de telle sorte que le portage en Assembleur en soit facilité.
5/ En fin de partie, on retourne au menu en appuyant sur n'importe quelle touche sauf Q ou q (qui quitte le jeu)

Les 2 versions basic fonctionnent sur TO8 et MO6

Je vous laisse le choix de m'indiquer: si vous préférez la version "forme" ou "fond", le choix des couleurs de fond... Sachant que pour les caractères "doubles", ça sera des images 16x16 où là on sera vraiment proche du jeu Atari ST en Assembleur (à vie de nez, la vitesse est quasiment la même!! En tous cas, pour l'eaffichage de la grille 16x9 c'est la même vitesse!).

Un avis aussi quant aux choix des niveaux ? (certians sont peur être trop difficile)

Je prévois aussi une partie explicative dans le jeu avec un certain Angus Mac Donner (qui a été démineur avant de rejoindre la fondation Phonix, eh oui comme la série TV) qui parlera... (Addentum) en fait le jeu se jouera en mode "challenge" (avec tableau des record chrono) et un mode "aventure" avec ledit Mac Donner, et des mission éoclogiques en Ukraine... j'en dis pas plus...

Je pense que la partie affichage en cascade est au point pour être écrite en Assembleur...

Dites moi seulemnt si vous repérez des bug dans ces versions basic...


Fichiers joints:
Minesweeper_Basic.zip [5.64 Kio]
Téléchargé 16 fois
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 01 Juin 2022, 16:14 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 309
Samuel Devulder a écrit:
Quelques remarques
Code:
 TFR A,B
*ECRITURE CARACTERE
 TFR A,B 'CARACTERE A VERS B
Je crois que l'un des deux TFR A,B est en trop. En outre comme A et B ont la même valeur, tu peux remplacer lez TFR par un LDB ,x+ pour le caractere et utiliser un simple LDB ,x pour la couleur (voir plus bas).

Oui ça c'est vu... J'ai modifié de mon côté cette partie affichage, en fait j'ai créé une fonction dédiée à l'affichage d'un caractère.

Samuel Devulder a écrit:
Quelques remarques[code] TFR A,B
Ensuite, je pense que tu peux (encore) gagner en affichage en remarquant ceci: Actuellement tu envois l'équivalent d'une LOCATE pour chaque cellule (FN3S0). Or comme l'affichage est de gauche à droite, sur une même ligne le curseur est déjà à la bonne position. En fait tu ne devrais faire le LOCATE que pour chaque nouvelle ligne Y. Cela ne nécessite que d'ajouter un label

Ah bon ? En basic quand tu fais un print (l'équivalent du PUTC), ça va automatiquement à la ligne non ? D'ailleurs, j'imagine que l'affichage d'un caractère se fait de haut en bas (ou plutôt de bas en haut) pour chaque groupe de 8 pxl (GPL). Ce que j'aimerais c'est un truc qui permette d'afficher tous les caractères d'une même ligne en même temps. C'est possible ça en assembleur Thomson ?

En tous cas, les tests en assembleur me donnent moins de 2" pour l'affichage de la plus grosse grille (25x20).

J'ai terminé la partie assembleur de la découverte en cascade, pas enore testé... Mais il y a 16 grilles en tout (j'ai pris les 3 standard de Windows, celle de KMines et celkui de Bombwatch) et ça affiche en double taille quand le nombre de case H et V le permettent. Et j'ai ajouté une "cloture" de haie autour de chaque grille (pour le mode "aventure")

Maintenant il me reste à dessiner différents aspect du visage de "Mc Donner", la carte de l'Ukraine (pour le mode "aventure")... Mais je ne suis pas doué pour le dessin... Je pense utiliser "Grafiti" de FreeGameBlot, mais c'est pas simple pour le mode TO7...

En tous cas les résultats me satisfont vraiment! Je ne sais pas à quelle vitesse se fera la cascade mais ça sera très rapide... Comparé à lma version Basic.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 02 Juin 2022, 06:53 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
Citation:
En basic quand tu fais un print (l'équivalent du PUTC), ça va automatiquement à la ligne non ?
Le PRINT basic n'est pas équivalent du PUTC. Le PRINT n'est pas atomique et est constitué de pleins de PUTC. En particulier le PRINT basic ajoute un PUTC(NEWLINE) (retour à la ligne) à la fin s'il ne se termine pas par le symbole ";"
Code:
PRINT "COU"; : REM PAS DE RETOUR A LA LIGNE
PRINT "COU" : REM RETOUR A LA LIGNE
Donc avec PUTC pas besoin de locate, le curseur passe juste à la colonne suivante automatiquement. Tu gagnera du temps si tu ne fais pas l'équivalent du LOCATE à chaque case.
Citation:
Ce que j'aimerais c'est un truc qui permette d'afficher tous les caractères d'une même ligne en même temps. C'est possible ça en assembleur Thomson ?
Qu'entends du "en même temps". On affiche un caractère à la fois, le "même temps" est relatif. Mais oui sans LOCATE inutiles l'affichage de la grille sera encore plus rapide.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 86 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com