Java peut-il lire ce qui se passe dans un jeu basé sur Adobe Flash?


Tout simplement comme le titre l'indique, est-il possible pour Java de lire ce qui se passe dans un jeu Flash basé sur un navigateur Web?

Par exemple: Pourrais-je faire un programme Java qui pourrait jouer FarmVille pour moi en lisant ce qui se passe actuellement et prendre des décisions basées sur un ensemble d'actions prédéterminé?

Author: Accendi, 2013-04-04

3 answers

FarmVille ne publie aucune sorte d'API, et vous ne pourrez pas accéder à la RAM allouée au lecteur Flash (à ma connaissance), donc votre seul véritable plan d'action est d'analyser l'écran et d'automatiser la saisie. En d'autres termes, il n'y a pas de farmville.getUnplowedCells() pré-écrit à utiliser, mais vous pouvez écrire un programme qui prend des captures d'écran, les analyse pour trouver les cellules non bloquées, puis génère l'entrée souris/clavier qui ferait que votre personnage labourerait ses cellules non bloquées. La classe Robot peut être utilisé pour ce genre de programmation.

Cela prendrait beaucoup de temps et ne vaudrait probablement pas la peine. De plus, comme effet secondaire, cela "prendrait le contrôle" de votre souris et de votre clavier et vous empêcherait d'utiliser votre ordinateur normalement. Cependant, ce problème peut être atténué en exécutant le programme sur une machine virtuelle.

 6
Author: Dan Passaro, 2013-04-12 00:20:47

Si votre objectif est de créer un bot pour FarmVille, vous vous dirigez dans le mauvais sens. Gardez à l'esprit: c'est jeu en LIGNE. Donc, vous n'avez pas besoin de lire l'état du client flash, ce sera beaucoup mieux, pour lire les paquets entrants, vous n'avez pas besoin de simuler des événements souris/clavier dans swf - créez simplement des paquets corrects, en décrivant vos actions dans le jeu. Je vous recommande donc d'agir comme ceci:

1) Écrivez un renifleur en Java (c'est assez facile, car vous devez en écrire un simple, pas un outil ultime, comme Wireshark).

2) Utilisez l'analytique de la demande (comme Firebug de Firefox) pour attraper certains paquets de votre jeu. En les lisant, vous pouvez récupérer toutes les informations, ce dont vous avez besoin: en-têtes de paquets, encodage des actions de jeu, etc.

3) Code logique dans votre programme Java: lire les paquets de jeu entrants et exécuter des actions, envoyer des demandes.

4) Définissez les options de l'agent utilisateur de votre objet de connexion similaires à un navigateur populaire (si vous refusez de le faire, le serveur de jeu peut ignorer votre demande).

C'est tout. Rappelez-vous: un robot de jeu n'est pas un logiciel de reconnaissance d'image, c'est juste un autre client de jeu, avec une autre interface graphique et une autre logique.

P.S. Si je vous ai mal compris, et que votre objectif est de créer une page Web avec flash et applet, qui communiquent entre eux, vous devez utiliser JavaScript comme médiateur entre eux. Flash appelle JS en utilisant ExternalInterface.appel, JS appelle applet et vice versa.

 4
Author: JustLogin, 2013-04-05 07:46:29

Non, il n'y a pas d'implémentation pour un pont Java-Flash qui autorise quelque chose de plus direct que IPC. Votre meilleur pari est la décompilation (qui nécessiterait probablement la désobfuscation) du swf et l'interaction via des mécanismes IPC communs.

Vous pouvez également aborder cela en utilisant une approche différente en reconnaissant les éléments à l'écran par leurs couleurs de pixels, pour cela vous pouvez utiliser Java Robot API qui vous donne accès au clavier, à la souris et à la vidéo. Depuis FarmVille est un jeu 2D, la reconnaissance des éléments à l'écran devrait être assez simple-effectuer une comparaison d'image, ou une comparaison d'image partielle (juste les bordures de l'image ou une partie représentative) pour augmenter la vitesse.

Mis à part, tricher dans les jeux en ligne n'est pas une bonne chose à faire et vous pouvez probablement trouver des activités plus productives étant donné que vous êtes assez intelligent pour créer un logiciel qui fonctionne.

 3
Author: Ben Barkay, 2013-04-05 04:26:44