コンテンツにスキップ

チュートリアル

jpoke を初めて使う人向けに、インストールから最初の対戦・自作AIの作成までを順に進める。より深く知りたくなったら、末尾の「次の一歩」から目的別のサンプル・ドキュメントへ進める。

1. インストール

pip install jpoke

対応Pythonバージョンは3.11以降(requires-python = ">=3.11")。ランタイム依存ライブラリが ないため、インストール後はネットワーク接続なしに動作する。

2. 最初の一戦

Player を2体用意してポケモンを1匹ずつ持たせ、Battle に渡して play_out() で 決着まで自動的に進める。

from jpoke import Player, Battle

player1 = Player("Player 1")
player1.add_pokemon("ヒトカゲ", moves=["ひっかく"])

player2 = Player("Player 2")
player2.add_pokemon("フシギダネ", moves=["たいあたり"])

battle = Battle(player1, player2, seed=1)
battle.play_out(max_turns=100)

battle.print_logs("all")
winner = battle.winner
print(f"勝者: {winner.username if winner else '引き分け'}")

技・特性・持ち物・種族値などを何も指定しなければ、そのポケモンの標準的な値が自動で 設定される。多数回対戦させて勝率を比較したいだけなら Player.battle_against()examples/01_getting_started/01_quick_start.ipynb 参照)の方が手軽である。

3. ターンを覗く

play_out() は決着まで一気に進めるが、start() + step() で1ターンずつ手動で 進めながら、print_logs() で何が起きたかをその都度確認できる。

from jpoke import Battle
from jpoke.players import RandomPlayer

player1 = RandomPlayer("Team A")
player1.add_pokemon("ピカチュウ", ability="せいでんき", item="いのちのたま", moves=["かみなり"])

player2 = RandomPlayer("Team B")
player2.add_pokemon("ゼニガメ", ability="げきりゅう", item="オボンのみ", moves=["なみのり"])

battle = Battle(player1, player2, seed=1)
battle.start()  # 選出・初期繰り出しが行われる

while battle.can_continue(max_turns=30):
    battle.step()
    battle.print_logs()
    print("-" * 50)

RandomPlayer は合法手からランダムに行動を選ぶ Player の既定実装である。自作の方策を まだ持っていない段階での動作確認に使える。

4. 自分のPlayerを作る

Player を継承して choose_command() をオーバーライドすると、独自の対戦AIになる。 現在の盤面(battle)から選べる行動の一覧は battle.available_commands(self) で 取得できる。

from jpoke import Battle, Player
from jpoke.enums import Command

class MyPlayer(Player):
    def choose_command(self, battle: Battle) -> Command:
        commands = battle.available_commands(self)
        return battle.decision_random.choice(commands)  # まずはランダムに1つ選ぶ

ダメージが最大になる技を選ぶ、木探索で数手先まで読む、といった発展形は examples/01_getting_started/03_custom_player.ipynbBattle.calc_damages() を 使った最大火力方策)や examples/02_tree_search/MinimaxPlayer を継承した 木探索AIのカスタマイズ)を参照。

5. 次の一歩

目的に応じて、以下から進むとよい。

知りたいこと 参照先
基礎をもう少し広く知りたい examples/01_getting_started/ — 本チュートリアルの元になった導入サンプル一式
対戦AIを開発したい examples/02_tree_search/MinimaxPlayer を継承した木探索AIのカスタマイズ
致死率・ダメージ計算がしたい examples/03_lethal/battle.calc_lethal() による確定数・致死率計算
戦術研究(多数回対戦・ゲーム理論)がしたい examples/05_advanced/ — 多数回対戦の統計比較、Nash均衡の近似など
メソッド名やコード例からクラスの使い方を早引きしたい 早見表
全メソッド・全属性のシグネチャを網羅的に確認したい APIリファレンス(自動生成)