UWSC初心者用スレ
■ このスレッドは過去ログ倉庫に格納されています
UWSC初心者用スレです わかってる人はこっち 自動化ツールUWSC使いよ集まれ21 http://egg.5ch.net/test/read.cgi/software/1533818531/ 降臨される神々においては相手を人と思わず猿と思し召されるよう 何卒お願い申し上げます >>91 さてここまでやってしまったからについでに言うと >カウント0の時、Aの画像を認識するまでループ、認識できたら1の行動(カウント+1)でループを抜け出して次の処理へ >カウント1の時、Aの画像を認識するまでループ、認識できたら2の行動(カウント+1)でループを抜け出して次の処理へ >カウント2の時、Aの画像を認識するまでループ、認識できたら3の行動(カウント+1)でループを抜け出して次の処理へ まぁこの辺は経験とかないとこうなっちゃうのかなと思うが、簡単にすると以下だよね >カウントが0からnまで繰り返し、Aの画像を認識した時、カウント別の処理実行後、カウントを+1して次へ これをプログラムしやすく整形すると… >カウントが0からnまで繰り返し > Aの画像を認識した時、 > カウント別の処理実行後、 > カウントを+1 書くべきコードのイメージも大分違ってくるでしょう >>94-95 ありがとうございます にっちもさっちもいかず、ぐちゃぐちゃにしてしまったファイルをアップしたせいで、 より大きな誤解を招いてしまったところがあると思います… ttps://22.gigafile.nu/1029-d56268c68a387a2a9e4db0865ff3cf87f いま試行錯誤していたファイルをアップしてみました ちょうど>>95 あたり?に近かったのではないかと思われますが… ターン1→2→3→3→1という風に書いてあるにも関わらず、 ターン1→3→2、1→3→1、1→2→3など行動が飛ばされる時があります 戦闘開始.bmpを画像認識しなければ次へ進まないはずだと思うのですが、 異なる制御文でも入れてしまっているのでしょうか… >>96 肝心のカウントを判定してないんだから順番通りになるわけもない そもそも… > カウントが0からnまで繰り返し > Aの画像を認識した時、 > カウント別の処理実行後、 > カウントを+1 ↑に近づけたつもりならwhileと画像認識はひとつ カウントのif文で分岐を書けばいいだけ 同じ判定がいくつも出てくるのは構造がおかしいと指摘したはずだよね てかこれだけ言ってもインデント無視する限りもうアドバイスしないのでそのつもりで >>97 勘違いなさってるようなので訂正させていただきますが、 >>96 のファイルは>>94-95 を拝見する前に自力で作成していたものです まず状況整理のためにインデントをいれろというアドバイスがあったのに インデント入れてみてくれはさすがに乱暴だろ インデントについて調べて理解したの? IF文におかしいところがないか確認したの? >>99 >>94 を見ても一瞬で理解できない猿で申し訳ないとしか言えません >>39 を見て、どんなものかと始めたばかりなのでプログラムの記述式等に学が浅く、 言われてることを理解するのにも四苦八苦ですし、周りからすれば幼子に6+6の計算させたら指が足りないからわからないって言ってるようなものなのは申し訳ないです ID違うけど>>99 です >>100 >>99 に対して思いもよらないレスが返ってきたので2つ確認させてください 1.あなたは日本人ですか? 2.日本語苦手ですか? 煽りとかじゃなくてマジで中国人とかが日本のゲームやってbot使ってたりするので確認です インデントを入れるとどこで処理が区切られているか、どこで処理がループされているかがはっきりするのでインデントを入れましょうって話だろ 初心者相手に「インデントを入れればわかる」で投げっぱなしはそらキツいっしょ インデントの入れ方の規則だってわからんだろうし ここはuwscの初心者スレであってプログラミングの初心者スレではないからな ゲームマクロなら画像認識とマウスキーボード自動化あればいいんだから言語なんてなんでもいいんだけどね。 開発環境しっかりしてるVBとかのほうがいいような気もする。 >>104 了解。次スレで検討する。 「プログラミング初心者のためのUWSCスレ」 で、よろしいか? >>100 多くの人にとってはインデントがあったほうが見やすいでしょうから 今インデントをしていないのは、単にインデントするのが面倒なのではないかと思います 多くのエディタでは 複数行を選んだ状態でTABを押すとインデントが深くなり インデントのある行を複数行を選んでSHIFT+TABでインデントが浅くなるという機能があります (※エディタによってはキー割り当てが違うこともあります) 今これというエディタを使っていないのであれば Mery (テキストエディタ) https://www.haijin-boys.com/wiki/ を使ってみてください。 このエディタは最初から 表示→表示モード に最初からUWSCが含まれています。 なので、UWSファイルを読み込んだだけで自動的に見やすいカラー表示をしてくれます。 ツール→オプションで最初にここだけ設定しておくと見やすいだろうという箇所は 「基本」タブで 「タブの桁数」で1タブでなん文字分字下げするか設定できます。 タブより空白がよければ「タブの代わりに空白を挿入」にチェック タブの代わりに空白でのTAB/SHIFT+TABによるインデントの増減が効きます 「基本」タブで 見やすいテーマを選択 「記号」タブで タブ表示、半角空白表示、全角空白表示 にチェックを入れる なお、自分が常用しているのは秀丸ですので、 このMeryエディタを広めたいとかいう意図ではありません。 >>107 ×「基本」タブで 見やすいテーマを選択 ○「表示」タブで 見やすいテーマを選択 自分のせいでいろいろと申し訳ありません インデントについては普通にメモ帳でやってるのもあり、 一部HPではインデントをつけてないところもありコピペしてたので動作してから直そうと思ってました ttps://11.gigafile.nu/1030-dd4e47c88d4952d781d2d600256473315 再度修正してみました 「悩み中.uws」は目的の動作をしてくれるようになりましたので「ボス戦開始.uws」に名称を変更しました 一応動作はしてくれているのですが、正しい解決策がわからない部分もあります 行動が飛ばされてた原因がおそらく戦闘開始.bmpの画像を認識するスピードが速すぎて、 行動が終わる前に画像を再度認識してカウントをプラスしていたようで、 このやり方は違うとは思いつつもSLEEPで強制的に認識を止めてます 次にカウントで「戦闘開始.uws」についても修正してみました こちらも自分の思ったとおりの動作はしてくれているのですが、 1ターン目は完璧ですが、その後に戦闘終了の処理に移行してしまうので、 当然ながら2ターン目は動作しないということに… 「戦闘終了.uws」はメインで画像認識させた方が良いですかね… >>107 Mery調べてみます >>109 気づいたところをまず指摘しておきます ボス戦開始がどういうタイミングでどこから よばれるか今回アップされた中からは判断できませんが 当然メインからたどって何かのタイミングで呼ばれるかたちになるのだろうと思います。 ということはそこから メイン.uws をCALLしてしまうと らどんどん深いネストに入って無限ループに陥ってしまいます EXITEXITに達することはないはずです 単純化すると次のような状態です 破線内をCALL_TEST1_MAIN.UWS,CALL_TEST2.UWSとして保存し CALL_TEST1_MAIN.UWSを実行してみてください −−−−−−−−−−−−−−−−−−−−−−−− //CALL_TEST1_MAIN.UWS STOPFORM( TRUE, G_SCREEN_W-400, 0) LOGPRINT( TRUE, G_SCREEN_W-400, 60, 400, 400) PRINT "CALL_TEST1_MAIN.UWS ファイル先頭" CALL CALL_TEST1.UWS SLEEP(2) PRINT "CALL_TEST1_MAIN.UWS CALL FUNC_MAIN1" FUNC_MAIN1(); PRINT "CALL_TEST1_MAIN.UWS ファイル末尾" −−−−−−−−−−−−−−−−−−−−−−−− //CALL_TEST2.UWS PRINT "CALL_TEST2.UWS TOP" FUNCTION FUNC_MAIN1() RESULT = 0 SLEEP(2) CALL CALL_TEST1_MAIN.UWS PRINT "FUNC_MAIN1 END" EXITEXIT FEND PRINT "CALL_TEST1.UWS ファイル末尾" −−−−−−−−−−−−−−−−−−−−−−− 訂正 単純化すると次のような状態です 破線内をCALL_TEST1_MAIN.UWS,CALL_TEST1.UWSとして保存し CALL_TEST1_MAIN.UWSを実行してみてください −−−−−−−−−−−−−−−−−−−−−−−− //CALL_TEST1_MAIN.UWS STOPFORM( TRUE, G_SCREEN_W-400, 0) LOGPRINT( TRUE, G_SCREEN_W-400, 60, 400, 400) PRINT "CALL_TEST1_MAIN.UWS ファイル先頭" CALL CALL_TEST1.UWS SLEEP(2) PRINT "CALL_TEST1_MAIN.UWS CALL FUNC_MAIN1" FUNC_MAIN1(); PRINT "CALL_TEST1_MAIN.UWS ファイル末尾" −−−−−−−−−−−−−−−−−−−−−−−− //CALL_TEST1.UWS PRINT "CALL_TEST1.UWS TOP" FUNCTION FUNC_MAIN1() RESULT = 0 SLEEP(2) CALL CALL_TEST1_MAIN.UWS PRINT "FUNC_MAIN1() 終了" EXITEXIT FEND PRINT "CALL_TEST1.UWS ファイル末尾" −−−−−−−−−−−−−−−−−−−−−−− 次のようなかたちになるべきかと思います CALL_TEST2_MAIN.UWS,CALL_TEST2.UWS を保存し、CALL_TEST2_MAIN.UWSを実行してみてください −−−−−−−−−−−−−−−−−−−−−−− //CALL_TEST2_MAIN.UWS PRINT "CALL_TEST2_MAIN.UWS ファイル先頭" STOPFORM( TRUE, G_SCREEN_W-400, 0) LOGPRINT( TRUE, G_SCREEN_W-400, 60, 400, 400) CALL CALL_TEST2.UWS WHILE 1 SLEEP(1) PRINT "CALL_TEST2_MAIN.UWS FUNC_MAIN1() 実行" FUNC_MAIN1(); IFB BTN_NO = MSGBOX( "もう一度実行しますか", BTN_YES OR BTN_NO) THEN MSGBOX( "OK後20秒で終了します") // EXEIEXIT してもいいが抜ければ自然に終了する BREAK ENDIF WEND PRINT "CALL_TEST2_MAIN.UWS ファイル末尾" SLEEP(20) −−−−−−−−−−−−−−−−−−−−−−−− //CALL_TEST2.UWS PRINT "CALL_TEST2.UWS ファイル先" FUNCTION FUNC_MAIN1() PRINT "FUNC_MAIN1() 関数先頭" RESULT = 0 SLEEP(1) PRINT "RETURN TO MAIN" PRINT "FUNC_MAIN1() 関数末尾" FEND PRINT "CALL_TEST2.UWS ファイル末尾" −−−−−−−−−−−−−−−−−−−−−−−− >>109 …二文字か四文字半角スペースにしてくれ 書いてて見にくくない? 適宜sleep入れるのは普通のこと 何も指定しなかったら常に最速でプログラムは回っちゃうから、ボタンの反応や画面切り替えを想定したウェイトを入れるべし 従って後者もwhileの最後にターンとやらの切り替わる猶予を待たせたるか、ボタンが押せる状態か判定を入れてもいい (もちろん組み合わせてもいい、二重操作防止のsleepと操作受付判定いれれば完璧) Mery使いやすいですね >>112 ttp://kobuji.me/tips/call/ >他のマクロを呼び出し現在のマクロを終了する ここの部分を参考にしてみて、一応動作はしているのですが、 なんとなくそうだろうとは思っていたものの、やはり問題ありますよね メイン→ダンジョン選択→ダンジョン1→ボス戦開始(→戦闘が終わったらメインに戻る) >>72 の書き込みから意識して深い階層に行くようにして、 流れはこのように考えているのですが、再度ドツボにハマってきました 今のところの自分が考えている問題点は以下です ・「ボス戦開始」で戦闘が終了した時に「メイン」に戻る ・「ダンジョン選択」でダンジョンを選ばなかった時に「メイン」に戻る ・「戦闘開始」の2ターン目以降とをどうするか >>114 普通のことだったんですね、それなら「ボス戦開始」のカウント処理は問題なさそうです あとは2ターン目以降の問題ですが、どう判定させるか考えてみます >>115 ・「ボス戦開始」で戦闘が終了した時に「メイン」に戻る ボス戦開始の条件はボス画像を発見したら? それとボス戦は戦闘開始.uwsを再利用できる? 戦闘開始.bmpを画像検索してるルーチンに組み込めないかな? それができれば宝箱の判定をしたあとにExit入れればメインに戻れる ・「ダンジョン選択」でダンジョンを選ばなかった時に「メイン」に戻る メインに戻るための条件を組み込めばできそう ・「戦闘開始」の2ターン目以降とをどうするか どのキャラにどういう行動をさせたいのか 今の所1つのキャラに対して行動が1パターンしかないよね >>115 例に出したようなかたちだったら問題があるというだけで 実際に問題があるかどうかは作り方次第です。 CALL おわり.uws EXITEXIT だとしても −−−−−−−−−−−−− //おわり.uws FUKIDASI("おわります") SLEEP(5) FUKIDASI() −−−−−−−−−−−−− だとしたら何の問題もありません。 自分が呼び出されてる元を呼んでしまうので問題がある(可能性が高くなる)わけです 戦闘が終了したら「メイン.uws」に戻る といういいかたの通り呼び出されたところに“戻る”べきであって メインを呼んでしまっては戻るのではなく“潜って”しまいます。 前回よりもさらに単純化していうと PROCEDER test_proc() test_proc() FEND という状態です 再帰呼び出しといいますが test_proc()を呼ばずに抜ける条件がなければ無限ループになります 再帰呼び出しや無限ループになるならまだいいが、uwscでそれやると行き着く先はスタックオーバーフローである 前にも書いたがcallのところに内容をコピペすると考えて、一度テキストエディタ上で実際にペーストしてみて どうなるのか確かめて見たらいいと思う ※メインを上からなぞりcallの行をcall先の中身に置き換える というか最終的に別スクリプトに分割するのは悪いことじゃないが、そもそも質問者が期待するような 動作が早くなったり制御が楽になるなんてことはなく逆にミスの温床にしかなってないから1ファイルに戻した方がいいかも? UWSCと言えば、お絵かきソフトをプロッター代わりにして ドラゴン曲線を描いた覚えがある 面白いけどペイントソフトのスクリプト使った方が効率的 2ヶ所クリックをctrlキー使えばいいかなーと思ってコード書いたけど、 どうしても上手くいかなくていろいろ調べたらタブで繋げばよいと知った 知らないことたくさんあるなー なぜuwsc専用スレに他のアプリ対応を宣伝しにくるのか…ほんと頭おかしい >>125 個人情報抜き取られたりウイルス感染したりしない? アップしてるのはただのスクリプトなので怪しいなら見てみればわかります。 外部と通信してることなど一切ないです。 ChkImgX.uwsとほぼ同じことをしてるだけですね。 pro版のデバッガも試用期間過ぎると使えなくなりますか? あと記憶が不確かなんですが前にpro版の試用期間を過ぎたあたりの タイミングでスクリプトが勝手にスクランブル掛かってしまったんですが どういう条件で起きるのでしょうか 自分でスクランブル掛けてないのは間違いないです >>130 自分で試用期間を過ぎたって連呼してて何言ってんだ… 「pro版のデバッガ」はそういう意味ではないかもしれない でも普通に読むと、何言ってんだとしか言えんわなw >>131-132 試用期間過ぎたら勝手にスクランブル掛けるって ちょっと信じ難かったので質問しました ありがとうございました >>39 の見させていただいたのですが While True //Wendまでの処理を繰り返す。 ifb chkimg("image1.bmp") //" "内に指定した画像を認識したら処理開始 btn(left,click,g_img_x,g_img_y) //画像の座標をマウスの左ボタンでクリック elseif chkimg("image2.bmp") //1つ目の画像が見つからなかったら別の画像を検索 btn(left,click,g_img_x,g_img_y) //画像の座標をマウスの左ボタンでクリック else //上記の条件全てに当てはまらなかった場合 print "画像が見つかりません" //メッセージを出す。 endif sleep(3.5) //()内の秒数待機 Wend とありますが逆に画像が見つからなかった場合クリックする方法はありませんでしょうか? 例 画像が見つかればスルー 画像が見つからなかったらクリック よろしくお願いします。 質問に対してそのまま返答すると else内でbtn使えばいいよ ってなるんだけど 多分そういうことを聞きたいんじゃないのだと思ってる 見つかった場合だと座標指定にchkimgのg_img_x/yが使えるけど、見つからなかった場合はどうやってということかね あらかじめメモって数値なり変数で指定するだけだが ありがとうございます。 実は目的は画像が出てくるまでenterを押し続けて画像が出てきたら enterをストップして次の行動にうつりたいのですが While !chkimg("gazou",0,,,,,,IMG_MSK_BGR4) KBD(VK_enter) SLEEP(0.7) WEND で無限ループは可能なのですが画像がずっと見つからない場合抜け出せなくなるのですよね どこかにbreakを入れれば抜け出せると思うのですが 理想としては10回enterを押して画像が見つからなければ次の行動にうつる といった感じです。 前このスクリプトを聞いてかなり叩かれたのでちょっと別のスクリプトで応用しようとして聞きました。 難しいと思いますがもしよかったらお願いします。 >>137 10回押すというかそれ10回ループしたらええやん 叩かれてそれから君は少しでも自分で調べようとしたの? uwsc whileとかでググってでてくるサイトでも見りゃすぐに答え見つかるんだけど 繰り返し回数決まっているならFor To Next文でもいいし ヘルプ、付属サンプルみてみた? 叩かれたのは調べればすぐわかることを聞きっぱなしで意味もわからず使って調べようともしないからだぞ 何もわかってねーのな ググる以前にヘルプに書いてある程度のレベルじゃん 俺が難しいと思うのは137との意思疎通であって やりたい事も実現するコードも多分 簡単だと思ってるよ >>140 ヘルプを結構読んでググっても付属サンプル見ても見つからないのでまたいきなり 聞くのも悪いのでしばらく経った後聞いてみました。 どうしても出てくる画像がランダムなので回数を決められないんですよね 向いてないと言われるかもしれませんがこのソフトのおかげでゲームマクロでかなり生活も助かってまして すみません また荒れると悪いのでしばらくこの辺にしておきます おいおい初心者スレなのにそんなにいじめたら可愛そうだろ。 お前らは何か勘違いしているようだな。よく考えろ。 向こうのスレの>>10 のこいつの書き込みから3ヶ月経ったが、whileやbreakはおろか、ifやforという基礎中の基礎すら未だ理解していない。 これはもはや自分で考えたり習得する気は微塵もなく、ただ答えを教えろ、代わりに作れと言っているだけ。 そんな奴にググれだのヘルプ見ろと言うことがそもそも無意味で間違いなんだよ。 さらに言えばそれでは向こうのスレと全く同じ流れでこのスレを建てた意味がない。 ここは初心者スレらしく、ヒントやヘルプ見ろなどと意地悪するのではなく、懇切丁寧に答えを教えてあげるべき。 ちなみに僕は初心者なのでよくわからない。 >>143 「条件を満たしたらループから抜ける」 なんてーのは基礎中の基礎以前にら自力でも考え付くだろ わからなきゃこのワード+uwscでググれば答えが出てたぞ。まじめに調べてないだろお前 正常性バイアスというか、それなりに動くものが一度出来ちゃうとそれに固執しちゃうのは初心者っぽくはある たぶんもっと簡単に抜ける条件があるのに回数(しかも不定とかイミフ)に囚われすぎ >>146 回数のほかに理想としてるのは時間ですね >>36 は私なのですが start = gettime() While gettime() - start < 10 if chkimg("gazou",0,,,,,,IMG_MSK_BGR4) BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y) break endif WEND >>37 さんに教えてもらったこのスクリプト物凄く助かりました。 今現在も利用させてもらっています。 これは10秒の間に画像が見つからなければ次の行動に向かわせるマクロなのですが 目的のはenterを10秒間連続で押しても画像が見つからなければ 次の行動に向かうでも目的は達成できますね。 画像が見つかった場合どうしてもそれ様のスクリプトをスタートしないといけないんですよね なので1秒ずつコレを作ってもまたenterを押してしまって 説明が下手ですみません if 画像 見つかったときの処理 else エンター endif を10個用意して試してちょっとおしいって感じだったんですけど結局途中でエンターをずっと連打 してしまうんですよね でもこれでも別の目的のマクロでは使えてるので凄く助かっているのでuwscと 5ちゃんねるには感謝しています。 >>147 いったい何のゲームのマクロなんだ?w 有名なMMOの自動戦闘マクロなら結構作ったが、ひとつひとつ手順をつぶしていけばいつのまにか出来てるぞ 索敵してタゲった場合にゲージが出るゲームなら、それをpeekcolorでチェックしたほうが速くて確実 それと、見つかったら発見フラグを立てて、それが存在するときは「エンター動作」とやらをしなけりゃいいだけじゃないのか >>148 すみませんゲーム名はさすがに伏せさせてください 戦闘は一通り作れたのですがもっと手を入れたいのはいわゆる生産系と特殊な行動ですね ある程度ゲーム内通貨を稼げる生産系マクロも作れたのですがあるものにどうしても特殊な動きが必要でさきほどの内容を聞きました わからなくても特別困ってはないのですがわかればもっと便利になるといった感じです。 見つかるまで回す処理にwhile 変数 = falseって形でフラグ使ってるけど変数増えすぎて面倒になってきた 見つかるまで繰り返す処理を実現したい ゲームだとカウンタを使うことも多いので、結果的にフラグと同等のものが存在することが多い ので、それで判別しちゃうとか while true if chkimg(略) breake 見つかるまで繰り返す処理 skeep(1) wend 超適当だけどこういうのじゃいかんの? チェックが複雑になるならメソッドで切り出すのがいいかと while checker(...) exec(...) sleep(1) wend >>151 と>>153 のやり方が簡単に取り入れられ便利でした!ありがとうございました! 以前質問した>>137 ですが t1=GETTIME() WHILE ((GETTIME()-t1)<3) IF ((CHKIMG("gazou",0,,,,,,IMG_MSK_BGR4) =TRUE)) THEN BREAK KBD(VK_enter) SLEEP(0.7) WEND でついさっき解決しました お騒がせしました もしわからない方がいたら参考にしてください =TRUEいらねーよ、ほんと何一つ身につかない奴だな… こんなものに半月かかったのか… よくこの有様で参考にしてくれとか言えるもんだな まぁuwscの初心者スレだしいいんじゃね 普通ならpythonでChrome操作するし Chromeの話してるの別のuwscスレだったわw これはもう初心者とか言うレベルじゃねーわ 初心者でもまともな人間ならもう少しオツム使って考えるわ ソフト板から流れてきた普段プログラムなんか書かない奴のリテラシーはこんなもんじゃないの noxで以下の用にドラッグドロップを繰り返すようにしているのですが、 これをウィンドウをアクティブ化せずにバックグラウンドで行わせて手前でPCの操作を出来るようにすることは可能でしょうか? ACW(GETID("NoxPlayer","Qt5QWindowIcon"),339,239,425,593,0) FOR X = 1 to 5000 BTN(LEFT,DOWN,641,740,30) MMV(641,755,11) MMV(639,751,10) MMV(569,653,5) MMV(566,646,1) BTN(LEFT,UP,565,644,3) MMV(565,643,15) MMV(564,600,15) BTN(LEFT,DOWN,564,597,47) MMV(563,597,31) MMV(562,597,16) MMV(518,628,16) MMV(513,631,16) MMV(511,633,15) BTN(LEFT,UP,511,634,78) NEXT >>164 nox_adb使えばいいよ 本スレで話題に上がってた >>165 nox-adbでデバイスID指定して、その中の絶対座標でドラッグドロップさせればそれらすべてバックグラウンド処理できるという事でしょうか 試してみます ありがとうございます 代数の呼び出し?ってどうやるんですか? a = "abcd" fukidasi("a ") SLEEP(5) これだと aしか表示されないです。 auto hot key だと%でくくる奴です。 a := "abcd" MsgBox, 0, , %a% Sleep, 5000 デスクトップにあるaaa.txtをデスクトップのa aフォルダに移動したいのですが a = "C:\Users\xxx\Desktop\aaa.txt" b = "C:\Users\xxx\Desktop\a a" DOSCMD("move " + a + " <#DBL>C:\Users\N'o'Te\Desktop\a a<#DBL>") これだと動くのですが、下の記述だと移動してくれません。 DOSCMD("move " + a + " " + b + "") どうすれば動のでしょうか。 >>170 まずはdoscmdの返り値で何のエラーか確認する てかダブルクォート外しちゃったからってだけだろうけど 返り値の出し方わからなかったんですけどダブルクォートつけたらうごきました。 b = "<#DBL>C:\Users\xxx\Desktop\a a<#DBL>" これで良いぽいです。 DOSCMD("move <#DBL>" + a + "<#DBL> <#DBL>" + b + "<#DBL>") とすれば "a","b" どちらのフルパス名内にスペースがあっても大丈夫 >>172 返り値てかコマンドプロンプトの標準出力だけど doscmd自体が文字列返す関数なので変数に代入してもいいし、直接fukidasiとかに突っ込んでもおk UWSCからプログラムに初めて触れる程度の初心者です。 画像認識について質問があります 現在複数の画像を設定してクリックするというコードを書いています。 While True ifb chking(“画像名1.bmp”) btn() elseif chking (“画像名2.bmp”) btn() .... Wend という文章になっており無駄が多いです。 それで一度検出した画像の検出をさせないプログラムを書きたいのですがそのような事は可能なのでしょうか?その際に使用する関数などアドバイスをしていただきたいです。 単純にチェック済みフラグ立てて画像認識の前にif置けばいいんでね >>176 !! その話詳しく聞かせて欲しいです。 While True if chking(“画像名1.bmp”) else ifb chking(“画像名1.bmp”) btn() if chking(“画像名2.bmp”) else elseif chking (“画像名2.bmp”) btn() .... Wend というわけではないですよね... 画像名1.bmp=0なら画像認識、1なら画像認識しない のような文を追加するのでしょうか? そういうこと フラグの方法だと画像の枚数分フラグが必要になる 俺の提案 画像ファイル名を配列に格納してヒットしたら配列の要素にtrue格納する 当然画像検索前に要素がtrueか否かチェックする >>177 まあ、実装方法は色々ある 最終的には配列を引数にした関数までいくと脱初心者って感じだが自分が言ったのは /a = true /b = true /略 /while true / if a and chkimg(“a.bmp”) then / btn() / a = false / endif / if b and chkimg(“b.bmp”) then /略 /wend みたいなの 行頭の/はインデントの為なので気にしないで >>178 本当に本当にありがとうございます!! 私の考えているコードです!! 本当にC言語等学んだ事がないので助かりました。 DIM gazou[]=“画像1.bmp”,”画像2.bmp”,”画像3.bmp” DIM flag[]=0,0,0 For num = 0 to length(gazou)-1 ifb flag[num]=0 ifb chking(“gazou[num]”) btn() num=num+1 else num=+1 NEXT かなり短縮することができました。 ただフラグを追加した途端文が不安になってしまいました。 >>179 あーなるほど!考えてくださりありがとうございます a and chkingという使い方が良さそうですね >>180 の文を少し編集してみます! >>180 for〜nextの中で添字操作したらダメだよ nextが勝手にやるからいらない てかそれだと一周しかしないからwhileと組み合わせてね >>182 あっー!そういえばいりませんねw アドバイスありがとうございます あとこれのフラグを配列化したいのですがa,b,cは定数ですよね? 配列の中に入ったままa=trueなどの情報を持てるのでしょうか? DIM gazou[]=“画像1.bmp”,”画像2.bmp”,”画像3.bmp” DIM flag[]= a,b,c a = true b = true c = true while true for num=0 to length(gazou)-1 if a and chkimg(“gazou[num]”) then btn() a = false next wend ごめんなさい解決しました! 付き合ってくださった方々ありがとうございます 画像が増えるたびa=trueを追加していけば以下の文章で大丈夫そうですね DIM gazou[]=“画像1.bmp”,”画像2.bmp”,”画像3.bmp” DIM flag[]= a,b,c a = true b = true c = true while true for num=0 to length(gazou)-1 if flag[num] and chkimg(“gazou[num]”) then btn() flag[num] = false next wend >>185 画像がヒットしたらgazouに格納されてるファイル名をtrueで上書きすると言いたかった そしたら配列のフラグいらなくなるでしょ >>185 そうやるなら DIM flag[]= true, true, true だね >>186 !!確かにそれを使えばもっと短くできますね やってみます 色々アドバイスありがとうございます DIM gazou[]=“画像1.bmp”,”画像2.bmp”,”画像3.bmp” while true for num=0 to length(gazou)-1 if gazou[num]!==flase and chkimg(“gazou[num]”) then btn() gazou[num] = false next wend これ完璧ですね!自宅に帰り次第実行させてみたいと思います!! 本日ライセンス購入の件をumiumiさんに問い合わせをしたのですがやはり購入は厳しいですよね... 無理じゃないかねえ、返信あったらスレに報告して欲しい この前コードの相談に乗っていたものです コードは完成したのですが DIM gazou[]="unko(1).bmp","unko(2).bmp","unko(3).bmp","unko(4).bmp","unko(5).bmp" //画像名 WHILE TRUE for num=0 to length(gazou)-1 //クリック対象マークの画像ファイルを指定 IFB gazou[num]=true and CHKIMG("gazou[num]") //クリック対象の画像が見つかった場合、その画像をクリック BTN() //クリック後はプログラムを終了する gazou[num] = true ENDIF //監視時間間隔[s] SLEEP(0.1) next WEND これで実行した場合chking("gazou[num]")が配列から使用されずgazou[num].bmpとして反映されてしまいunko(1)bmpとして反映されません chkingの中では配列を使用することが出来ないのでしょうか?アドバイスお願いします またproライセンスの購入の件ですがまだ返信が来てません CHKIMG(gazou[num]) ダブルクォーテーションいらない 別にuwscに限った話でもないんだが、文字列をダブルクォートで囲うというのは、プログラム的な解釈をさせずそのままの文字列で扱って下さいということ 引数に文字列をわたしたいからといってダブルクォートで囲う必要はない ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる