言われて読み飛ばされてしまうので、トップレベルステートメントの記法を使用しましょう。同じワークスペースで拡張子が.csのファイルを開いてしまうとインテリセンス等が効かなくなる場合があるので、拡張子を間違えないようにしましょう。スクリプトファイルの拡張子は.csxです。万一インテリセンスが効かなくなっても、.csなファイルを閉じてからVSCodeを開きなおせば問題ありません。ImplicitUsingと思われる暗黙的にusingされている名前空間もあります。一覧を見つけられなかったので、VSCodeのオートコンプリートを使って、aからzまで一文字打っては補完候補を見ていくという頭の悪い手法で調べたところ、dotnet-scriptで暗黙的にusingされているのはおそらく以下の通りです。System.Console;コンソールアプリケーションとも少し違うようです。staticされているおかげで、標準出力がWriteLine()で済むので楽です。1.0.0"のように書くことで参照できます。これを追記した後はVSCodeを開きなおさないと、名前空間等をVSCodeが認識してくれないのが難点です。filepathで行えます。initしていればlounch.jsonが生成されているはずなのでF5でもいいでしょう。filepathで行えます。ワークスペース直下にあるファイルをpublishできないので、コンパイルしたい場合は一段下の階層に入れましょう。詳細な記法はGitHubを見るといいと思います(ほぼトップレベルステートメントと変わりませんが)。トップレベルステートメントやImplicitUsingが分からない場合、アドベントカレンダー7日目の私の記事を見ていただければと思います(露骨な宣伝)。終わりにというわけで、dotnet-scriptによるスクリプト実行によって、C#で快適に書き捨てプログラムを書けるようになりました。2022の8日の記事です。担当はMrMocchyです。作成したプログラムはGithubに上げていますので全体をご覧になりたい方はこちらへどうぞ。この記事ではゲームの自動化という内容を扱っています。これはゲーム開発者が想定していないだろう遊び方ですが、やっていることはプレイヤーの操作をプログラムに代替させているだけです。リソースを違法に爆増させるような類のチートではないのでお目こぼしください。このゲームをやったことがないと何言ってるのか分からない部分も多いとは思いますが、そういうものだと思ってください。2というタワーディフェンスゲームを長いこと遊んでいるのですが、これはゲーム性として「プレイして得たリソースでタワーを強化し、次のプレイへ」という周回を繰り返す、盆栽ゲーと呼ばれることもあるタイプです。ステージごとにマップも敵の種類も大きく変わる、タワーと敵の相性により与えるダメージが0%~200%になる、無限の強化と無限の敵、etc...、とまあここはレビューサイトではないので切り上げますが、自分にとっては非常に奥の深いゲームだと思っているわけです。やりこんでいくとステージごとにある程度の最適解のようなものが見えてくるわけで、それを自動化に定評のあるらしいpythonを用いて放置ファームしようというわけです。プログラム全体の流れ上で書いた最適解、すなわちどこに何をするのか、というのをcsvに羅列してそれを順に行わせます。csvファイルには[行動、座標、オプション](後ろ2つはあったりなかったり)を列挙しています。別の[行動、カテゴリ、ホットキー]を並べたhotkeys.csvから読み込んだ辞書型を参照して、[座標、カテゴリ、ホットキー]などを持つクラスのリストとして読み込みます。現在の所持金などからその行動をできるか判断して実行するというループでプレイさせます。現在の所持金や設置・アップグレードのコストなどはPyOCRを使って画面から文字認識で読み取っています。2にはホットキー機能があり、キーボード入力一つでタワー設置やアップグレードからゲーム進行速度変更までできます。これをpyautoguiで操作しました。移動の矢印キーはホットキーで変更できず、pyautoguiが利きませんでした。Microの互換機らしきものを購入しました。USB/HIDデバイス(仮想キーボード)として活用するPC⇔Arduinoのシリアル通信をPython3でやってみたWindowsのコマンドラインからUSBデバイスについて調べる方法を参考に、pythonからArduinoにシリアル通信で文字を送り、それに応じたキーボード入力操作をさせました。}}画像認識部分Tesseract+PyOCRで簡易OCRを試してみるPyocrとTesseractで精度の高いOCRを作ってみようPythonでOCRを実行する方法などを参考に、ゲーム画面から現在の所持金やコストなどの文字の部分を切り取って文字認識で読み込みました。ゲーム内で3:4のように表示された座標を読み取る際に特にうまく読み取れないことが多かったので、認識精度を上げるためにいろいろ試しました。その中で効果があったと思われるものを挙げます。切り取る画像の範囲を読み取りたい文字列いっぱいにまで狭める。黒字に白文字は誤認識しやすいようなので、で反転して二値化。Imageを使用)上の二値化ついでに画像を横に拡大して、細い半角の文字を細めの全角くらいにする。(数字の認識力は向上したが、コロンを誤認識することも増えたので結局使わなかった)切り取る部分によって二値化の閾値を調整tesseract_layoutという読み取る方法(?)を変更する引数は、いろいろ試したけど結局6でよさげだった。指定の画像を画面から見つけるのを用いて、設置コストの画面切り替えやポーズ画面の判定をしたりしています。txtその他csvファイルから読み込んだプレイ動作のアルゴリズムはAlgoという名のclassのリストで保存。設置と同時のアビリティ取得や複数回アップグレードなどの特殊な命令は、複数のAlgoを続けてリストに追加している形です。algos.append(Algo(line=lineNo,name=l[0],pos=pos,cate=hotkeys.dic[l[0]][0],hotkey=hotkeys.dic[l[0]][1:]))行動を実行する前にそれを可能か現在地、コスト、ゲームの状態(ポーズ画面やウィンドウがバックグラウンドにあるなど)を画面から読み取ってから判断します。実行に成功したかを読み取って成功するまで繰り返すという方法も取れますが、あんまりスマートではないと思ってやめました。一応学習目的でもあるので。Falseまた、ウィンドウがアクティブでなくなったときはカウントダウンして終了、ポーズ画面になるとコンソールにcontinueと入力すると続ける、などのユーティリティ的機能をつけました。Trueそして肝心のプレイのアルゴリズムのcsvですが、未完成です。最初の数分はプレイできているのでそのまま追加すれば大丈夫だろうとは思います。ファーム効率のいいステージはマップも広いのでもっと大変ですが。右下の操作ログ以外は単なるプレイ画面なんですが。所持金(上部のコインのアイコン)の認識のため、全てのエフェクトを非表示にしているので映像でも地味です。後書き夏にBlenderのアドオン開発で初めて本格的に触ったpythonですが、やはり自動化にも手を出してみたいを思って始めました。普段の作業で自動化の需要がなかったのでゲームの自動化にしました。切り抜く画像の座標合わせを始め、何かとゲーム画面を参照しながらやらなきゃならなかったので起動しっぱなしだったんですが、プレイしていないのにSteamでのプレイ時間が20時間くらい伸びてました。起動したまま飯食ってた時間も含めているので実際は不明ですが。以上、pythonとArduinoと画像認識でタワーディフェンスゲームの自動化をしてみた、でした。ご読了ありがとうございました。記事中の〇はただの検索避けです音MADをつくろう音MADを作る動機はファンアートなどと同じですが、音MADに使われる技術は他のことにも使えます。基本的にDAWとvocalshifterの技術なので。元ネタ(素材)の作者に訴えられた場合、確実に負けます。音MADを作るなら、著作権者に目を付けられないよう、黙認されるよう常に心がけましょう。商用利用が許可されている素材だけで作れば広告を付けることはできますが、それが面白くなる確率はかなり低いです。そもそも儲けようと思わない方がいいです。