[Ex] Script jouant au démineur

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

[Ex] Script jouant au démineur

#1

Message par codename44 »

Salut !

voilà un script qui joue au démineur tout seul :D
il est basé sur la détection de pixel, les chiffres sont reconnus grâce aux couleurs
il va cependant chercher quelques informations dans la mémoire, notamment en début de partie, pour connaitre le nombre de cases découvertes.
Avant de le lancer, veuillez lire ce qui suit :
il faut le configurer !
les lignes les plus importantes sont
$startx = 22
$starty = 111
ces variables correspondent aux coordonnées du milieu de la première case du jeu (la case du coin en haut à gauche)
si vous avez le thème officiel d'XP, les coordonnées à utiliser sont déjà mises.
si votre thème n'est ni XP, ni LSD, utilisez "Autoit Window Info", et soyez précis dans votre mesure !

-Toutes les variables pouvant être changées se trouvent en début de script

-Ne lancez pas 2 fois le script !
en effet la touche PAUSE ne fonctionne que sur 1 script

j'ai laissé l'icône en bas comme indicateur, pensez bien à quitter le précédent avant de relancer le script

enfin, si le script plante (ce qui n'arrive normalement pas si vous avez bien configuré ce qui est indiqué au dessus), il vous suffit d'appuyer sur la touche {PAUSE} pour quitter le script.

Le script fonctionne dans tous les modes (débutant, intermédiaire, personnalisé), avec le nombre de colonnes, de lignes et de mines que vous voulez.
En expert il arrive souvent que le jeu soit bloqué, et que la seule solution soit de découvrir une case au hasard
le script vous en informe, attend que vous ayez découvert une case qui fasse avancer le problème, puis continue tout seul.
Le niveau intermédiaire peut être finit la plupart du temps sans action de votre part

je pense que tout est dit..

Tout est stocké à la fin du post
Vous trouverez :
"demineur v3.au3" :arrow: le programme en lui même
"NomadMemory.au3" :arrow: include nécessaire pour la lecture dans la mémoire
winmine.exe :arrow: c'est le démineur de XP pour les personnes étant sous vista et voulant tester quand même ..

voilà a++

Edit : les fichiers peuvent être récupérés ici :
http://codename44.free.fr/autoit-fr/
et sont : NomadMemory.au3 ; demineur v3.au3 ; et winmine.exe si vous n'êtes pas sous XP

Téléchargements précédent : 388
Fichiers joints
Demineur.zip
(83.01 Kio) Téléchargé 688 fois
Modifié en dernier par codename44 le mer. 12 mars 2008 18:44, modifié 3 fois.
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: Script jouant au démineur

#2

Message par codename44 »

script mis à jour, il y avait une erreur qui créait un message d'erreur de temps en temps
désolé
normalement c'est bon

faites moi signe si vous avez encore des erreurs
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: Script jouant au démineur

#3

Message par codename44 »

merci beaucoup pour ton feedback complet, c'est exactement ce que j'attendais !

pour le 1. c'est ok, je ferais ça bientôt :wink:

le 2. je ne vois pas du tout ce que tu veux dire :?:
Si tu crée une matrice de la taille de ton demineur (en case) tu pourrais appliquer des algorithmes pour pouvoir indiquer les mines ! Un exemple ?
la matrice dont tu parles existe, c'est un tableau à double entrée lignes\colonnes
tu peux l'afficher en ajoutant :

_ArrayDisplay($plan)

en dessous de (ligne 116)
;recuperer le "plan" du jeu (tableau a 2 entrées)
$plan = plan()

$plan est mis à jour régulièrement dans le programme

j'y avais pensé mais c'est justement l'algorithme en question que je ne voyais pas du tout ! :p

je vais regarder attentivement ce que tu as mis dans ton message et traduire ça en algo

si tu as d'autres astuces mathématiques comme celle la n'hésites pas !

4. oui ça c'est vrai que c'est embêtant, j'avais pris l'habitude de faire pause une fois que j'avais perdu mais t'as raison, autant le faire automatiquement ça sera plus propre

voilà merci en tous cas, et je repost dès qu'il y a des améliorations :D
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

Re: Script jouant au démineur

#4

Message par Voodoo »

Le 2 se resoudra grace au 1. Mais au cas ou tu ne fais pas le 1, essaye ton programme en mettant une fenetre sous la fenêtre du démineur. Le probléme est la.

Pour l'algorithme, sa marche pour toutes les cases ! Le chiffre au milieu de la case indique la probabilité des huits cases autour de tomber sur une mine. Ce n'est pas facile à expliquer. Si tu ne saisis pas la chose je ferais des parties avec des schémas :mrgreen:

pS: Quant tu remettras à jour n'oublie pas le lien du premier posts et ajoute un post car l'edition ne compte pas comme un nouveau message.
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: Script jouant au démineur

#5

Message par codename44 »

je suis pas sur d'avoir bien compris la technique mais en l'appliquant sur cet exemple, j'obtiens plus d'1 en chances .. ?

Image

les mines se trouvent en fait en face du 3, et en face du 1
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

Re: Script jouant au démineur

#6

Message par Voodoo »

Erreur de logique !

tu as oublié de diviser chaque opération par 4 ! car tu as 4 cases inconnues donc 1 chance sur 4 d'avoir une chance sur... :mrgreen:

ce qui donne en partant de la case du haut

->0.083
->0.25
->0.375
->0.291

Apparement la mine avait plus de chance de se trouver en face du 1 et du 2 !

Bon c'est comme au loto tu peux avoir 99% de chance de perdre et tomber sur le 1%...donc dans ce cas la il faut sauter et revenir quand les probabilitées seront satisfaisantes !
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: Script jouant au démineur

#7

Message par codename44 »

J'ai mis à jour le téléchargement du premier post
le script se quitte quand on perd

--
j'avoue avoir du mal à imaginer comment mettre ça sous forme de script
il faut arriver à déterminer la zone où effectuer les calculs de probas

pourrais tu me donner un autre exemple ? :oops:

merci :)
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

Re: Script jouant au démineur

#8

Message par Voodoo »

Bien, on imagine que on lance ton script et la il "bloque". Tu appelles alors une fonction manifique qui va mettre en place l'algorithme trouvé sur le forum de la communauté :mrgreen:

Voila le screen:

Image


Soit 1-2-3 les cases connues et A-B-C les cases cachées.

  • On analyse du point de vue de la case 2:
    • Dans les 8 cases qui entourent la case 2, 3 sont cachées. Si on isole cette partie on considére que on a une 2 chance sur 3 de tomber sur une mine ! Donc pour A et B et C la chance globale est 2/3. Si on prend une case en particulier vu qu'il y a 3 cases on a 2/6=1/3.
      Ce qui correspond bien puisque 1/3 * 3 cases = 1. Si on decouvre toutes les cases, forcement on perd.
      Donc nous avons A=B=C=1/3.

      On peut raisonner aussi avec la case 1. Celle si n'a que une seul case et une seule mine donc donne à la case A la probabilité de 1/3 de contenir une mine. De même pour la case C. Car nous sommes toujours du point de vue de 2. Donc 1 mine pour 3 cases cachées = 1/3.
  • On analyse la case 1 et 3:
    • La case 1 n'a qu'une seule case dans son entourage et n'est pas influencée par une autre probabilité comme la case 2. Donc la probabilité est de 1. De meme pour la case 3. Ce qui nous donne 2 mines sur.
  • On revient à la case 2:
    • 2 des cases (A et C) sont maintenant repertoriées comme minées. Donc la case B est sur..on clique...
Ici nous ne sommes plus dans le detail ! Cette partie pourrait bien etre aussi longue que celle que tu as deja faite...mais il faut au moin sa pour "simuler" un joueur humain !
codename44
Niveau 4
Niveau 4
Messages : 65
Enregistré le : sam. 22 déc. 2007 15:46
Status : Hors ligne

Re: Script jouant au démineur

#9

Message par codename44 »

dans ton exemple, ce qui a permis de cliquer à coup sûr sur la case B, était le fait qu'on avait 100% de chance qu'il y ait : une mine en A et une mine en C, après l'étude des cases 1 et 3.

Or ceci est déjà fait par le script, toutes les probabilités de 1/1 sont déja gérées, et ce cas n'aurait pas été considéré comme "bloqué" par le script actuel


Voilà comment fonctionne le script :

-il découvre dans un premier temps un certain nombre de cases, au hasard.

-il fait le plan du jeu (tableau à double entrée) en le remplissant avec les symboles suivants :
1,2,3,4,5,6 pour le nombre de mines, 0 pour case découverte sans rien, * pour case non découverte et ! pour mine déclarée sur cette case

-ensuite il va étudier tous les nombres de la manière suivante :
prenons exemple sur le 1
il cherche le premier "1" du tableau
il compte le nombre de case non decouvertes autour
il compte le nombre de mines deja déclarées autour
donc si le nombre de mines deja déclarées est de 1, il va découvrir toutes les autres
si le nombre de cases non decouvertes est de 1, et qu'il n'ya pas de mines deja signalées, il va mettre une mine sur cette case restante.
dès qu'il met une mine, il fais une vérification avec le clic molette sur les cases alentours pour découvrir tout ce qui est "decouvrable".
en suite il passe au 1 suivant, etcc..
ensuite il s'occupe des 2,3,4,5,6

une fois qu'il a finit de vérifier tous les nombres, il y a 2choix :
-soit le nombre de cases decouvertes ou de mines à changé depuis le lancement de la boucle et dans ce cas il recommence la même chose
-soit il n'ya pas eu d'avancement dans la derniere boucle, et dans ce cas il considère le jeu comme bloqué

une fois bloqué, il lance la fonction "check" qui vérifie que toutes les cases pouvant être decouvertes le sont bien
c'est à dire qu'il compte le nombre de mines et le nombre de cases non decouvertes autour de chaque case afin de vérifier, par exemple, qu'un 2 qui aurait 2 mines signalées n'ait pas de cases non decouvertes autour de lui.

si la fonction check n'a pas découvert de cases, alors il demande à l'utilisateur de debloquer le jeu
si la fonction check a découvert au moins une case, il se considère comme débloqué et refait la boucle principale en vérifiant tous les nombres

etc.. jusqu'à gagner ou perdre

donc, une fois les 2 mines placées en étudiant les 1, la case B sera forcement découverte à un moment ou un autre


ce que je te propose :

tu fais tourner le script en mode expert, et dès qu'il est bloqué et que tu as une solution, même l'ajout d'UNE mine sûre, tu m'expliques comment tu as raisonné

je vois bien que tu as un fait un bel effort d'explication dans ton dernier message, mais l'exemple n'est pas imaginable malheureusement :(

voilà désolé d'être long à comprendre :oops: et merci pour toutes tes réponses !
Avatar du membre
Voodoo
Niveau 6
Niveau 6
Messages : 298
Enregistré le : ven. 20 juil. 2007 20:45
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#10

Message par Voodoo »

Je te prendrais un screen en mode expert mais j 'ai pris le cas de la probabilité 1 parceque c'etait facile à expliquer. Tu appliques cette methode partout et sa marche !
Manu
Niveau 1
Niveau 1
Messages : 2
Enregistré le : dim. 06 juil. 2008 19:09
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#11

Message par Manu »

Bonjour,

Désole d'écrire un post en Juillet pour une discussion datant de Janvier. Mais un cas "simple" a ajouter est le cas des case ne pouvant pas contenir de bombe

par exemple
1 ?
1 ?
3 ?
! !
Dans ce cas la première ligne ne contient pas de bombe. Un raisonnement par l'absurde le prouve
si elle en contient une alors la deuxième ligne ne peut pas en contenir (sinon les 1 sont faux) donc la troisième ligne a une bombe (sinon le 3 est faux) et par consequent pas de bombe en face du premier 1
Manu
Niveau 1
Niveau 1
Messages : 2
Enregistré le : dim. 06 juil. 2008 19:09
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#12

Message par Manu »

Un autre exemple

Image

Dans le morceau
? ? ? ? ?
! 2 1 2 1

Pas de bombe au dessus du premier 2 , sinon impossible de compléter le tableau en respectant les infos.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#13

Message par timmalos »

Bravo:) Je n'ai jamais joué à ce jeu alors je laisse les speicialistes te répondre :wink:
genaille08
Niveau 4
Niveau 4
Messages : 93
Enregistré le : sam. 03 mai 2008 01:27
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#14

Message par genaille08 »

mais http://www.autoitscript.fr/forum/viewto ... ?f=3&t=145
et le demineur est un jeu donc pourquoi vous le laissez comme ça :?:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#15

Message par Tlem »

La différence est toute simple :
Dans ce cas précis, le programme dont il est question joue tout seul au démineur de Windows, et ne permet pas de tricher sur un jeu en ligne et donc de léser d'autres joueurs.
Il ne permet pas non plus de gagner quoi que ce soit en dehors de ce jeux qui est local !!!

Suite aux différents mails privés que j'ai reçu concernant la clôture de post en relation avec un bot, et les différents débats incessants concernant les scripts d'automations en rapport avec des jeux en ligne, je pense très sérieusement, à rajouter dans les règles l'exclusion de scripts en rapport direct avec un jeux quel qu'il soit. :evil:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#16

Message par timmalos »

Ca serait quand même dommage de ne pas différencier les jeux en locals des jeux en resaux.

Un jeu en local "botté" ne dérenge personne, mais si tu pense qu'il y aura après assez d'elements pour les malins pour qu'ils puissent reussir leur bot destiné à un jeu en réseau, alors je suis d'accord pour tout interdire, même si comme toujours 2 - 3 "emmerdeurs" pourissent la vie au plus grand nombre...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Script jouant au démineur

#17

Message par Tlem »

timmalos a écrit :mais si tu pense qu'il y aura après assez d'elements pour les malins pour qu'ils puissent reussir leur bot destiné à un jeu en réseau
Le problème n'est pas là.
Chacun est libre de faire ce qu'il veut (Y compris les Bots et même d'essayer d'infiltrer le KGB ou la CIA :P).

La seule chose que je demande, c'est de poser les questions de telle manière qu'on ne puisse faire la corrélation avec les lignes de code en question et le développement d'un script malveillant ou assimilé à un bot de jeux en réseau.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre