while 1
if CHKIMG("gazou/A.bmp",-1,,,,) > 0 then break
wend

で画面上にAという画像は認識した後、
その少し左隣にあるBという画像を認識したいのですが上手くいきません

while 1
if CHKIMG("gazou/B.bmp",-1,G_IMG_X-24,G_IMG_Y-7,G_IMG_X-1,G_IMG_Y+24) > 0 then break
wend

という感じでやったらループから帰ってこなくなりました

座標を
G_IMG_X-24,G_IMG_Y-7,G_IMG_X-1,G_IMG_Y+24
から普通の数字の組み合わせにしたらちゃんと認識できたので
この書き方が間違っているというのはわかるんですが、
どうしてもAの画像の座標から左にずれたこの位置を指定したいのです。
ですが自分はこの書き方以外知らないのです・・・

Aの画像を認識した後に、
そのAの画像があった座標から(X-27,Y-7,X-1,Y+24)ほどずれた位置を指定して
その範囲にB画像があるかどうか確かめるということをするには
どうすればいいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ChkImg関数の中でG_IMG_XやYを使うのは、まずそうな予感がします。

内部的に、ChkImg関数を実行した途端、特殊変数が消されてしまうような気がするからです。

なので、画像Aが見つかったところで別の変数にG_IMG_XとYの値を取っておき、それを使うようにすれば動くでしょう。

//----------
//画像Aを待つループ
//----------
While True
  If ChkImg("gazou/A.bmp",-1) Then Break
Wend
//----------
//画像Aを見つけた座標を保存する
//----------
last_x=G_IMG_X
last_y=G_IMG_Y
//----------
//画像Bを待つループ
//----------
While True
  If ChkImg("gazou/B.bmp",-1,last_x-24,G_last_y-7,last_x-1,last_y+24) Then Break
Wend
    • good
    • 0
この回答へのお礼

そのやり方でやってみたら出来ました!

ありがとうございました!

お礼日時:2011/04/09 12:44

if CHKIMG("gazou/B.bmp",-1,(G_IMG_X-24),(G_IMG_Y-7),(G_IMG_X-1),(G_IMG_Y+24))



計算式を入れずに、括弧を付けて前もって計算した結果を入れてはだめですか?
当方、これで上手くいきました。
    • good
    • 0
この回答へのお礼

ううむ、試してみたのですが自分はうまくいきませんでした・・・
前もって計算した結果、というのは前にまた別の式が必要だったのでしょうか?

回答ありがとうございました

お礼日時:2011/04/09 12:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q世界史の西アジアの範囲

世界史の西アジアの範囲ってオリエントとイスラームのことですか?

Aベストアンサー

トルコとギリシャのボスポラス海峡を境にして、オリエントが始まります。
オリエント(日の出処)・オチデント(日の没処=西洋)はローマ時代からある分け方で、まだイスラム教(キリスト教も)は生まれていません。人種的・文化的な違いによりギリシャ・ローマ人を初めとする西洋人から見た分け方です。
その時代には、まだ西欧人にはアジアはありませんでした。

中世になると、イスラムとキリストの宗教戦争が激化します。西洋人はやはりボスポラス海峡より手前側は自分たちの地域だと意識しており、このときオリエント=イスラムになっていきました。この時代にはオリエント(イスラム)の先にアジアがあり、胡椒や絹などが生産されていることが知られてきました。

さらに大航海時代が始まります。大航海はもともとイスラムの地域を通らずに、アジアに行ければ貿易で儲けることができると考えられて始まりました。
この時代、イスラムとアジアは同一ではなく、またアジアもインド・タイ・インドネシアあたりまでの地域を指しました。

さらに植民地帝国主義の時代を迎えます。イスラムもアジアも帝国の支配下に置かれ、さらには中国・日本・朝鮮まで、西洋諸国は迫ってきました。
この時代の意識として、もともとのオチデント=西洋、以外はすべて植民地といってもいい状態になりました。
そこで植民地の地域としてアフリカ・オリエントと分け方ができたのです。
しかし、オリエントというのは西洋人とって憧れの響き(日本人の「欧米か!」と同じ)がありますので、自分たちより格下の植民地を現すの不適当であり、また当時の最大の帝国、イギリスの植民地がインドにあったことから、アジア=植民地=西洋でないところ(ボスポラス以東)を現すようになりました。またオリエント=東側ということからイースト(東)という言い方もあります。
この呼び方により、現トルコから
ミドルイースト(中近東)
イースト(インドなどのアジア、西アジア)
ファーイースト(遠いアジア、日本を含む東アジア)
と呼ぶ言い方もありますが、すべて西洋人からみればアジアです。

あくまでも西洋からみた分け方ですので、日本人の感覚では中近東とインドと日本・中国がアジアでくくられるのは違和感があります。
そこで、西アジア・東アジアという言い方が出てきたのです。
東アジアは、漢字文化圏と重なります。(中国・朝鮮・日本・ベトナムなど)
西アジアは、基本的にタイ・インドネシアあたりからインドまでですが、ここはイスラム圏を多く含みますので、西洋(ウエスト)と対比する場合は、中近東まで含め
ウエスト=キリスト教(欧米):イースト=イスラム教(中近東と西アジア)
とすることも有ります。
この場合は、厳密な地理よりも、宗教的な対比になりますので、西洋にアメリカを含めることに注意してください。
このとき東アジアは、イスラムでもキリストでもない地域となります。

世界史はすべて欧米人の視点で書かれていますので、日本人の感覚からすれば不思議に見え、また地域が一定になりません。基本的に西洋でなければアジア(アフリカを除く)で、その中にイスラム文化とそうでない文化があるので、西アジア・東アジアと分けるのです。

トルコとギリシャのボスポラス海峡を境にして、オリエントが始まります。
オリエント(日の出処)・オチデント(日の没処=西洋)はローマ時代からある分け方で、まだイスラム教(キリスト教も)は生まれていません。人種的・文化的な違いによりギリシャ・ローマ人を初めとする西洋人から見た分け方です。
その時代には、まだ西欧人にはアジアはありませんでした。

中世になると、イスラムとキリストの宗教戦争が激化します。西洋人はやはりボスポラス海峡より手前側は自分たちの地域だと意識しており、この...続きを読む

QWHILE (CHKIMG(”A.bmp”)=FALSE)←この終了条件を2個にするには

タイトルの画像Aが画面上に2個あったらループを終了させたいです。
WHILE (CHKIMG(”A.bmp”)=FALSE)のこの部分をどう変えればよいのでしょう?

あとチェッキングの画像透過率の指定で色無視で形で判断というのは
白黒で判断ってことなんですか?

Aベストアンサー

>環境というのはどのような情報
前回の質問では最低限の情報として書いてましたよね  UWSC と
他に書くとすれば 使ってるosが何なのか
使用しているバージョンはいくつなのかといったようなことです
質問内容によっては pcの型番がそういった情報に該当することもあります

質問する方は当人の話ですから分かってて当たり前ですが
回答する側には こいつ何言ってんだ としか思いません

私の場合も前回は uwscと書かれていたので質問内容を確認・回答
今回はたまたまタイトルで前回と同じ人とすぐ分かったので回答しただけの話であって
今回のようなタイトルでいきなり前触れなく質問があったらきっと相手にしないでしょう

Q東南アジアはよく聞くけど北アジアって聞かないのはなぜ

ニュースなどでよく中央アジアや東アジアや東南アジアは聞くのですが、
北アジア、西アジア、南アジアなどはまったく聞きません。
これはどうしてなのでしょうか?
また東アジアとは具体的にどの範囲なのでしょうか?
日本は含まれるのでしょうか?中国は?ロシアは?
よろしくお願いします。

Aベストアンサー

北はロシアしかないです。
朝鮮半島、ロシア極東部、中国東北部、日本のことを
北東アジアと言うことはありますが。
東アジアは日韓中(台湾香港を含む)。
南アジアはインド、スリランカ、モルジブのことを言います。
これにバングラデシュ、パキスタン、アフガニスタン、
ネパール、ブータンを加えることがあります。
西アジアは一般的には中近東と呼ばれていますね。
日本では西南アジア、アジア南西部という言い方をする
ことのほうが多いと思います。
こういうことはGoogleやウィキペディアで調べるとヒントがいっぱい見つかりますよ。

QCプログラムの条件文  if,else if ,elseについて教えてください。

 こんにちは。課題でどうしても解らないところがあるので教えてください。
 次のプログラムは一桁の数(0~9)が偶数(EVEN)か奇数(ODD)かを表示するものです。

 #include <stdio.h>

main() {
int num;
printf("please enter a number[0~9]:");
scanf("%d",&num);
if (num % 2 ==0)
printf("%d is an EVEN. \n", num);
else
printf("%d is an ODD. \n", num);
}
というプログラムをコンパイルして実行すると、ちゃんと実行されるのですが、10以上の数や負数を入力しても動作してしまうんです。

 そこで0~9の範囲以外の数が入力されていないかを確認して、その場合を偶数、奇数の判断や表示をせず、エラーメッセージだけを表示して終了するプログラムに書き換えなくてはならないのですが、まず
 (1)判断する条件式(変数numの内容が0~9の範囲にあるか)で、num >= 0 && num <= 9 をどこに入れればいいか。
 (2)please enter a number[0~9]: 8
8 is an EVEN.  (←例えば8を入れると普通こうなるのですが)
  please enter a number[0~9]:12
  ERROR:12 is in out of range!!  (←0~9以外ののものだったら、この様にエラー表示にしたいのです。

 私が考えたプログラムは
 #include <stdio.h>

main() {
int num;
printf("please enter a number[0~9]:");
scanf("%d",&num);
if (num % 2 ==0)
printf("%d is an EVEN. \n", num);
if else
printf("%d is an ODD. \n", num);
else(num >= 0 && num <= 9)
printf("ERROR:%d is in out of range!! \n",num);

}
という風に考えたのですがコンパイルできません。プログラミング初心者なので、書いている内容も解りにくいんですが、どうかよろしくお願いします。

 こんにちは。課題でどうしても解らないところがあるので教えてください。
 次のプログラムは一桁の数(0~9)が偶数(EVEN)か奇数(ODD)かを表示するものです。

 #include <stdio.h>

main() {
int num;
printf("please enter a number[0~9]:");
scanf("%d",&num);
if (num % 2 ==0)
printf("%d is an EVEN. \n", num);
else
printf("%d is an ODD. \n", num);
}
というプログラムをコンパイルして実行すると、ちゃんと実行されるのですが、10以上の数や負数を入...続きを読む

Aベストアンサー

コンパイルエラーが出ていたと思います。エラーになんて書いてあったか読みましたか?どこの行でエラーになっているかコンパイラが教えてくれますよ。

さて、コンパイルが通らない原因ですが、

printf("%d is an EVEN. \n", num);
if else
printf("%d is an ODD. \n", num);

犯人はこの、if else です。書くなら else if にしましょう。

しかし、コンパイルが通ってもこのままではプログラムは希望通りには動きません。なぜなら、エラーチェックを入れる部分が拙いからです。

エラーチェックは出来る限り前に持ってきましょう。エラーチェックが済んだ後で正常系の処理に進むのが定石です。それに、
else(num >= 0 && num <= 9)
も拙いですね。

私なら、

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int num;
printf("please enter a number[0~9]:");
scanf("%d",&num);

/* エラーチェック:0~9以外の数字が入力されたら
 エラーメッセージを出してプログラムを終了する。
*/
if( (num < 0) || (9 < num) ){
printf("ERROR:%d is in out of range!! \n",num);
exit( EXIT_FAILURE );
}

/* 以下、正常系の処理を続ける。*/
if(0 == (num % 2))
printf("%d is an EVEN. \n", num);
else
printf("%d is an ODD. \n", num);

return 0;
}

コンパイルエラーが出ていたと思います。エラーになんて書いてあったか読みましたか?どこの行でエラーになっているかコンパイラが教えてくれますよ。

さて、コンパイルが通らない原因ですが、

printf("%d is an EVEN. \n", num);
if else
printf("%d is an ODD. \n", num);

犯人はこの、if else です。書くなら else if にしましょう。

しかし、コンパイルが通ってもこのままではプログラムは希望通りには動きません。なぜなら、エラーチェックを入れる部分が拙いからです。

エラーチェックは出...続きを読む

Q北の核兵器の被爆範囲

 北朝鮮が核ミサイルを作り、外交カードとして利用できるようになったとしても、東アジアの中で有効なのでしょうか?チェルノブイリからの放射性物質はヨーロッパやアジアにかけて広い範囲に降り注いだと聞きました。ならば、例えば朝鮮半島から日本列島に撃った場合半島も被爆範囲となり、北も撃つわけにいかないと思います。それとも、ミサイルの核弾頭の場合被爆範囲は都市一つ程度で収まるものなのでしょうか?

Aベストアンサー

http://www004.upp.so-net.ne.jp/weapon/nuclear.htm
核兵器の威力と言っても、様々な効果があります。
まず一番最初に影響を及ぼすのは爆風による被害です。
この爆風による被害は一定の範囲しか及ぼしません。
続いて放射線や放射能、これもある一定の距離までしか及ぼしません。

チェルノブリイの時の放射線被曝の時は核爆発でないです。
純粋に放射能が漏れたので被害が広がったのです。
核爆発の場合には、核燃料の殆どがエネルギーに変わっているので放射能自体は放射能漏れよりも少ないです。
もちろん、チェルノブリイの時の被害でヨーロッパやアジアにかけて広い範囲に影響を及ぼしたのは事実です。
でも、被害はどうだったのでしょうか?
ガンによる死亡率が10倍から20倍に跳ね上がったというニュースが出たでしょうか?
核をおそれることは正しいことです。
でも、あまり心配しすぎるのも北朝鮮の戦略にはめられる危険性があります。
敢えて、黙視しているだけかもしれないですがミサイルを撃ち込むだけの能力があると言うことは別の何かを撃ち込めると言うことです。
その別の何かとは貧者の核爆弾と言われているものです。
サンプルさえあれば、誰でも簡単に培養できてお手軽にばらまくことの出来る細菌兵器。
例えば、炭疽菌や天然痘などです。
これらは、日本国内において絶滅しています。
でも、これらを作為的にばらまかれるとワクチンの手配が間に合うのか?
大きく広がって自分の国に蔓延してもワクチンさえあれば被害が及ばないので核兵器よりも使い勝手がよいです。

http://www004.upp.so-net.ne.jp/weapon/nuclear.htm
核兵器の威力と言っても、様々な効果があります。
まず一番最初に影響を及ぼすのは爆風による被害です。
この爆風による被害は一定の範囲しか及ぼしません。
続いて放射線や放射能、これもある一定の距離までしか及ぼしません。

チェルノブリイの時の放射線被曝の時は核爆発でないです。
純粋に放射能が漏れたので被害が広がったのです。
核爆発の場合には、核燃料の殆どがエネルギーに変わっているので放射能自体は放射能漏れよりも少ないです。
も...続きを読む

QUWSCの画像認識でのコードがよくわかりません。

UWSCについて質問があります。
画像認識での簡単なマクロを組めるようになったので
同じ進行で平行処理をやってみたいのですがどのようにコードを組めばいいのかわかりません。

やってみたいことは
ACW(GETID(&quot;テキスト1.txt - メモ帳&quot;,&quot;Notepad&quot;),4,2,640,683,0)
ACW(GETID(&quot;テキスト2 ドキュメント (4).txt - メモ帳&quot;,&quot;Notepad&quot;),641,0,637,680,0)

この二つのファイル(サイズや座標を変えず)にtestAと1回打ち(testAの画像をキャプした画像A)次にtestB(testBをキャプした画像はB.bmp)と打ってみたいです。
一つのコードは組みあがったのですが画像2個認識したら次の構文に移るみたいにしてみたいのですがサンプルとしてのコードをお教えください

一応サンプルコードみながらマクロは組みあがって一つの窓でゲームを動作させるのには問題ないのですが
WHILE (CHKIMG(&quot;初期の画面.bmp&quot;)=FALSE)//開始画面
IFB CHKIMG( &quot;A.bmp&quot;)
y=G_IMG_Y //
BTN(LEFT, CLICK, x+2, y+2, 80)
sleep(0.2)
endif
ELSEIF (CHKIMG(&quot;B.bmp&quot;)=TRUE) THEN
x=G_IMG_X
y=G_IMG_Y
BTN(LEFT, CLICK, x+2, y+2, 80)
sleep(1)
endif
WEND
WHILE (CHKIMG(&quot;B.bmp&quot;)=FALSE)~WEND//次の戦闘画面
のような構文で数珠繋ぎにして進行させているので片方の窓が置いてけぼりで止まっちゃうので同時進行させたいので、初心者でも分かるようなご教示お願いします。

UWSCについて質問があります。
画像認識での簡単なマクロを組めるようになったので
同じ進行で平行処理をやってみたいのですがどのようにコードを組めばいいのかわかりません。

やってみたいことは
ACW(GETID(&quot;テキスト1.txt - メモ帳&quot;,&quot;Notepad&quot;),4,2,640,683,0)
ACW(GETID(&quot;テキスト2 ドキュメント (4).txt - メモ帳&quot;,&quot;Notepad&quot;),641,0,637,680,0)

この二つのファイル(サイズや座標を変えず)にtestAと1回打ち(testAの画像をキャプした画像A)次にtestB...続きを読む

Aベストアンサー

コピーしすぎて間違えてました
 >WHILE (CHKIMG(”A.bmp")=FALSE)//開始画面   ここから流れ2
 WHILE (CHKIMG(”B.bmp")=FALSE)//開始画面   ここから流れ2
です

Q小アジアの場所が検索できなくて、、

すみません、なるべく自分で検索するように
しているのですが、

「小アジア」の場所が検索できません。
小アジアの場所の範囲が記されているページの
URLを教えてください。

よろしくお願いします。

Aベストアンサー

小アジアはトルコ(アナトリア地方)ですから参考サイトが良くわかると思います。

加工サンプル と書いてある所をクリックすると地図が出ます。


http://anadolu.areastudy.net/link.html#area

参考URL:http://anadolu.areastudy.net/dagit.html

Qfor next文、do while文、if文をまとめる方法

A10からA12が空白であれば、ランダムにセルを選択して、
それぞれのセルにa,b,cを入力するコードを作りました。
しかし、3つのセルに条件を指定しただけで、とてもコードが長くなってしまいます。
もっと短くまとめる方法は無いのでしょうか。
宜しくお願いします。

Sub test()
Dim d As Integer, e As Integer, f As Integer, i As Integer

Randomize
For i = 10 To 12
Do While Cells(i, 1).Value = ""
d = Int((12 - 10 + 1) * Rnd + 10)
If Cells(d, 1) = "" Then
Cells(d, 1) = "a"
Exit For
End If
Loop
Next

For i = 10 To 12
Do While Cells(i, 1).Value = ""
e = Int((12 - 10 + 1) * Rnd + 10)
If Cells(e, 1) = "" Then
Cells(e, 1) = "b"
Exit For
End If
Loop
Next

For i = 10 To 12
Do While Cells(i, 1).Value = ""
f = Int((12 - 10 + 1) * Rnd + 10)
If Cells(f, 1) = "" Then
Cells(f, 1) = "c"
Exit For
End If
Loop
Next
End Sub

A10からA12が空白であれば、ランダムにセルを選択して、
それぞれのセルにa,b,cを入力するコードを作りました。
しかし、3つのセルに条件を指定しただけで、とてもコードが長くなってしまいます。
もっと短くまとめる方法は無いのでしょうか。
宜しくお願いします。

Sub test()
Dim d As Integer, e As Integer, f As Integer, i As Integer

Randomize
For i = 10 To 12
Do While Cells(i, 1).Value = ""
d = Int((12 - 10 + 1) * Rnd + 10)
If Cells(d...続きを読む

Aベストアンサー

以下のようにしてください。
Sub set_char が共通関数になっています。
------------------------------------
Sub test()
set_char ("a")
set_char ("b")
set_char ("c")
End Sub

Sub set_char(char As String)
Dim e As Integer, i As Integer
Randomize
For i = 10 To 12
Do While Cells(i, 1).Value = ""
e = Int((12 - 10 + 1) * Rnd + 10)
If Cells(e, 1) = "" Then
Cells(e, 1) = char
Exit For
End If
Loop
Next
End Sub
--------------------------------

以下のようにしてください。
Sub set_char が共通関数になっています。
------------------------------------
Sub test()
set_char ("a")
set_char ("b")
set_char ("c")
End Sub

Sub set_char(char As String)
Dim e As Integer, i As Integer
Randomize
For i = 10 To 12
Do While Cells(i, 1).Value = ""
e = Int((12 - 10 + 1) * Rnd + 10)
If Cells(e, 1) = "" Then
Cells(e, 1) = char
Exit For
End If
Loop
Next
End Sub...続きを読む

Qマイレージでの「アジア」ってどこまで?

地理に疎いので質問させて下さい。
ユナイテッドとノースウェストのマイレージがたまって各HPを
調べると日本ーアジアのエコノミー航空券が今のマイルで貰えそう
です。
HPにはアジアのどの範囲かという記載はありませんでした。
この「アジア」というのはどこまでを指しているのでしょうか?
中国・香港・韓国・台北以外はどこまで入るのかわかりません。
タイやインドネシア・マレーシア・ベトナム・フィリピンなどは
入らないのでしょうか?
詳しい方がいらっしゃいましたら教えていただけませんか?

Aベストアンサー

こちらこそ勝手に何度も回答してしまいましたが、お礼をお待ちすればよかったですね。

 >この例に無いアジアはどうなるのかが知りたいと思っています。
残念ながらこの例にない国(マレーシア、インドネシアなど)にはユナイテッド航空は就航していないということになります。

Quwscの使い方について。ifの前提条件

uwscマクロの組み方について質問です。

画像を認識してクリックするマクロを作っています。
Aという画像が表示されていたらBの場所をクリックするというマクロは組めました。
上記に加えて

Cという画像が表示されていたらこれを動作させる。
Cが画面上にない場合は動かさない。

という処理をするのは可能でしょうか?
現状uwscを二つ起動してuwsc1をuwsc2で停止させるというゴリ押しでやっていますが
あまりにスマートじゃないので質問させて頂きました。
よろしくお願いいたします。

Aベストアンサー

ifをネストして使用するか、条件をandもしくはorで繋ぎ複数条件にしてください

ネスト(入れ子)の場合
ifb 条件=true then
ifb 条件=true then
else
end ifb
else
end ifb

複数条件の場合
ifb 条件=True and 条件=True then
else
end ifb

※true、falseはご自身のプログラムに合わせてください


人気Q&Aランキング

おすすめ情報