Logicielsmoto.com

Nous sommes le 28 Mar 2024, 09:38

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 108 messages ]  Aller à la page Précédente  1 ... 4, 5, 6, 7, 8  Suivante
Auteur Message
MessagePosté: 10 Oct 2022, 18:17 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Je me suis posé la question de savoir s'il y avait un algo pour jouer "assurément", c'est à dire trouser les endroits où l'on peut découvrir de façon certaine en fonction du voisinage.

Si cet algo existe, il pourrait être utile aux nullos à ce jeu. Par contre l'utiliser couterait un max de temps (on a rien sans rien).

A la limite je me demande même si l'on peut jouer totalement automatiquement sans avoir recours au hasard. Apparemment, c'est possible: https://www.nayuki.io/page/automatic-minesweeper-solver
phpBB [video]

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 14 Oct 2022, 19:16 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Eh ien moi, Samuel, je me suis plutôt demandé s'il n'existait pas une méthode moins aléatoire de poser les mines... Autant les niveaux 0, 3 et 6 sont facilement résolvables parce que la probabilité de tomber sur une mine n'est que de 10%, autant à 20% (pour les plus haut niveaux) c'est hyper compliqué (surtout avec 400 cases ou plus).

C'est pourquoi j'ai rajuté le mode "rejouer" comme pour Kmines. Sur le jeu Atari ST "Bombwatch", ils ont choisi l'option d'indiquer des emplacement sans bombe (avec une croix), j'avoue avoir pnsé à ajouter cette option, mais peut être dans le mode aventure plutôt.

Je ne pense pas que ça soit possible de gagner sans hasard du tout... Parce qu'on ne sait jamais si la première case cliquée est une nombe ou pas. Peut être que pour le programme java du Gar, il va fouiller dans la RAM où se trouve le jeu à l'endroit où sont les cases "mines" ?

Avec Demineur Xtreme, c'est positionné entre les adresse $9000 et $91FF (grand max)... Mais ca suppose d'avoir un système multitache sur les Thomson LOL.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 14 Oct 2022, 22:57 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Le type détaille son algorithme. Il n'y a pas de triche. Tout est basé sur la reconnaissance de motifs.

De mémoire il recherche d'abord certains motifs où il sait que les mines sont, puis quand il n'en trouve plus il cherches les motifs où les mines ne sont pas et les découvrent. Si aucune de ces deux stratégie ne trouve de case à couvrir/découvrir, il découvre au pif, ce qui peut le faire perdre.

Quand la densité de mine est forte, tu vois l'algo échouer souvent dans son tirage au pif du début, mais il arrive un moment où il a plus de chance et va au bout.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 15 Oct 2022, 12:16 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
J'en suis à la gestion des fichiers Hall Of Fame de type accès direct en Basic. Ya un petit soucis d'affichage que j'explique par la suite.

Le code de création de ces 16 fichiers est

Code:
1 ' PROGRAMME POUR INITIALISER LES FICHIERS DES SCORES.
10 DIM STRHERO$(10): RESTORE 2300: DEFINT I,J
20 FOR I=0 TO 9 : READ STRHERO$(I):NEXT I
30 RESTORE 2500
40 FOR I=0 TO 15 '16 FICHIERS À OUVRIR
50 READ X,Y,N,FILENAME$,SCORE
60 OPEN "D",#1,FILENAME$+".SCO",25
61 FIELD #1,20 AS NOM$,2 AS SCO$ 'SCO$ est un entier converti
62 FOR J=0 TO 9
63 LSET NOM$=STRHERO$(J):LSET SCO$=MKI$(CINT(INT(SCORE))) 'PARTIE ENTIERE DU REEL, PUIS CONVERSION EN ENTIER ET EN CHAMP DE FICHIER
64 PUT #1,J+1 'SAUVE L'ENREGISTREMENT
65 SCORE = SCORE *1.2 'ON AJOUTE 20% AU TEMPS
66 NEXT J:CLOSE #1
69 NEXT I
70 END

2299 'Data heros
2300 DATA "*Angus Mc Donner*"
(etc...)
2499 'INIT VAL CHALLENGE DATA
2500 DATA 9,9,10,"LEROT",19
(etc...)


Et le code Basic de restitution est :

Code:
1 ' PROGRAMME POUR VOIR LES FICHIERS DES SCORES.
2 DIM FILENAME$(9): DEFINT I,J:RESTORE 2500
3 FOR I=0 to 9 : READ FILENAME$(I):NEXT
10 CLS : ? "Choisissez le niveau" : FOR I=0 TO 9 : ? I;:? "/":NEXT
11 A$=INKEY$ :IF A$="" THEN 11
12 CODE = asc(a$) OR 32 : NUMCHOIX = code-48 : IF CHR$(code)="q" THEN CLS : END
13 IF code<48 OR code>57 then 11
14 GOSUB 20
15 GOTO 10
19 END
20 CLS :? "Niveau ";:?NUMCHOIX,:? "Fichier : "+FILENAME$(NUMCHOIX)
21 OPEN "D",#1,FILENAME$(NUMCHOIX)+".SCO",25
22 FIELD #1,20 AS NOM$,2 AS SCO$ 'SCO$ est un entier converti
23 FOR I=1 TO 10 : GET #1,I : ?I;:?"/ ";:? NOM$,:? CVI(SCO$):NEXT : CLOSE #1
24 A$=INKEY$ :IF A$="" THEN 24 'Tirage aléatoire
25 RETURN
2500 DATA "LEROT"
etc...


