Comment un programme de contrôle d'un autre programme Stack Overflow

Hier, tout en jouant des jeux vidéos j'ai commencé à penser joueur a fait des bots qui joueraient pour les gens et je me demandais comment ils fonctionnent? Est-ce qu'ils disent le jeu vidéo pression sur une touche ou la souris a été cliqué? Dans le cas contraire est-il un moyen d'avoir votre programme dire un autre programme pression sur une touche? Je sais que c'est un sujet assez dangereux pour que vous puissiez en dire autant que vous vous sentez à l'aise, même si son juste un aperçu de la façon dont fonctionne un robot. Je voudrais faire un projet de ce bien, où je tente de faire un programme pour battre le premier niveau de certains jeux. Donc, des ressources ou des exemples que vous êtes prêt à dire aux autres seraient appréciés.







Mise à jour: Il semble donc clair que l'une des principales façons de contrôler un autre programme est d'imiter les frappes, alors quelles sont les méthodes pour le faire (dans toutes les langues)?

a demandé le 23 juin '09 à 13h10

J'ai écrit un tas de bots à un moment ou un autre (des jeux Pogo à Yohoho Puzzle Pirates). Pour les fenêtres, vous allez généralement être soit l'envoi d'événements Win32 pour simuler les mouvements de la souris, ou usurper les messages réellement bas niveau envoyés entre les fenêtres lorsque la souris est effectivement cliqué. Beaucoup de cela dépend vraiment de la façon dont le programme réagit (en acceptant le message avec les coordonnées, ou, dans le cas de Java, la lecture immédiatement les coordonnées de la souris). La « automatisation » partie implique généralement la lecture des heuristiques d'écran et d'écriture ou d'algorithmes pour déterminer l'état, mais peut aussi être aussi agréable que reniflage de paquets (beaucoup d'informations là-bas dans les implémentations pauvres de poker) ou hacky que la lecture des emplacements de mémoire directement. Assez grand « champ », et mal documenté car il est assez rentable et pas difficile à prendre.

entrée Envoi

C / C ++ (sous Windows)

Pour les clés, essayez CodeProject:

Votre meilleur pari est d'apprendre à envoyer des messages en utilisant l'API Win32, puis utilisez quelque chose comme Spy ++ ou ses dérivés à « désosser » comment touches_appuyees et les mouvements de la souris sont envoyés à la fenêtre.

Java a une classe de robot incroyablement portable qui est capable de:







  1. Lire pixels de l'écran.
  2. Contrôle de la souris.
  3. Envoyer des clés.

Je donnerais un coup de feu si vous êtes à la recherche rapide et facile.

logique de base

Ceci est décrit ailleurs sur Internet en profondeur, mais la plupart des bots suivent simple flux de programme machine d'état. Vous avez lu l'écran (ou les paquets, ou mémoire), savoir ce que « l'état » vous êtes en fonction de vos lectures et des données passées, faire des calculs, et renvoyer le résultat sur le programme.

Lecture de l'écran peut être difficile, mais il peut être plus facile si l'on considère que beaucoup de fois, il y a quelques pixels « chanceux » par rapport à la fenêtre qui vous donnera une idée de quel état le programme est. Le processus de trouver ces pixels peut être automatisé.

répondu le 23 juin '09 à 13h18

Certains programmes (tels que ceux qui pour vous broyer dans un MMORPG) imitent simplement les frappes. Un outil pour le faire est AutoIt.

répondu le 23 juin '09 à 13h13

Il y a deux types de robots. D'après ce que je me souviens quand je jouais CS (il y a longtemps, très longtemps)

Certains bots utilisent les bibliothèques de l'application elle-même pour inspecter l'environnement (la carte, où les joueurs sont etc.) Les bots utilisent également la bibliothèque pour contrôler le mouvement. Je doute qu'il ya beaucoup d'implémentations de bots qui font appel à des messages de la souris pour dire au jeu comment se déplacer, etc.

Certains bots émulent le protocole de niveau d'application (si elle est multi-joueurs). En d'autres termes, le jeu n'a même pas besoin de courir. Un bot peut fonctionner dans un jeu virtuel.

Je vais à l'encontre de ce que l'autre affiche a suggéré: l'écriture d'un bot de jeu est sans doute un exercice plus précieux que fait jouer le jeu, et être curieux de savoir comment ils travaillent est un bon signe. )

Le plus grand défaut de ce concept est l'entrée, mais la sortie du jeu. Votre robot ne peut pas simplement appuyer sur les touches au hasard, il a besoin de savoir ce qui est « happening ». Très peu de jeux vous permettent d'interroger ces données qui laisserait votre bot pour résoudre un problème très délicat - Conversion de 60 images par seconde de données visuelles en 2D dans un espace virtuel.

Il y a actuially jeux là-bas qui permettent non seulement les joueurs de bot, mais les encourager. Ouvrir RTS est l'un de ceux mais ceux sont également plus simples comme GUN-TACTYX et crobots qui sont de bons points de départ.

répondu le 23 juin '09 à 13h21

Cela dépend beaucoup du jeu. Par exemple, je fait un bot pour Travian (qui est un jeu en ligne) qui a utilisé l'Internet Explorer activeX pour automatiser mouvements. Je Worte l'application c # et de lui faire faire des choses a pris environ 30 minutes. Il est simple d'appeler des méthodes sur le activeX un faire faire des choses comme remplir les champs de texte ou cliquez sur les boutons. Pour connexion par exemple i utilisé le folowing:

Pour les jeux qui sont choses basées bureau deviennent plus compliquées. Windows permet une aplication d'envoyer des messages à une autre application, donc je suppose que vous pouvez l'utiliser pour envoyer des messages à un jeu (bien que wheather cela fonctionne pour les jeux qui utilisent directX pour l'entrée je ne sais pas)

répondu le 23 juin '09 à 13h24







Articles Liés