2012-01-31 6 views
0

私はパズルを解決するためにJavaアプリケーションを構築しています。私が基本的にプログラムをコーディングする方法は、スクリーンショットを撮り、スクリーンショットでピクセルを見つけて、デスクトップ上のその位置にロボット機能を使ってマウスを移動させます。私は、スクリーンショットを取って、配列に格納し、適切な色のコンボがポップアップ表示されるまで配列を探索し、マウスを画面上のその位置に移動させるという理論を理解しています。コードダウン。誰かが知っている、またはスクリーンショットを撮るサンプルコードを一緒にノックすることができる場合は、配列(またはこの特定の用途にアレイが最良かどうかわからない記憶装置)に格納します。ピクセル位置まで移動し、配列をクリアすると、これは私がナットを運転しているので、私は驚くほど素晴らしいでしょう!Javaでカラーイベントに応答

これまでのところ、私が持っている:

  1. のpublic static無効メイン(文字列[] args)は例外{

    Robot robot = new Robot(); 
    
    { 
    private static Rectangle rectangle = new Rectangle(0, 0, 1075, 700); 
    
    { 
        BufferedImage image = r.createScreenCapture(rectangle); 
        search: for(int x = 0; x < rectangle.getWidth(); x++) 
        { 
         for(int y = 0; y < rectangle.getHeight(); y++) 
         { 
          if(image.getRGB(x, y) == Color.getRGB(195, 174, 196)) 
          { 
           Robot.mouseMove(x, y); 
           break search; 
          } 
         } 
        } 
    } 
    

    }

    を投げる私は3つのエラーを取得しています

    不正な式の開始、以下のコードセグメントでgetを指すインジケータ

    private static Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit()。getScreenSize());

  2. 発現の
  3. 不正スタート、

    プライベート静的四角形矩形以下のコードセグメントの寸法を指すインジケータ=新しいRectangle(Toolkit.getDefaultToolkit()getScreenSize()。)。

  4. ;矩形の長方形を指す予期されるインジケータ

    プライベートスタティック矩形矩形=新しいRectangle(Toolkit.getDefaultToolkit()。getScreenSize());

+2

* "サンプルコードをノックしてください" * SOはコード工場ではありません。あなたの最善の試みのSSCCEを投稿することで、何らかの努力をしてみませんか? –

+0

['Zoom'](http://stackoverflow.com/a/3742841/230513)はあなたの[sscce](http://sscce.org/)を構築するための出発点かもしれません。 – trashgod

+0

@ user1179522コードをコンパイルしようとしましたか? –

答えて

1

スクリーンショットとループを作成するのはそれほど難しくありませんが、 GraphicsDeviceのJavadocは正しい画面サイズを取得する方法を教えてくれます。

私があなたができるとは思わない唯一のことは、「カラーイベント」に対応することです。色が変わったときに画面をポーリングして確認することができます。

import java.awt.Color; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.image.BufferedImage; 

public class FindColor 
{ 
    private static Rectangle rectangle = new Rectangle(800, 600); 

    public static void main(String[] args) throws Exception 
    { 
     Robot r = new Robot(); 
     BufferedImage image = r.createScreenCapture(rectangle); 
     search: for(int x = 0; x < rectangle.getWidth(); x++) 
     { 
      for(int y = 0; y < rectangle.getHeight(); y++) 
      { 
       if(image.getRGB(x, y) == Color.BLACK.getRGB()) 
       { 
        r.mouseMove(x, y); 
        System.out.println("Found!"); 
        break search; 
       } 
      } 
     } 
    } 
} 

質問はあなたがそこにし、それをチェックしようとしている場合は、ディスクへのイメージを記述する必要はありません expanded-たので、-edit。 BufferedImageにはすでに個々のピクセルにアクセスする方法がありますので、ピクセルデータを配列に変換する必要はないと思います。

+0

しかし、イメージキャプチャの場合は、特定の色が正しいかどうかを調べることができます。マウスが最初に検出された明るい青色のピクセルをクリックしたければ、上記のコードを使って行うことができますか?色の変化に反応することによって、指定されたピクセルを見てショットを撮り続け、そのピクセルがプリセットカラーではなくなったときに、私の意味を理解すれば再びマウスをクリックすることになります。 – user1179522

+0

はい、任意の色を検索できます。あなたは単に "image.getRGB(x、y)== Color.BLACK.getRGB()"という行を修正する必要があります(私はただ黒を探しています)。色の変更については、同じ値で過去の値をチェックするか複雑で複雑な画像の差分を作成する(複雑さに応じて) – pimaster

+0

あなたはそれをとてもシンプルにしてくれます。 – user1179522

関連する問題