UWSCって?

UWSCとは何?というところから説明しましょうか。 Vector 説明読んでダウンロードしてください。使い方は2つほどあります。

1つは操作を記録して、後でそれを実行する。これは毎日する同じ操作を1回記録すれば、以降はスクリプト実行するだけでいいのでお茶を飲んでゆっくりできます。

2つ目はスクリプトを自分で書いてそれを実行することです。クリックばかりのゲームの能力アップを自動ですれば楽ですよ。 以降は2つ目のスクリプトを自分で書くことについて説明してます。

基本スクリプト

まずはスクリプトの作成方法

「ファイル名.uws」ってファイルを作ってください。 “ファイル名"は"テスト"とか適当に決めてください。 ここでは「基本.uws」を作ったとして話を進めます。 基本.uwsをエディタで開いてください。 メモ帳なら基本.uwsをドラッグ&ドロップして開けます。

ちなみに私はxyzzyってエディタを使ってます。 xyzzy用のUWSCモードを作ったので公開しときます。(Ver4にちょっと対応)

UWSCモードダウンロード

uwsc-mode.lはsite-lispフォルダに、uwscはetcフォルダに入れてください。 siteinit.lとかに以下の文を追加してください。

; UWSC
(load-library "uwsc-mode")
(push '("\\.uws$" . uwsc-mode) *auto-mode-alist*)

ファイル全体をインデントと関数一覧表示を追加しておくといいかな。 私はC-F1とF12で登録してます。

; インデント
(set-function-bar-label #\C-F1 "インデント")
(global-set-key #\C-F1
#'(lambda ()
(interactive)
(indent-region (point-min) (point-max))))
; 関数一覧
(set-function-bar-label #\F12 "関数一覧")
(global-set-key #\F12 'list-function)

適当なつくりですが何もないよりまし程度にはなってます。 uwsc-mode.lの最初の方にある

&(defvar *uwsc-command* "D:/util/operate/uwsc/UWSC.exe")
(defvar *uwsc-help* "D:/util/operate/uwsc/uwsc.chm")

を自分の環境にあったように変更すると、C-c C-eで今開いてるファイルをUWSCで実行、 F1でUWSCのヘルプが見れます。便利!

とりあえずスクリプティング

基本.uwsを開いたら下記を記入

//この行はコメントで無視されます
MSGBOX("ようこそ!")

UWSCを起動して左端の「読込み」ボタンを押して基本.uwsを開く。 真ん中の「再生」ボタンを押すとメッセージウィンドウが表示されます。 「OK」ボタンを押すと終了します。 1行目のように「//」を書くとそこから行の終わりまでコメントになります。

基本.uws

便利な変数

変数とはなんだろう?説明は難しいですね。 そうですね~入れ物と思ってください。 ペットボトルにはお茶やジュースが入ります。 容器は変えずに中身だけ替えることができます。 とりあえずサンプル

変数 = 100
ペットボトル = "お茶"
MSGBOX("変数の中身は" + 変数 + "<#CR>" + "ペットボトルの中身は" + ペットボトル)
変数 = 200
ペットボトル = "コーラ"
MSGBOX("変数の中身は" + 変数 + "<#CR>" + "ペットボトルの中身は" + ペットボトル)

1行目は変数名「変数」に100を入れてます。 2行目は変数名「ペットボトル」にお茶を入れてます。 文字列(今回はお茶)を使うときはダブルクォーテーション「"」で囲みます。 3行目は変数の中身を表示

4行目は変数名「変数」の中身を200に変更。 5行目は変数名「ペットボトル」の中身をコーラに変更。 6行目は3行目と同じく変数の中身を表示。

「=」は変数に中身を入れるという意味で使用します。 通常の算数で使う「=」とは違うことを覚えてください。

変数1 変数2

変数はスクリプト、プログラムの基本要素です。とりあえず使えるようになっときましょう。 ちなみに変数にはスコープというのがあります。後で説明しますが、関数の使用に関係しています。

これがないとスクリプトじゃない!?制御構造

制御構造は非常に大事です。コレを理解してないと話しになりません。 とりあえずサンプル

Aさんのお金 = 100000
Bさんのお金 = 1000
MSGBOX("Aさんは金持ち?")
if (Aさんのお金 > 10000) then MSGBOX("金持ちです") else MSGBOX("貧乏です")
MSGBOX("Bさんは金持ち?")
if (Bさんのお金 > 10000) then MSGBOX("金持ちです") else MSGBOX("貧乏です")

1、2行目は変数に代入。 3、5行目は質問を表示。 4、6行目が制御構造の1つです。 お金が10000より多かったら金持ち、そうでないなら貧乏と表示するように場合分けしてます。 制御構造とはこのように実行するスクリプトを自動で切り替えてくれるものです。

制御構造1 制御構造2 制御構造3 制御構造4

制御構造にはいろいろなものがあります。それぞれ説明しましょう。

場合分けその1

if (変数 > 0) then MSGBOX("大きい") else MSGBOX("小さい")

変数が0より大きい時「大きい」と表示して、それ以外のとき「小さい」と表示。 日本語っぽくするなら

もし (変数が 0 より大きいなら) コレ実行 MSGBOX("大きい") そうでないなら MSGBOX("小さい")

場合分けその2

if (変数 > 0) then MSGBOX("大きい")

変数が0より大きい時「大きい」と表示して、それ以外のとき何もしない。

場合分けその3

ifb (変数 > 0)
    MSGBOX("大きい")
    MSGBOX("でかいね")
else
    MSGBOX("小さい")
    MSGBOX("チビだね")
endif

変数が0より大きい時「大きい」と表示した後「でかいね」と表示して、 それ以外のときは「小さい」と表示した後「チビだね」と表示。 場合分けその1その2は場合分けの後は1つの命令しか実行できないが、これは複数の命令を実行できる。 場合分けその1その2と同じ関係のelse以降を書かないバージョンもあります。 また続けて場合分けする時には次のようにかけます。

ifb (変数 > 10)
    MSGBOX("とっても大きい")
elseif (変数 > 0)
    MSGBOX("大きい")
else
    MSGBOX("小さい")
endif

コレは10より大きいと「とっても大きい」を表示し10以下で0より大きいと「大きい」と表示し、0以下の時は「小さい」と表示します。

指定回数繰り返す

for (変数 = 1) to 5 step 1
    MSGBOX(変数)
    MSGBOX("ふ~ん")
next

変数に1を入れて2,3行目を実行。 そのあと変数に1を足して再び2,3行目を実行。 ふたたび変数に1を足して2、3行目を実行という風に繰り返して 変数の値が5を超えたら終了。 この場合「1」「ふ~ん」「2」「ふ~ん」「3」「ふ~ん」「4」「ふ~ん」「5」「ふ~ん」と表示されます。 通常はstep 1のところは省略できます。 省略したら毎回変数に1を足します。毎回1づつ減っていくとか特別な場合にstep -1とかを書きます。 日本語っぽくするなら

繰り返し (変数を 1 からはじめる) 5 まで繰り返す 毎回 1 を足す
    MSGBOX(変数)
    MSGBOX("ふ~ん")
繰り返しに戻る

条件の間繰り返す

変数 = 5
while (変数 > 0)
    MSGBOX(変数)
    変数 = 変数 - 1
wend

1行目で変数を5に初期化。 2行目~5行目が制御構造です。 変数が0より大きい間繰り返します。 毎回変数の値を表示して、変数を1減らします。 この場合「5」「4」「3」「2」「1」と表示します。 日本語っぽくするなら

変数に 5 を入れる
次の間繰り返す (変数が 0 より大きい)
    MSGBOX(変数)
    変数を 1 減らす
繰り返しに戻る

条件まで繰り返す

変数 = 5
repeat
    MSGBOX(変数)
    変数 = 変数 - 1
until (変数 < 1)

1行目で変数を5に初期化。 2行目~5行目が制御構造です。 変数が2より小さくなるまで繰り返します。 毎回変数の値を表示して、変数を1減らします。 この場合「5」「4」「3」「2」「1」と表示します。 while~wendは条件が正しければ繰り返し、repeat~untilは条件になるまで(条件が正しくない間)繰り返します。 条件を調べる場所が違うためwhile~wendは1度も繰り返さない時があるが、repeat~untilは最低でも1度は実行します。 日本語っぽくするなら

変数に 5 を入れる
繰り返し
    MSGBOX(変数)
    変数を 1 減らす
次になるまで繰り返しに戻る (変数が 1 より小さい)

選択

select (変数)
case 0
    MSGBOX("0です")
case 1
    MSGBOX("1です")
case 2
    MSGBOX("2です")
default
    MSGBOX("その他")
selend

変数の内容によって場合分けします。 0の時は「0です」、1の時は「1です」、2の時は「2です」、その他の時は「その他」と表示します。 全ての場合をcaseで書いた場合は8,9行のdefaultは書かなくてもいいです。 日本語っぽくするなら

選択しましょう (変数の値で場合分け)
0 の場合
    MSGBOX("0です")
1 の場合
    MSGBOX("1です")
2 の場合
    MSGBOX("2です")
上記どれでもない場合
    MSGBOX("その他")
選択終了

繰り返しの制御

while (変数 > 0)
    if (変数 > 10) then break
        変数 = 変数 - 1
    if (変数 > 5) then continue
        MSGBOX(変数)
wend

2行目の break は繰り返し(for,while,repeat)を抜けます。この場合6行目以降に処理が移ります。 4行目の continue は繰り返しの先頭に戻ります。この場合5行目の変数の表示をせずに1行目に処理が移ります。 日本語っぽくするなら

次の間繰り返す (変数が 0 より大きい)
    もし (変数が 10 より大きいなら) 次を実行 whileの繰り返すを抜ける
        変数を 1 減らす
    もし (変数が 5 より大きいなら) 次を実行 whileの先頭の戻る
        MSGBOX(変数)
繰り返しに戻る

式について

いままでいくつか出ましたが式について説明します。 式とは算数に出てくるような足し算や掛け算などです。 基本の (,),*,/,+,- は算数と同じです。(*は×,/は÷の代わりです) また評価式というのがあり、これは基本的にif,whileの()内に書くものです。 (本当はif,whileの()書いたけど()なしの評価式だけでもいいです。) 基本は >,<,=,>=,<=,<> で順に右より左が大きい,右より左が小さい,左右同じ,左は右以上,左は右以下,左右が違うです。 ここでの = は代入ではないことと、より大きい、以上 の違いに気をつけてください。 これら以外に ! は条件の否定で例えば

if (! (変数 > 0)) then MSGBOX("0より大きくない")

このように(変数が0より大きい)を否定して(変数が0より大きくない)をあらわします。 他に AND,OR もあります。コレは条件の結合で例えば

if ((変数 > 0) AND (変数 < 10)) then MSGBOX("0より大きくて10より小さい")
if ((変数 < 0) OR (変数 > 10)) then MSGBOX("0より小さいか10より大きい")

このようになります。似たものに XOR があります。 あと特殊な MOD というのもありこれは余りの計算に使います。例えば

変数 = 5 MOD 2

この場合変数には5÷2の余り1が入ります。

わかりやすくするための関数

関数はなくてもスクリプトはかけます。 ただしシンプルに書くためには知っておかなければならないでしょう。 関数とは処理をまとめたものです。 いままで使ったMSGBOX()も関数の1つです。 ここでは自分で作る関数について説明します。 関数には2つほど種類があります。 まず1つは

procedure 関数名(引数1, 引数2)
    MSGBOX(引数1)
    MSGBOX(引数2)
fend

こんな感じで書きます。コレを書いておけば次のように1行で複数の処理ができます。

関数名(変数1, 変数2)

この1行で引数1と引数2を表示します。 引数とは関数呼び出し時に使用する変数のことです。 この場合関数を呼び出す時に変数1を引数1に、変数2を引数2にそれぞれ代入して関数の処理を開始します。 また引数がない関数を宣言することもできその場合は()だけを書きます。 もう1つは

function 関数名(引数1, 引数2)
    result = 引数1 * 引数1 + 引数2 * 引数2
fend

このように書きます。違いは procedurefunction になり なかに「 result 」という変数があることです。 result には特別な意味があります。

変数3 = 関数名(2, 3)

上記のように変数に代入する値が保存されます。 この場合変数3は13(2 × 2 + 3 × 3)が代入されます。 resulut を関数の 戻値(もどりち) とか 返り値(かえりち) とか言います。

関数の制御

exit,exitexit という制御構造があります。 exit は関数を抜けて呼び出し元に戻ります。 例えば

procedure テスト関数()
    MSGBOX("表示される")
    exit
    MSGBOX("表示されない")
    MSGBOX("表示されない")
fend

このように書くと、この関数が呼ばれたら、2行目は実行されますが、4行目以降は実行されません。 exitexit は関数を抜けるだけでなくスクリプト自体を終了します。 また exit は関数でないところで実行すればスクリプト自体を終了します。

変数の有効範囲

変数の有効範囲(通常スコープ)について説明しときましょう。 変数にはスコープというものがあります。 関数内で使用した変数を関数の外で使用することはできません。 関数外で使用した変数を関数の中で使用することもできません。

関数外変数 = 1
関数()
MSGBOX(関数外変数)
MSGBOX(関数内変数) //この行でエラーが出ます
procedure 関数()
    関数内変数 = 1
    MSGBOX(関数外変数) //この行でエラーが出ます
    MSGBOX(関数内変数)
fend

これは変数を使用するときは自動でローカル変数として作成されるためです。 もし関数内外で使用したい変数があるときは次のようにグローバル変数にします。

public 関数外変数 = 1
関数()
MSGBOX(関数外変数)
MSGBOX(関数内変数) //この行でエラーが消えます
procedure 関数()
    public 関数内変数 = 1
    MSGBOX(関数外変数) //この行のエラーが消えます
    MSGBOX(関数内変数)
fend

public で変数をグローバル変数とすることをしめします。 グローバル変数には制限があります。 変数の宣言時に初期値の指定で変数を指定できません。

変数 = 1
ローカル変数 = 変数
public グローバル変数1 = 変数 //この行でエラーが出ます
public グローバル変数2
グローバル変数2 = 変数 //これはOK

関数とは違いますが CALL というものがあります。 これは別ファイルを取り込む時に使用します。 いつも使う関数を1つのファイルにまとめておくとかの利用法があります。

CALL UWSファイル名 //拡張子.uwsは省略可能

用意されている関数の説明

説明しようとしたが、面倒なのでかなりはしょります。 ヘルプとか見てください。

GETID

ウィンドウの識別子を取得します。

ID = GETID("ウィンドウのタイトル")
ifb (ID < 0)
    MSGBOX("ウィンドウが見つかりません")
    exitexit
endif

戻値が-1のときはエラーです。エラー処理をしときましょう。

MSGBOX

メッセージを表示します。

MSGBOX("メッセージ")

動作チェック等に使用してます。

STATUS

ウィンドウの状態を取得

ID = GETID("タイトル")
X = STATUS(ID, ST_X)
Y = STATUS(ID, ST_Y)

エラー処理省いてます。ウィンドウの左上座標の取得に使用しています。

PEEKCOLOR

画面の色を取得

色 = PEEKCOLOR(X, Y)

座標(X, Y)の色を取得座標(0, 0)はモニタの左上です。 注意することは通常のRGB(赤緑青)の順でなくBGRの順です。 例として黄色はRGBでは緑と青の組み合わせですので$00FFFFですが、UWSCではBGRのため$ FFFF00になります。 ちなみに$は十六進数を表すときに使用します。

CHKIMG

画像が画面上にあるかチェック

ifb (CHKIMG(画像名, 0, 左上X, 左上Y, 右下X, 右下Y)
    MSGBOX("画像ありました")
    MSGBOX("画像の左上位置は(" + G_IMG_X + ", " + G_IMG_Y + ")です")
endif

左上X,左上Y,右下X,右下Yは省略できるけど、範囲を限定した方が早いと思う。

SLEEP

一時停止します。

SLEEP(0.5)

これで0.5秒停止します。画面の切り替え待ち等に使用します。

MMV, BTN

マウスを操作します。

MMV(X, Y)
BTN(LEFT, DOWN, X, Y)
BTN(LEFT, UP, X, Y)

MMV()でマウスを(X, Y)に移動して,BTN()でマウスを押して放します。

KBD

キーボードを操作します

KBD(VK_ENTER)

これでエンターキーを押します。

変数をまとめた配列

変数の一種に配列というのがあります。 配列は同様の値が入る変数をまとめたものです。 変数をペットボトルとした考えたら配列はそれが入ったダンボールといったとこでしょうか?

DIM 配列[3] = "お茶", "コーラ", "ビール", "発泡酒"
配列[3] = "日本酒"
for i = 0 to 3
    MSGBOX(配列[i])
next

画面1 画面2 画面3 画面4

配列は使用前に宣言が必要です。(1行目の DIM ) 今回はDIMで宣言していますが、これはローカル変数を宣言するときに使用します。 グローバル変数としたい場合はDIMの代わりに PUBLIC で宣言します。 宣言した後は2、4行目のように 配列名[インデックス] と書くと普通の変数と同じように使えます。 ここでインデックスとは配列の位置で、 先頭は0 からになり、 最後は宣言時の[数] となります。 今回は1行目でDIM 配列[3] = …としているので配列[0],配列[1],配列[2],配列[3]の4つが変数と同じように使用できます。

ちょっと高度な 多次元配列 というものがあります。 先の例は一次元の配列(一列にしか入らないダンボール)です。 二次元の配列(縦・横に入るダンボール)の例を示します。

DIM 二次元配列[2][3] = "緑茶", "麦茶", "ウーロン茶", "紅茶",_
"コーラ", "サイダー", "ラムネ", "ジンジャエール",_
"ビール", "発泡酒", "日本酒", "ワイン"
for 種類 = 0 to 2
    for i = 0 to 3
        MSGBOX(二次元配列[種類][i])
    next
next

実行結果は省略します。 まず1,2行目の最後の "_" について説明します。 これは行結合といい、行の最後に付けると改行が無視されて次の行と結合されます。 長すぎる行などに書き、見やすくするのに使用します。

さて、二次元配列ですが一次元配列と同じように宣言が必要です。(1行目) おわかりのように二次元の場合は "[数]" を2つ書きます。 3次元の場合は3つ書きます。(三次元配列[数][数][数]) 使用時も "[インデックス]" を宣言時と同じ数書きます。 一次元は数直線、二次元は座標、三次元は空間という風にイメージします。 多次元の場合初期化がわかりづらいですが、二次元配列[X軸][Y軸] = “(0,0)の値”, “(0,1)の値”, “(0,2)の値”, …, “(1,0)の値”, “(1,1)の値”, … という風に2つ目の”[数]“の0からその数までを書き、次に1つ目の”[数]“が1つづれ2つ目の”[数]“の0からその数までを書き、また1つ目の”[数]“が1つづれ… となります。まぁ実行して考えてみてください。

ver4の機能

いままではver3についての説明でした。2006年07月16日現在ver4.0dが公開されています。 ver4には便利な機能が追加されていますので、そのなかのいくつかについて説明を書きます。

定数定義

定数とは決まった数のことです。

DIM 配列[3] = "お茶", "コーラ", "ビール", "発泡酒"
for i = 0 to 3
    MSGBOX(配列[i])
next

1行目と2行目の 3 という数字はこのスクリプトでは決まっています。 このようにスクリプト中にそのまま書かれた数字のことを マジックナンバー と読んでいます。 マジックナンバーがあると読み返すときに数字が何を意味していたかを考えないといけないため、 できるだけ使わない方がいいと言われています。 そこで定数に名前をつけて意味がわかるようにします。

CONST 配列サイズ = 3
DIM 配列[配列サイズ] = "お茶", "コーラ", "ビール", "発泡酒"
for i = 0 to 配列サイズ
    MSGBOX(配列[i])
next
配列サイズ = 3 // この行でエラーがでます

1行目で"最後のインデックス"という定数を CONST を使用して定義しています。 2行目、3行目で定義した定数を使用しています。 これで3行目のfor文が配列全体を繰り返すことがわかりやすくなったはずです。 ここで注意が必要なのは、 6行目のように CONST を使用して定義した定数は値の変更ができません。 実行時値が変わるようなものはそもそも定数とは言わず、 変数となるので通常の変数を使用してください。

関数の引数省略

関数には引数を指定できました。 そして関数宣言で指定した引数の個数と関数呼び出しで指定する引数の個数は同じになります。 もし個数が違った場合はエラーがでます。 引数の中には普段は決まった値を使用し、特別な場合に違った値を使用するような場合があります。 そんな時に、標準で用意されている関数のように引数を省略できると便利です。

関数(10, 20)
関数(10, 20 , "-")
procedure 関数(引数1, 引数2, 引数3="+")
    値 = 引数1
    select (引数3)
    case "+"
        値 = 値 + 引数2
    case "-"
        値 = 値 - 引数2
    selend
        MSGBOX(値)
fend

これは指定がなければ足し算をして、指定があればその演算をする関数です。 1行目、2行目が同じ"関数"を読んでいますが、引数の個数が違います。 これは3行目の関数宣言で 引数="+" とあるためエラーが出ません。 これを デフォルトパラメータとかデフォルト引数 と呼びます。 関数呼び出しで3つ目の引数が省略された場合は引数3に”+“が、 指定された場合は引数3に指定されたものが入ります。 ここで注意があります。

関数(10)
関数(10, 20)
関数(10, 20 , "-")
関数(10, "-") // 動作に注意
procedure 関数(引数1, 引数2=10, 引数3="+")
    値 = 引数1
        select (引数3)
    case "+"
        値 = 値 + 引数2
    case "-"
        値 = 値 - 引数2
    selend
        MSGBOX(値)
fend

5行目のように引数2にもデフォルトパラメータを指定した場合、 1,2,3行目は思った動作をしてくれます。 ただし4行目は"10 - 10"の結果"0"を表示されると思うかもしれませんが違います。

結果

このように引数2が”-“になり、引数3が省略されたため”+“となり、 その結果"10-“というものが表示されます。 呼び出し時の引数は前から順に指定されたとみなし、 省略できるのは後の連続した部分のみです。ご注意ください。また

procedure 関数(引数1, 引数2=10, 引数3) // エラーがでます

このように途中をデフォルトパラメータ指定したのに、 その後の引数では省略不可にした場合はエラーがでます。

関数への参照渡し(前からあったかも?)

今まで関数へ引数を渡していましたが、これは 値渡し と呼ばれるものです。 引数の渡し方には値渡しのほかに 参照渡し と呼ばれるものがあります。

ローカル変数 = 0
MSGBOX("初期のローカル変数 = " + ローカル変数)
値渡し(ローカル変数)
MSGBOX("値渡し後のローカル変数 = " + ローカル変数)
参照渡し(ローカル変数)
MSGBOX("参照渡し後のローカル変数 = " + ローカル変数)
procedure 値渡し(引数)
    引数 = 10
fend
procedure 参照渡し(var 引数)
    引数 = 20
fend

初期値 = 0 値渡し後 = 0 参照渡し後 = 20

参照渡しは10行目のように参照渡しをしたい引数に var をつけて宣言します。 3行目では通常の宣言の関数(7行目)を呼び出しています。 5行目では参照渡しで宣言した関数(10行目)を呼び出しています。 どちらの関数内でも"引数 = …“と引数の値を変更しています。 しかし、値渡しの方は渡したローカル変数の値は変更されていませんが、 参照渡しの方では渡したローカル変数の値が 変更されています 。 このように渡した変数の値を変更できるのが参照渡しになります。

関数に配列を渡す

関数の引数に配列を指定できるようになりました。

DIM 配列[2][2] = "お茶", "コーラ", "ビール",_
"発泡酒", "焼酎", "ワイン"
関数(配列)
procedure 関数(引数[][])
    MSGBOX(引数[1][1])
fend

引数に配列を指定する場合は4行目のように 引数[][] の様に宣言します。 これは二次元配列を引数としているため [] が2つありますが、 1次元なら1つ、3次元なら3つとなります。 (引数[2][2]と書くこともできますが、引数[10][0]などと書いても結果が変わらないことから 配列サイズを指定しても無視されていると思います。) もちろん配列も同様に"var"を指定すれば参照渡しができます。 ただし、デフォルトパラメータ指定はできないようです。

配列の初期化を簡略化

DIM 配列1[3] = "お茶", "コーラ", "ビール", "発泡酒"
DIM 配列2[] = "お茶", "コーラ", "ビール", "発泡酒"

いままで1行目のように[3]とサイズを指定していましたが、 2行目のように[]とサイズを省略できるようになりました。 省略した場合は初期化で指定した個数分のサイズと自動的になります。

ループレベル

CONTINUEとBREAKでループレベルが指定できるようになりました。

for i = 1 to 3
    for j = 1 to 3
        MSGBOX("i = " + i + "  j = " + j)
    next
next

上のスクリプトは"i = 1 j = 1”,“i = 1 j = 2”,…,“i = 3 j = 3"と 9回 メッセージが表示されます。

for i = 1 to 3
    for j = 1 to 3
        MSGBOX("i = " + i + "  j = " + j)
        break
    next
next

このスクリプトは"i = 1 j = 1”,“i = 2 j = 1”,“i = 3 j = 1"と 3回 メッセージが表示されます。 これは今までの動作と同じく、4行目の break は2行目のforを抜けます。

for i = 1 to 3
    for j = 1 to 3
        MSGBOX("i = " + i + "  j = " + j)
        break 2
    next
next

次のスクリプトは"i = 1 j = 1"と 1回だけ メッセージが表示されます。 これは4行目の break 2 で2行目のforだけでなく1行目のforまで抜けてしまったためです。 このように break ループレベル と書くとループレベルの数だけforやwhileなどを抜けます。 そして、 continue ループレベル も同様にループレベルが指定できます。

以上、新機能をいくつか説明してきました。 ここで注意して欲しいことは、新機能を使って書かれたスクリプトを 古いバージョンのUWSCで実行することができないことです。 もし、手に入れたスクリプトが実行できないときは新バージョンを試してみるといいかもしれません。

最後に

かなりはしょった説明です。 もっと知りたければヘルプとか他人のスクリプトを参考にして日々精進してください。