ここから本文です

自動化ソフトUWSCの条件分岐について質問です。

chi********さん

2017/12/1323:59:48

自動化ソフトUWSCの条件分岐について質問です。

CHKIMGを用いてランダムに表示される画像をクリックするスクリプトが書きたいです。画像は「S、A、B、C、D、E、G」の7種類で、最初のSと最後のG以外は出現確率も順番もランダムです。また、一度出現した画像は再び出現することはありません。つまり、最短でS→Gの2手、最長でS→A→B→C→D→E→Gの7手で一連の処理は終了します。そして、各処理の間では画面上のランダムな座標をクリックする処理がループします。
以上を踏まえて私が書き起こしたものが以下になります。この記述だと画像Aが現れてもランダムクリックのループから抜けません。どこを改善したらいいのでしょうか。アドバイスよろしくお願いします。

////////////////////////////////////////
rx = 50 + RANDOM(300)
ry = 50 + RANDOM(400)
x = G_IMG_X
y = G_IMG_Y

WHILE (CHKIMG("S.bmp")=FALSE)
SLEEP (0.1)
WEND
IFB CHKIMG("S.bmp")
BTN (LEFT, CLICK, x, y, 1000)
ENDIF

WHILE (CHKIMG("A.bmp")=FALSE) OR (CHKIMG("B.bmp")=FALSE) OR (CHKIMG("C.bmp")=FALSE) OR (CHKIMG("D.bmp")=FALSE) OR (CHKIMG("E.bmp")=FALSE)
BTN (LEFT, CLICK, rx, ry, 1000)
IFB CHKIMG("G.bmp")
BREAK
ENDIF
WEND
IFB CHKIMG("A.bmp") OR CHKIMG("B.bmp") OR CHKIMG("C.bmp") OR CHKIMG("D.bmp") OR CHKIMG("E.bmp")
BTN (LEFT, CLICK, x, y, 1000)
ENDIF

WHILE (CHKIMG("A.bmp")=FALSE) OR (CHKIMG("B.bmp")=FALSE) OR (CHKIMG("C.bmp")=FALSE) OR (CHKIMG("D.bmp")=FALSE) OR (CHKIMG("E.bmp")=FALSE)
BTN (LEFT, CLICK, rx, ry, 1000)
IFB CHKIMG("G.bmp")
BREAK
ENDIF
WEND
IFB CHKIMG("A.bmp") OR CHKIMG("B.bmp") OR CHKIMG("C.bmp") OR CHKIMG("D.bmp") OR CHKIMG("E.bmp")
BTN (LEFT, CLICK, x, y, 1000)
ENDIF

WHILE (CHKIMG("A.bmp")=FALSE) OR (CHKIMG("B.bmp")=FALSE) OR (CHKIMG("C.bmp")=FALSE) OR (CHKIMG("D.bmp")=FALSE) OR (CHKIMG("E.bmp")=FALSE)
BTN (LEFT, CLICK, rx, ry, 1000)
IFB CHKIMG("G.bmp")
BREAK
ENDIF
WEND
IFB CHKIMG("A.bmp") OR CHKIMG("B.bmp") OR CHKIMG("C.bmp") OR CHKIMG("D.bmp") OR CHKIMG("E.bmp")
BTN (LEFT, CLICK, x, y, 1000)
ENDIF

WHILE (CHKIMG("A.bmp")=FALSE) OR (CHKIMG("B.bmp")=FALSE) OR (CHKIMG("C.bmp")=FALSE) OR (CHKIMG("D.bmp")=FALSE) OR (CHKIMG("E.bmp")=FALSE)
BTN (LEFT, CLICK, rx, ry, 1000)
IFB CHKIMG("G.bmp")
BREAK
ENDIF
WEND
IFB CHKIMG("A.bmp") OR CHKIMG("B.bmp") OR CHKIMG("C.bmp") OR CHKIMG("D.bmp") OR CHKIMG("E.bmp")
BTN (LEFT, CLICK, x, y, 1000)
ENDIF

WHILE (CHKIMG("A.bmp")=FALSE) OR (CHKIMG("B.bmp")=FALSE) OR (CHKIMG("C.bmp")=FALSE) OR (CHKIMG("D.bmp")=FALSE) OR (CHKIMG("E.bmp")=FALSE)
BTN (LEFT, CLICK, rx, ry, 1000)
IFB CHKIMG("G.bmp")
BREAK
ENDIF
WEND
IFB CHKIMG("A.bmp") OR CHKIMG("B.bmp") OR CHKIMG("C.bmp") OR CHKIMG("D.bmp") OR CHKIMG("E.bmp")
BTN (LEFT, CLICK, x, y, 1000)
ENDIF

WHILE (CHKIMG("G.bmp")=FALSE)
BTN (LEFT, CLICK, rx, ry, 1000)
WEND
IFB CHKIMG("G.bmp")
BTN (LEFT, CLICK, x, y, 1000)
ENDIF
////////////////////////////////////////

閲覧数:
104
回答数:
2
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

uso********さん

2017/12/1408:11:00

//私ならこう書く、という一例。//
Dim ci[]="A","B","C","D","E"

WHILE ! CHKIMG("S.bmp")
  Sleep(1/16)
WEND
BTN (LEFT, CLICK, G_IMG_X, G_IMG_Y, 1000)

WHILE ! CHKIMG("G.bmp")
  BTN(LEFT, CLICK, 50 + RANDOM(300), 50 + RANDOM(400), 1000)
  FOR i=0 TO LENGTH(ci)-1
    IFB CHKIMG(ci[i]+".bmp") Then
      BTN (LEFT, CLICK, G_IMG_X, G_IMG_Y, 1000)
    ENDIF
  NEXT
  Sleep(1/16)
WEND
BTN (LEFT, CLICK, G_IMG_X, G_IMG_Y, 1000)

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜1件/1件中

hos********さん

2017/12/1407:24:47

A~Eのチェックが冗長ですが
気にしないのならこんな感じで良い気がします。

CONST STATE_CHECK_S = 0
CONST STATE_CHECK_ABCDEG = 1
CONST STATE_END = 9
DIM STATE = STATE_CHECK_S

WHILE STATE <> STATE_END
IFB STATE = STATE_CHECK_S THEN
IFB CHKIMG("S.bmp") THEN
STATE = STATE_CHECK_ABCDEG
ELSE
SLEEP (0.1)
ENDIF
ELSE
IFB CHKIMG("G.bmp") THEN
BTN (LEFT, CLICK, x, y, 1000)
STATE = STATE_END
ELSEIF CHKIMG("A.bmp") OR CHKIMG("B.bmp") OR CHKIMG("C.bmp") OR CHKIMG("D.bmp") OR CHKIMG("E.bmp") THEN
BTN (LEFT, CLICK, x, y, 1000)
ELSE
BTN (LEFT, CLICK, rx, ry, 1000)
ENDIF
ENDIF
WEND

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる