Pythonコマンド_作成How_to - KawaSwitch/Poke-Controller GitHub Wiki
現在扱えるPythonコマンド用のメソッド/クラスのリファレンス的なものです
追加要望や変更要望, 質問等あればIssueへお願いします
実際のコマンドの追加場所などの説明はこちら
また, 書く際はVisual Studio CodeなどPythonの補完が利くエディタを使うことをお勧めします
通常メソッド
press
buttons: 押下するボタン
duration: 押下時間[秒] デフォルトは0.1
wait: 押下後に待つ時間[秒] デフォルトは0.1
使用可能ボタン一覧
ボタン: A, B, X, Y, L, R, ZL, ZR, MINUS, PLUS, LCLICK, RCLICK, HOME, CAPTURE
HAT(十字キー): Hatクラス
Hat.TOP/RIGHT/BTM/LEFT/TOP_RIGHT/BTM_RIGHT/BTM_LEFT/TOP_LEFT
方向: Directionクラス
8方向: Direction.UP/RIGHT/DOWN/LEFT/UP_RIGHT/DOWN_RIGHT/DOWN_LEFT/UP_LEFT, Direction.R_UP/...
任意方向: Direction(Stick.LEFT/Stick.RIGHT, '角度'[°])
任意方向: Direction(Stick.LEFT/Stick.RIGHT, ('x方向', 'y方向')) # from 0 to 255
ボタン複数押下や左右スティック同時押しの際はリスト形式で入力
ボタン押下 使用例
self.press(Button.A, 0.1, 0.5)
Aボタンを0.1秒間押し, その後0.5秒間何もしない
self.press([Button.A, Button.ZR], 1, 0.5)
AボタンとZRボタンを1秒間押し, その後0.5秒間何もしない
方向ボタン押下 使用例
self.press(Direction.UP, 5, 0.1)
左スティックを上方向に5秒間倒し, その後0.1秒間何もしない
self.press(Direction.UP_RIGHT, 3, 1)
左スティックを右上方向に3秒間倒し, その後1秒間何もしない
全方向ボタン 使用例
self.press(Direction(Stick.LEFT, 70), duration=3)
左スティックを70°の方向に3秒間倒す
self.press([Button.A, Direction(Stick.LEFT, 120), Direction(Stick.RIGHT, -30)], 5, 1)
Aボタンを押しながら左スティックを120°, 右スティックを-30°(=330°)の方向に5秒間倒し, その後1秒間何もしない
ボタンと方向ボタンの同時押下 使用例
self.press([Button.A, Direction.UP_LEFT], 0.1, 2)
左スティックを左上方向に倒しながらAボタンを0.1秒間押し, その後2秒間何もしない
duration, waitの時間は片方, もしくは両方とも設定せずにデフォルト値を使うことできます
デフォルト値 使用例
self.press(Button.A, wait=2)
Aボタンを0.1秒間(durationのデフォルト値)押し, その後2秒間何もしない
self.press(Button.B)
Aボタンを0.1秒間(durationのデフォルト値)押し, その後0.1秒間(waitのデフォルト値)何もしない
wait
wait_time: 待つ時間[秒]
使用例
self.wait(3)
3秒間何もしない
hold, holdEnd
buttons: ホールド/ホールド解除するボタン
wait: 押下後に待つ時間[秒] デフォルトは0.1
使用可能ボタン一覧は上の関数と同じ
指定のボタンをholdメソッド実行からholdEndメソッド実行まで押し続けます
ボタンを押しっぱなし/方向キーを倒しっぱなしにしながら他のボタンを押下したいときに使います
使用例
self.hold(Direction.UP, wait=1)
self.press(Button.A, wait=1)
self.holdEnd(Direction.UP)
上方向に倒しっぱなしにして1秒後にAボタンを押下し, その1秒後に上方向の入力を終わる
self.hold(Direction.UP_RIGHT)
while True:
# pythonの繰り返し構文
self.press(Button.A, wait=1)
self.press(Button.R, wait=1)
右上方向に倒しっぱなしにして1秒ごとにAボタンとRボタンを交互に押下する
self.hold(Direction(Stick.LEFT, 120))
while True:
self.press(Button.A, wait=1)
左スティックを120°に倒しっぱなしにして1秒ごとにAボタンを押下する
画像認識系統
以下の画像認識系の関数を使うにはPythonCommandを継承したImageProcPythonCommandを継承してください
isContainTemplate
template_path: 探すテンプレート画像のパス(拡張子を含む画像名)
threshold: しきい値 デフォルトでは0.7
use_gray: 処理をグレースケールで行う デフォルトではTrue
-> return値: マッチすればTrue, でなければFalse
指定パスのテンプレート画像を現在の画面からテンプレートマッチングで探します
グレースケールで行った方が処理が速いので色の差を気にする必要が無ければuse_grayはTrueにしてください
より詳しい使い方, テンプレートマッチングの説明はここで
探索するテンプレート画像は
PokeController/SerialController/Template/
へ置いてください
使用例
if self.isContainTemplate('dougu_to_bag.png', 0.7)
self.press(Button.A, wait=1)
どうぐを手に入れたらAボタンを押して, 1秒間待機
'dougu_to_bag.png'は「どうぐポケットに しまった」の画像とする
if not self.isContainTemplate('normal_Skwovet_hatching.png', 0.7, False)
self.press(Button.A, wait=1)
self.finish()
通常色のホシガリスでなかったら(=色違い)だったらAボタンを押して1秒間待機したあと終了する
'normal_Skwovet_hatching.png'は通常色のホシガリスの孵化画像とする
saveCapture
name: 保存ファイル名(指定が無ければ現在時刻)
このメソッドが呼ばれた時点での画像キャプチャを.png形式でローカルに保存します
同ファイル名の画像がすでに存在する場合は, 上書きされるので注意
引数でのファイル名の指定が無ければ現在時刻をファイル名とします
画像キャプチャの保存先は
PokeController/SerialController/Captures/
使用例
if self.isContainTemplate('shiny_mark.png', 0.7)
self.saveCapture('shiny_found')
色違いのポケモンであれば, その時点のキャプチャ画像を"shiny_found.png"として保存する
'shiny_mark.png'は色違いマークの画像とする
ユーティリティ
pressRep
buttons: 押下するボタン
repeat: 繰り返し回数
duration: 押下時間[秒] デフォルトは0.1
interval: 次の押下までの時間[秒] デフォルトは0.1
wait: 押下後に待つ時間[秒] デフォルトは0.1
連続でボタンを押す流れを関数化したものです
使用例
self.pressRep(Button.B, 5, interval=2)
Bボタンを2秒ごとに5回押下する
timeLeap
is_go_back: 時を渡ったあと時間を戻す デフォルトはTrue
True: 時渡りで時間を戻す
False: 時渡りで日にちを上げる
ver1.0-beta以前でこの関数を使うにはPythonCommandを継承したRankGlitchPythonCommandを継承してください
時渡りを行うための流れを関数化したものです
使用例
self.timeLoop()
繰り返し機構/チェックポイント
ver1.0-beta以前は明示的に以下のチェックポイントを挟む必要があります
ver1.0-beta2以降は内部で行っているのでdoメソッド内に書く必要はありません
現在の実装ではコマンド実行中にストップを押してもシリアル通信や非同期処理のためにすぐには停止できない
コマンドを停止するには専用の関数をチェックポイントとして置く
この仕様は後のバージョンでは廃止するかもしれないが, 画像比較チェックポイントの導入に際して役割は残す予定
finish
繰り返しのないコマンドの一番最後に実行し安全に終了する
既存の同期(Sync)/非同期(Unsync)コマンドがこのメソッドを使用する代表例
また, 途中でコマンドを終了したい箇所で使用することもできます
使用例
self.press(Direction.DOWN, wait=1)
self.press(Button.A, wait=1)
self.finish()
左スティック下, Aボタンを1秒ずつ押下して終了する
checkIfAlive
-> return値: ストップ要求が行われていたらFalse, 行われていなければTrue
外部からストップ要求が行われたかどうかを判定し, 行われていれば安全に終了する
基本は繰り返しの中で一回, 長ければチェックを増やすことを推奨します
使用例
while self.checkIfAlive():
self.press(Button.A, wait=1)
self.press(Button.A, wait=1)
self.press(Button.B, wait=1)
1秒ごとにA, A, Bを押下した後, ストップ要求が無ければ繰り返し, 要求があれば終了する
作ってみよう
実際に作ってみる → Pythonコマンドの作成手順