Quand je lance ce code de restitution, au dernier score, il y a toujours un retour à la ligne pour afficher ce dernier score (voir image), je ne comprends pas pourquoi (alors qu'on répète 10 fois la même opération dans la boucle). Normalement la virgule va à la prochaine tabulation... Peut-être que, vu que les tabulations sont tous les 13 caractères avec la virgule, vu que le "10" occupe un caractère de plus, que le champ "Nom" occupe 20 catactères... que finalement, la tabulation tomberai en 39 ?

Pas conséquent, je pense que le mieux est d'utiliser un locate...


Fichiers joints:
Screenshot_Demineur_Vue_Scores.png
Screenshot_Demineur_Vue_Scores.png [ 13.99 Kio | Vu 5081 fois ]
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 15 Oct 2022, 13:15 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Tu peux utiliser les PRINT USING pour tabuler les choses au mieux et éviter les soucis du 1er entier passant de 9 à 10, c'est à dire d'un caractère plus long sur la dernière ligne (le USING permet d'aligner proprement les choses). De mémoire:
Code:
PRINT USING "##";I
va afficher I sur 2 chiffres max, et
Code:
PRINT USING "\                  \";NOM$
va afficher NOM$ sur 20 caractères, même si la chaine fait 2 ou 200 caractères (il y a 18 blancs entre les antislash).

Je me demande même si on peut pas fair afficher les deux ensembles:
Code:
PRINT USING "## / \           \";I,NOM$

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 15 Oct 2022, 14:09 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Hello

Samuel Devulder a écrit:
Code:
PRINT USING "\                  \";NOM$
va afficher NOM$ sur 20 caractères, même si la chaine fait 2 ou 200 caractères (il y a 18 blancs entre les antislash).
\";I,NOM$[/code]


Alors en vérité, c'est ce code
Code:
PRINT USING "%         %##";"Bruno",3.14


Avec les "%" et pas les antislashs. Ca fonctonne oui, je garde ça sous le coude...

Maintenant je voudrais un code qui remplisse les espace entre la fin réelle du nom et le score...
J'ai programmé ça en Basic :
Code:
20 CLS :? "Niveau ";:?NUMCHOIX,:? "Fichier : "+FILENAME$(NUMCHOIX)
21 OPEN "D",#1,FILENAME$(NUMCHOIX)+".SCO",25
22 FIELD #1,20 AS NOM$,2 AS SCO$ 'SCO$ est un entier converti
23 FOR I=1 TO 10 : GET #1,I: NOM2$=NOM$
24 J=20:PTS$=""
25 IF MID$(NOM2$,J,1)=" " THEN j=j-1: NOM2$=MID$(NOM2$,1,j):PTS$=PTS$+".":GOTO 25
26 LOCATE 0,I+2:? I;: LOCATE 4: ? NOM2$+PTS$,: LOCATE 26:? CVI(SCO$):NEXT : CLOSE #1
27 A$=INKEY$ :IF A$="" THEN 27
28 RETURN


La procédure marche mais n'est pas très rapide (Basic oblige pour la création des "." manquant). Il existe des moyens de faire ça rapidement en PHP...
Par conséquent, je n'emploierai pas cette routine pour l'affichage des scores (c'est pas si lent mais ça se ressent quand même... Du genre, ça met 1.8" pour afficher 10 scores. sinon 0.6" autrement.
Dans cette routine je suis obligé d'utiliser une 2ème vatiable NOM$ parce que le BASIC ne permette pas qu'on fasse un MID$() sur un nom correspondant à un champ de fichier.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 15 Oct 2022, 14:23 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Pour afficher le bon nombre de "." sans faire de boucle, que penses tu de ceci ?
Code:
PRINT NOM$+MID$("...(exactement 20 points)...", LEN(NOM$));

Tu peux même faire des trucs rigolos comme ceci (tu changes directement le contenu de F$ à coups de MID$() à gauche)
Code:
F$="xxx .............. reste inchangé"
MID$(F$, 1,3)=STR$(I)
MID$(F$,5,LEN(NOM$)) = NOM$
PRINT F$

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Oct 2022, 10:36 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Le problème est qu'ici, pour le jeu, ça extrait les "$nom" à partir d'un fichier à accès direct, et que donc, la longueuir de chaque nom est de 20 caractères! D'où la boucle pour tester s'il y a un espace (ou plusieurs) en fin de chaine et il n'y a pas d'instruction "trim" (comme en PHP) ici... D'où la fonction bouclée. C'esyt pas comme dans les jeu Free Game Blot où les hall of fame ne sont pas enregistrés et ont donc des string à longueur variables.

Tu vois le problème ?


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Oct 2022, 10:52 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Puisque j'ai annoncé la nouvelle version sur l'autre forum, la voici en pièce jointe.


Fichiers joints:
MineSweeper_TO8_2022-10-15.zip [188.35 Kio]
Téléchargé 146 fois
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 16 Oct 2022, 12:30 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Neotenien a écrit:
Le problème est qu'ici, pour le jeu, ça extrait les "$nom" à partir d'un fichier à accès direct, et que donc, la longueuir de chaque nom est de 20 caractères! D'où la boucle pour tester s'il y a un espace (ou plusieurs) en fin de chaine et il n'y a pas d'instruction "trim" (comme en PHP) ici...

A la limite, il faut mettre les "." lors de l'écriture sur disk (ca n'arrive pas souvent, donc c'est pas grave si ca prends un peu de temps à ce moment là). Si le temps est important tu ajoutes les "." juste après la saisie du pseudo.

Petites astuces: au lieu de boucles d'attentes
Code:
65 A$=INKEY$: IF A$="" THEN 65
tu peux directement faire
Code:
65 A$=INPUT$(1)
C'est pareil, mais en plus court.

J'ai pas compris le "Perdu, r pour rejouer". Le r minuscule fait penser à une typo. Perso j'aurais affiché "Perdu ! (touche R pour rejouer)". A la limite ce qui serait cool serait un charactère de type smiley-pleureur pour rendre le message plus moderne. Idem, un simley qui souris pour le "GAGNE !".

Un truc me dérange un peu: quand au début on choisit une grille, je ne pige pas que ca ne débute pas directement la partie. Le menu qui affiche "0/ Nouvelle Partie" m'a fait penser à un bug.

Le temps d'affichage des images complète est très court. Perso j'aurais vu un truc comme ca: on choisit sa grille. Ca affiche l'image avec un texte en haut indiquant le type de grille, suivi d'un O)ui / N)on ? (même ligne si possible pour occuper la zone des infos). Si on tape N, on repart sur une selection, et si on tapes O, ca démarre de suite la partie (affichage de la grille, de la zone d'info en haut, etc).

Ainsi on a du temps pour voir l'image au complet avant que la grille recouvre l'image.

_________________
Good morning, that's a nice Tnetennba


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

Inscription: 21 Fév 2020, 11:38
Messages: 366
Bonsoir Samuel j'espère que tu vas bien ?

Samuel Devulder a écrit:
Neotenien a écrit:
Le problème est qu'ici, pour le jeu, ça extrait les "nom$" à partir d'un fichier à accès direct, et que donc, la longueuir de chaque nom est de 20 caractères! D'où la boucle pour tester s'il y a un espace (ou plusieurs) en fin de chaine et il n'y a pas d'instruction "trim" (comme en PHP) ici...

A la limite, il faut mettre les "." lors de l'écriture sur disk (ca n'arrive pas souvent, donc c'est pas grave si ca prends un peu de temps à ce moment là). Si le temps est important tu ajoutes les "." juste après la saisie du pseudo.

Excellente idée! Je vais le faire, ainsi que pour l'initialisation des score. Le but est ici de bien voir quel nombre correspond chaque pseudo... Pour ceux qui n'arriveraient pas avec les espaces. A la rigueur, ça pourrait être aussi un underscore...

Samuel Devulder a écrit:
Petites astuces: au lieu de boucles d'attentes
Code:
65 A$=INKEY$: IF A$="" THEN 65
tu peux directement faire
Code:
65 A$=INPUT$(1)
C'est pareil, mais en plus court.

En effet, modifications faites, et ça marche... en plus ça évite des érreurs quand on change cette instruction de ligne!

Samuel Devulder a écrit:
J'ai pas compris le "Perdu, r pour rejouer". Le r minuscule fait penser à une typo. Perso j'aurais affiché "Perdu ! (touche R pour rejouer)". A la limite ce qui serait cool serait un charactère de type smiley-pleureur pour rendre le message plus moderne. Idem, un simley qui souris pour le "GAGNE !".

Pour le moment ces messages ne sont que provisoire, l'idée des smiley est bonne! Penses-tu qu'il peut s'agir d'un caractère utilisateur (et là, que 2 couleurs) ou une petite image Thomson en 8x8 ? (je pennse que cette 2ème option serait la meilleure). Faut savoir que l'ensemble du texte est sous forme de variables pour les adaptation en d'autres langues (pour Peter notamment, mais également pour nos amis italien uo pour Lapetus qui est portugais, par exemple).
Pour le message en cas de jeu perdu... en fait au départ, le message était trop long (J'avais écrit comme toi et "Sinon autre touche pour continuer")... et dépassait les 39 caractères. Je garde ça sous le coude. A la rigueur... Ca pourrait être un smiley, puis appuis sur une touche et message pour rejouer apparaissant au même endroit (Ligne 24)

Samuel Devulder a écrit:
Un truc me dérange un peu: quand au début on choisit une grille, je ne pige pas que ca ne débute pas directement la partie. Le menu qui affiche "0/ Nouvelle Partie" m'a fait penser à un bug.

Je ne changerai pas cette partie du jeu. Quand on démarre une grille on peut soit vouloir voir directement les records, soit jouer une nouvelle partie, soit revenir au menu principal. Par contre, afficher l'image de fond ici est une bonne idée. Même s'il n'y a pas de possibilité de transparence sur Thomson.

Samuel Devulder a écrit:
Le temps d'affichage des images complète est très court. Perso j'aurais vu un truc comme ca: on choisit sa grille. Ca affiche l'image avec un texte en haut indiquant le type de grille, suivi d'un O)ui / N)on ? (même ligne si possible pour occuper la zone des infos). Si on tape N, on repart sur une selection, et si on tapes O, ca démarre de suite la partie (affichage de la grille, de la zone d'info en haut, etc).

Non parce qu'il y a la possibilité de voir les scores (voire de les réinitialiser), je n'aurai pas fait ce menu s'il n'y avait pas de tableau des scores de chaque tableau. Par contre, afficher l'image de fond dans un sous menu, oui. Idem pour la visu des scores.

Samuel Devulder a écrit:
Ainsi on a du temps pour voir l'image au complet avant que la grille recouvre l'image.

Je rappelle que tu peux voir l'image au complet lors d'une partie en tapant "P" ou "p". (Pause pendant le jeu).

Je trouve que le Basic permet quand même de faire pas mal de trucs! Alors certe les partie en charge lourdes (calcul de la grille, découverte en cascade, affichage des bombes) ne peut se faire qu'en assembleur, mais pour les partie qui seraient vraiment trop chiante en assembleur (print, locate etc.. de texte) c'est quand même appréciable.

J'espère que cette version ZIP du jeu est celle complète...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 17 Oct 2022, 13:30 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Je tiendrai compte des remarques de Samuel, maintenant je m'attaque à la partie plus esthétique du jeu.

1/ Pour les textes, je voudrais changer la fonte (un ensemble d'octets à positionner dans l'adresse indiqué par PTGENE ($60CF-$60D0), existe-t-il déjà des banques de fontes toutes prêtes sur Thomson ? (Pour éviter de les écrire soit-même)... Un logiciel utilisant de telles fontes ? Parce que la police standard du Thomson n'est pas terrible, manque de corps
2/ Je voudrais aussi pouvoir changer les couleurs de formes des caractères par GPL (suites de 8 bits), malheureusement, en Basic tout comme en assembleur, ça ne permet apparemment que de changer l'ensemble des couleurs des 8 GPL en 1 seule couleur forme et fond...Uniquement pour les menus (puisque ça va être multilingual, je n'ai pas envie de créer des images spécifiques pour chaque menu, ça demanderait trop de boulot (quoique non... Finalement, il suffit que les print les dessinent à l'écran et qu'on fasse un savep par la suite, mais ça suppose d'avoir n images différentes en fichier...)! Je préfère utiliser une couleur de fonte dégradée de haut en bas d'un caractère.
3/ Pour les jeux à cases doubles, je vais utilliser des tiles de 16x16 en RAM tenant compte du color clash, pour que dans ces tableaux, ça se rapproche de BombWatch de l'Atari ST
phpBB [video]

4/ Pour l'accès à chaque item de menu, je supprimerai les numéros et, il y a 2 options qui peut se présenter:
a/ soit accès avec un curseur graphique devant chaque item (descente ou montée avec les touche fléchées)
b/ soit accès avec la souris (+ logo) sachant qu'ici, la souris pourra être redessinée différemment si elle passe au dessus d'un menu, un peu comme sur une page web avec des hyperliens! J'avoue que cette option est tentante, et que la "a" je la garderait plutôt pour des jeu ne nécessitant pas de souris.


Dernière édition par Neotenien le 18 Oct 2022, 15:15, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 17 Oct 2022, 14:07 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
C'est pas le logo, mais la TURTLE :)

Avec les poke on peut faire ce qu'on veut en basic, en particulier changer les couleurs des octets à l'écran.

Autre truc possible, dessiner avec LINE les lignes qu'on veut. Utiliser CONSOLE pour dessiner uniquement en mode FORME, CLS, puis PRINT au dessus des lignes. Tu auras les anciennes couleurs des lignes à l'intérieur des caractères.

Pour les fontes spéciales... Je sais pas trop, moi je me faisais des DATA à moi que je pokais sur une zone réservée par CLEAR, et dont j'indiquais l'adresse via un registre de la page 0 du moniteur. Un soft ? Je m'étais fais un utilitaire à une époque. Peut-être que CARACTOR marcherait bien, mais perso je préfère tout maitriser moi même pour éviter les contraintes externes.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 18 Oct 2022, 11:22 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
hello, pareil j'ai du faire un script JS custom pour convertir des fonts "image png" vers data Thomson, il me semble qu'en plus sur Thomson ça commence par le bas !?

Pourquoi en png !, comme ça je peux dessiner ce que je veux dans les lettres, lettres picto etc...

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 18 Oct 2022, 15:23 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
oui chaque caractère est dessiné de bas vers le haut. On s'en rend vite compte, c'est rigolo pour le non averti :)

_________________
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  [ 108 messages ]  Aller à la page Précédente  1 ... 4, 5, 6, 7, 8  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 18 invités


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