CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Création d'un bot "simple"

expert]hydra
expert]hydra
Niveau 10
27 septembre 2009 à 23:01:44

Bonjour, voila, vous connaissez tous bomberman?

Bon y'a un équivalent sur le site forteresse >> bouboum(si vous voulez voir comment marche le jeu)

Et donc voila, la vraie question est :
est ce possible de créer un bot sur ce jeu sans que cela soit trop compliqué?

Petites informations sur le jeu:
-Bombe Rouge: Passe à travers tout sauf les murs noirs indestructibles
-Bombe Noir: Détruit maximum un bloc par coté(au max il peut détruire 4 blocs[haut, gauche, droite, bas])
-Mur noir: indestructible
-Bloc: destructible, peut donner des objets

En gros le bot ferait cela:
-détection des blocs
-détection des bombes rouges
-détection des bombes noirs
-détection des murs noirs
-détection des blocs
-détection des joueurs
-sait la puissance des bombes adversaires(on a tous une puissance de un au début, et elle augmente de 1 par un par "bonus de puissance ramassé)
-sait se balader
-sait jouer tout seul(c'est à dire il ramasse des blocs, il peut éventuellement tenter de tuer des joueurs si possible), ne meurt pas en général(donc il sait esquiver)
-ne fait pas d'erreur idiote(se met dans un coin, un joueur est tout proche, alors il se retrouve bloqué dans le coin par le joueur ennemi avec juste une bombe)
-détection de quel bonus il a(on peut ramasser des bonus/malus: vitesse/bombe rouges/ralenti/pose automatique..etc)
-...etc J'ai du en oublier mais pas grave

Bref, je disais simple mais heu... C'est pas trop complexe quand meme(si y'a un bloc de tel taille de tel couleur alors c'est un tel..etc)

Et donc j'aimerais savoir, est ce possible de le faire en C/C++? Ou alors il y a d'autres langages qui sont plus efficaces pour faire des bots?

Merci d'avance, au revoir.

expert]hydra
expert]hydra
Niveau 10
27 septembre 2009 à 23:46:31

Bon désolé du doublon(fonction edit, apparaît!)... -.-

Finalement, je recherche plus spécialement un tutorial sur les bots sur le langage c/c++.(enfin si, si vous en avez je suis d'accord.)
Par exemple, je viens de trouver un topic sur le sdz:
"récupérer la couleur d'un pixel"( http://www.siteduzero.com/forum-83-427254-p1-recuperer-la-couleur-d-un-pixel.html )

Mais je suis tellement crevé, je verrais demain. Si vous avez des informations, des idées/suggestions/critiques ou autres, je suis preneur. Merci. =O

dnob700
dnob700
Niveau 10
28 septembre 2009 à 00:51:10

Tout les langages sont bon pour faire ce genre de chose. C'est beaucoup plus facile si ton "bot" (on préfèrera parler d'IA) peut accéder directement au info sur le jeu auquel elle joue par des appels de fonctions (il y a justement un bomberman comme cela sur le sdz (y avait à la reflexion)). Si tu dois y accéder en lisant l'écran ça devient plus complexe car il y a des problème de synchronisation et en générale c'est une technique qui marche mal.

J'ai quelques exemple de programme comme cela pour des jeux flash simple, mais je te conseille de trouver un projet où tu as une API pour ton jeu.

expert]hydra
expert]hydra
Niveau 10
28 septembre 2009 à 16:38:46

Ok pour les langages.
Et heu oui, en effet, le travail semble tout de suite moins difficile si on accès à ces informations.(on a plus l'étape identification du terrain + où sont les ennemis)
De plus j'ai trouvé plein d'informations là en tapant bomberman sur le sdz, des pistes..etc Bref ça va bien me servir.

-Mais désolé d'insister, mais c'est vraiment une grosse différence de niveau de faire l'ia sans avoir directement l'info sur le jeu? (Et pour être franc, je vois pas trop comment faire...) En oubliant du moins temporairement le problème de synchronisation.(j'imagine tu parlais des gens quand ils lag qu'ils ont l'air de se "téléporter")
-Et aussi, donc tu veux dire que dans la plupart des jeux, on n'a pas moyen d'accéder aux informations directement du jeu? Aucun moyen d'y accéder? (simple curiosité, parce que je pense à ceux qui ont fait des ia de "fou"(bot cs/de fps...etc))

Et si j'oublie mon idée à la base qui était de pouvoir faire une ia sans avoir directement l'info sur le jeu, je passerais surement au "concours fini de Bombazéro"(qui a l'air bien intéressant) Après, si plus tard j'aimerais avoir d'autres jeux simples pour s'entrainer, je demanderais ici.

godrik
godrik
Niveau 30
28 septembre 2009 à 16:55:44

je pense que dnob parlait des jeu ou les gens analyse l'ecran pour obtenir des informations. Ils n'ont pas access au code interne du jeu parceque le bot tourne dans un processus separer du jeu et ne s'interface pas au moteur du jeu. Du coup c'est assez difficile parcequ'il faut arriver a reconstruire un modele de l'etat du jeu dans le corps du bot avant de faire le bot en lui meme.

expert]hydra
expert]hydra
Niveau 10
28 septembre 2009 à 17:56:14

Oui voila, c'est ce que je pensais, et donc j'avais bien compris ce qu'il avait dit.(merci pour l'éclaircissement)

