Na verdade, não é bem uma IA, tá mais para burlar o jogo. Tipo, tem um jogo na net que para joga-lo você precisa formar palavras, dadas 5 letras. O jogo aceita você digitar pelo teclado. É o seguinte, eu fiz um pequeno teste, usando a classe Robot, e dá para “burlar”.
O que eu não estou conseguindo fazer:
1-A primeira coisa que o programa vai fazer é pegar 5 letras digitadas pelo usuário (as cinco que o jogo informar). Porém, eu fiz um teste para pegar essas letras, e o programa acaba antes do usuário digitar, como faço para o programa esperar que o usuário digite?
2-Só quero que o programa pare de rodar quando o usuário teclar “ESC”, ae o programa finaliza, caso contrário ele continua rodando. Isso faz parte da questão “1” se for ver…
–> Se possivel, colocar um código exemplo da parte do usuário digitar 5 letras…tipo, não tem lugar para digitar as letras, o programa tá rodando, o usuário digita, o programa pega…isso que quero.
[color=blue]
Na verdade, só fiz o teste para ver se o Robot funcionava…mas quando tentei colocar algo como:[/color]
public void keyPressed(KeyEvent evt){
letters[0] = evt.getKeyCode();
letters[1] = evt.getKeyCode();
letters[2] = evt.getKeyCode();
letters[4] = evt.getKeyCode();
}
[color=blue]
Isso não está mto certo xD
Esse seria o teste que fiz, mas dps vou melhorar…[/color]
Que eu saiba, o robot só funciona no próprio programa que ele é criado.
Se quer fazer algo que interaja com um programa externo, terá que usar C++, mais ou menos como eu faço no jogador de bejeweled: http://vinigodoy.wordpress.com/meus-jogos
J
JobaDiniz
ViniGodoy…eu tentei testar esse jogo seu e sempre dá: “jogo nao encontrado”
porém, não é bem “burlar”…como o jogo se joga com o teclado, eu faço o robot dar um alt+tab para ir na página do jogo, e faço ele apertar teclas…e funciona sim…
xD
ViniGodoy
Estranho, aqui o jogador de bejeweled funcionou.
Você deixou a aplicação visivel, conforme dizia as explicações do site?
É que se vc deixar o aplicativo na frente, aí não funciona mesmo, pq ele usa screenshot para ler a tela.
Você terá que ter duas threads no seu programa. Uma delas vai escutar os eventos e adicionar a tecla digitada numa classe. Quando chegar em 5 letras, essa classe deve dar um “notifyAll()”.
A outra thread estará dormindo (com um comando wait()) esperando pelas 5 letras. Ela acorda assim que receber o notifyAll().
" A outra thread estará dormindo (com um comando wait()) esperando pelas 5 letras. Ela acorda assim que receber o notifyAll()."
vê se eu entendi: e nessa thread é que estará todo o funcionamento do robot?
Você usa um screenshot, tipo printscreen, para ler o “tabuleiro” do jogo? o.O’
ViniGodoy
O funcionamento do Robot estará dividido na thread de leitura e na outra, que fará a escrita. Por isso é bom sincronizar o acesso ao robot também.
Ou para a thread de leitura quando estiver fazendo a escrita.
É isso mesmo. A aplicação precisa “ver” a tela tanto quanto você.
E também irá controlar seu mouse, para poder clicar nos diamantes certos.
Veja lá, é impressionante como joga rápido e certo.
J
JobaDiniz
ViniGodoy:
É isso mesmo. A aplicação precisa “ver” a tela tanto quanto você.
E também irá controlar seu mouse, para poder clicar nos diamantes certos.
Veja lá, é impressionante como joga rápido e certo.
é…eu não estava deixando o jogo visivel…mas impressionante mesmo é oq vc fez…tenho nem idéia do que utilizou para manipular o screenshot…mto bom!
J
JobaDiniz
[color=blue]
Bom, dei uma estudada no tuto que foi passado, e já vou tentar implementar alguma coisa…
Agora o problema volta a ser o que tinha^^’
Como pegar as letras digitadas…
[/color]
publicclassManageThreads{privatechar[]letras;privatebooleanuserTime=true;publicsynchronizedvoidpegaLetras(){while(userTime){try{wait();}catch(InterruptedExceptione){}}/*AQUI QUERO PEGAR AS 5 LETRAS * DIGITADAS PELO USUÁRIO E * GUARDA-LAS NO "char[] letras" */userTime=true;notifyAll();(...)
J
JobaDiniz
[color=blue]
Bom, eu coloquei um JOptionPane.showInputDialog para pegar as letras, porém ele nunca aparece…alguém sabe pq?
Como o código não é muito pequeno, então coloquei no “pastela”…tem 4 classes…
Código: http://paste.la/2553
[/color]