Pergunta

Bots, como eles funcionam? Eles dizem o jogo de vídeo uma tecla foi pressionada ou o mouse foi clicado?

Se não há uma maneira de ter o seu programa de dizer outro programa uma tecla foi pressionada? Eu gostaria de fazer um programa de vencer algum jogo. Assim, quaisquer recursos ou exemplos são apreciados.

Update:? Então é uma maneira de teclas digitadas emular então o que são alguns métodos para fazer isso (em qualquer idioma)

Foi útil?

Solução

Eu escrevi um monte de bots em um momento ou outro (a partir de jogos Pogo para Yohoho enigma piratas). Para Windows, você geralmente vai ser ou o envio de eventos do Win32 para movimentos simulados de mouse, ou paródia as mensagens realmente baixo nível enviadas entre janelas quando o mouse é realmente clicado. Um lote de que realmente depende de como funciona o programa (ao aceitar a mensagem com as coordenadas, ou, no caso de Java, imediatamente lendo as coordenadas do mouse). A parte "automação" geralmente envolve a leitura da tela e escrever heurísticas ou algoritmos para determinar o estado, mas também pode ser tão agradável como packet sniffing (um monte de informações lá em implementações de poker pobres) ou como hacky como a leitura de locais de memória diretamente. Muito grande "campo", e mal documentadas, uma vez que é muito rentável e não é difícil de entrar.

Envio de entrada

C / C ++ (no Windows)

Para chaves, tente CodeProject:

http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx

e mensagens:

http://www.codeproject.com/KB/threads/sendmsg.aspx

Sua melhor aposta é aprender a enviar mensagens usando a API Win32, em seguida, usar algo como Spy ++ ou seus derivados para "engenharia reversa" como teclas pressionadas e movimentos do mouse são enviados para a janela.

Java

Java tem uma classe Robot incrivelmente portátil que é capaz de:

  1. Leia Pixels da tela.
  2. Controle do mouse.
  3. chaves de envio.

Eu daria um tiro que se você está procurando rápido e fácil.

Basic Logic

Esta é descrito em outro lugar na internet em profundidade, mas a maioria dos bots seguem um fluxo simples programa state-máquina. Você lê a tela (ou pacotes, ou memória), descobrir o que o "estado" você está na base em suas leituras e dados passados, fazer cálculos, e enviar a volta resultado para o programa.

A leitura da tela pode ser difícil, mas pode ser mais fácil se você considerar que um monte de vezes, existem alguns "sortudos" pixels em relação à janela que lhe dará uma idéia de qual estado o programa está em. o processo de encontrar esses pixels podem ser automatizados.

Outras dicas

Alguns programas (como os que moer para você em um MMORPG) são simplesmente emular teclas. Uma ferramenta para fazer isso é AutoIt .

Quanto bots que realmente jogam-se os jogos, eu tenho realmente não fez nada com eles, mas eu estou supondo que eles iriam usar algum tipo de conjunto predefinido de ações, talvez uma heurística, mas não é provável.

Há um par de tipos de bots. Pelo que eu me lembro quando eu costumava jogar CS (a muito, muito tempo atrás)

Alguns bots usar as bibliotecas do próprio aplicativo para inspecionar o ambiente (o mapa, onde os jogadores são etc ...) Os bots também usar a biblioteca para controlar o movimento. Eu duvido que haja muitas implementações bot que as mensagens de invocação do mouse para contar o jogo como mover etc ...

Alguns bots emular o protocolo de nível de aplicação (se é multi-jogador). Portanto, em outras palavras, o jogo não precisa mesmo de correr. Um bot pode executar em um jogo virtual.

Eu estou indo para ir contra o que um outro cartaz sugeriu: escrevendo um bot jogo é provavelmente um exercício mais valioso do que realmente jogar o jogo, e ser curioso sobre como eles funcionam é um bom sinal. :)

A maior falha neste conceito não é a entrada, mas a saída de jogo. Seu bot não pode simplesmente pressionar aleatoriamente chaves, ele precisa saber o que está "acontecendo". Muito poucos jogos permitem consultar esses dados, o que deixaria o seu bot para resolver um problema muito complicado -. Convertendo 60 quadros por segundo de dados visuais 2D em um espaço virtual

Existem actuially jogos lá fora, que não só permitem que os jogadores bot, mas incentivá-los. Abrir RTS é um daqueles mas também há outras mais simples como GUN-TACTYX e crobots que são bons pontos de partida.

Bots estará agindo como clientes para o jogo (servidor). Então, eles podem enviar dados apropriados apenas como um usuário pode enviar manualmente. O bot (cliente) será analisar os dados do servidor ( "alguém está prestes a ataque da esquerda"), et cetera. O cliente deve ser, então, capaz de calcular a melhor jogada e enviar os dados apropriados para o servidor para executá-lo.

Eu não tenho certeza se isso vai funcionar com todos os jogos.

Ele depende muito do jogo. Por exemplo eu fiz um bot para Travian (que é um jogo online), que usou o Internet Explorer ActiveX para automatizar movimentos. I worte a aplicação em C # e para obtê-lo para fazer coisas levou cerca de 30 minutos. É simples de métodos de compra sobre o ActiveX um torná-lo fazer coisas como preencher os campos de texto ou clicar nos botões. Para o login, por exemplo, eu usei o folowing:

var inputs = web.Document.GetElementsByTagName("input").
                        Cast<HtmlElement>();
var nume = inputs.First(h => h.GetAttribute("type") == "text");
var pass = inputs.First(h => h.GetAttribute("type") == "password");
var login = inputs.First(h => h.GetAttribute("type") == "image");
var form = web.Document.GetElementsByTagName("form")[0];

nume.SetAttribute("value", "user");
pass.SetAttribute("value", "pass");
login.InvokeMember("Click");

Para os jogos que são de desktop baseado coisas ficam mais complicadas. Windows permite para uma aplicação para enviar mensagens para outro aplicativo, então eu acho que você poderia usar isso para enviar mensagens para um jogo (embora wheather Isso funciona para jogos que usam DirectX para a entrada eu não sei)

Um bot como você descrevê-lo simplesmente emular teclas pressionadas e movimentos do mouse / cliques, então o jogo não pode dizer se um ser humano está jogando ou outro programa. Ele não teria que interagir com o jogo em tudo.

Você pode emular rato movimentos / cliques e entrada de teclado em Java com o classe Robot . Ele também permite tirar fotos da tela.

AutoIT é um grande idioma para fazer esse tipo de software. Mesmo que eu não tê-lo usado para bots construir, enviando cliques e chaves foi muito fácil.

O meu entendimento é que a maioria dos bots de jogos high-end usar chamadas de sistema para mapear-se em espaço de memória do cliente de jogo, fazer engenharia reversa seu layout e manipular diretamente variáveis ??internas do programa cliente. Essa é a maneira mais trabalho do que eu seria para apenas para se divertir.

Quando você diz "controlar um programa de" pensar sobre como os programas são controlados. A maioria aceita teclado / mouse entrada.

Se você escrever um programa para entrada de simular teclado / mouse, lá vai você.

Um corolário para isso seria que se um programa aceito argumentos passados ??através de uma caixa de entrada, escrever um programa para enviar argumentos, como se fossem enviados através de uma caixa de entrada.

Esta é a forma como todos os bots trabalhar. Espero que lança alguma luz para você!

Edit: Isto é como a grande maioria dos bots trabalho: -)

Para isso, você precisa saber de programação. No entanto, existem programas que permitem que você programar com meios visuais. Para eles, você não precisa ser capaz de programar. Um exemplo é o programa Kibor. Ele é projetado especificamente para os seus fins e tem um editor visual com o qual você pode criar bots com diagramas de blocos. Descrição do programa Kibor

tela Kibor

Tem muitas funções prontas para bots. Existe até um built-in módulo de reconhecimento de texto tela Kibor. Texto reconhecendo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top