Donc en faite, la question c'est comment faire pour faire ce modèle?

Parce que j'ai lu sur le sdz en gros à propos de Bombazéro:

"Renvoyé si vous passez une position qui ne contient pas un champion.
PAS_UN_ID = -8
"

Mais là c'est facile, on nous donne l'information sur un plateau. Mais imaginons que justement, je vois un terrain et j'aimerais savoir si cette case est un bloc/position d'un champion ou autre?(Je parle dans le cas où c'est Bomberman, donc il y a des cases)
Donc pour lire, on n'aurait pas le choix et faudrait lire la
couleur, la taille/forme..etc Mais comment faire cela?
(Genre on sait que la case est un carré et fait 10 pixels x 10 pixels et est toute verte)

PS: Désolé de m'être mal exprimé.

En gros, j'aimerais savoir comment avoir les informations sur un jeu par l'analyse de l'écran?

godrik
godrik
Niveau 30
28 septembre 2009 à 18:45:44

experthydra, pour cela il faut faire de l'analyse d'image.
Si tu veux etudier ca, je te propsoerait de ne pas commencer par analyser un jeu en temps reel, mais part faire de l'analyse d'image simple. Comme faire de la detection de contours par exemple. Cela devrait t'aider a comprendre comment ce genre de chsoe peuvent etre faite.

dnob700
dnob700
Niveau 10
28 septembre 2009 à 18:53:44

Tu commence par copier la fenêtre du jeu dans la mémoire de ton programme (il y a des fonctions pour ça dans win32 sous windows ou dans X11 sous linux), puis tu trouve un moyen de déterminer où sont les objets du jeu. Par exemple si tu cherche des carré rouge et que le fond est bleu, c'est facile, et peut-être que tu sais que ton personnage est toujours au centre. Puis tu détermine qu'est ce que tu veux faire pour jouer, et enfin tu émet cette commande (il y a aussi dans windows et linux des fonctions pour faire croire à un programme que la souris bouge ou qu'une touche est enfoncée). Mais le problème c'est que tu ne peut pas te dire que au coup précédant tu as appuyé sur "gauche" donc ton perso est un cran plus à gauche car peut-être que l'itération suivante est trop rapide et tu es encore dans la même frame, ou au contraire c'est trop lent et il est tombé dans un trou, etc. Et il n'y a pas vraiment de moyen simple de régler ce problème.

Là par exemple il y a une "IA" que j'ai écrit avec ce genre de méthode pour un petit jeu flash (c'est écrit avec X11 pour l'interfaçage) :
http://svn.quare.fr/viewvc/projets/trunk/Petits%20programmes/zanorg/zanorg.c?view=markup

C'est un exemple parlant car pour le jeu (l'url est dans la source) il faut trouver une balle dont la couleur est la même que celle du fond ... D'autre part, le jeu accélère au fur et à mesure, et à un moment mon programme est trop lent (alors qu'il est vraiment simple) pour réussir à jouer correctement. Alors qu'il y aurait beaucoup moins de problème si je pouvais accéder aux informations du jeu.

Au contraire, si tu as accès au information interne du jeu, généralement, ton programme est appelé une fois par frame et tu indique quelles sont les actions que tu veux faire. Non seulement tu as accès facilement à toutes les informations, mais en plus tu n'as pas de problème de synchronisation. Mais ça ne t'empêche pas d'avoir à comprendre quelles sont les mécaniques du jeu (même si tu y es aidé par l'interface de programmation). J'ai l'impression qu'il n'est plus possible d'accéder au projet du SDZ, mais tu peut regarder ça, c'est probablement bien plus dur, mais assez intéressant aussi : http://julian.togelius.com/mariocompetition2009/ (par contre, l'interface n'existe que pour le Java).

expert]hydra
expert]hydra
Niveau 10
28 septembre 2009 à 20:21:11

(Pour le concours BombaZéro, j'ai cherché(vite fait) et j'ai rien trouvé à part le Sujet, mais pas les résultats..etc Flute, au pire je demanderais sur le forum ou je chercherais plus en profondeur)

Donc finalement je vais faire comme vous me l'avez dit, d'abord faire ce concours, ensuite, j'en ferais surement d'autres, c'est-à-dire celui que tu m'as proposé, après je ferais l'analyse et irait +/- en profondeur et ensuite je m'attaquerais à Bomberman. Car là, je me rends compte, je pense que c'est trop se précipiter que d'aller directement faire ce que je voulais faire alors que j'ai pas (du tout?) le niveau.

Merci encore. Si j'ai des questions ou autres, j'hésiterais pas.

Sur ce, topic "résolu".

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment