全くのゼロから始めるボードゲームのプログラミングと機械学習 [6日目]


前回の振り返り

全くのゼロから始めるボードゲームのプログラミングと機械学習 [5日目] - Qiita

  • ここまでのあらすじ
  • 一旦参考書から脱却
  • PythonのIDE(統合開発環境)PyCharmを導入

9ヶ月ぶりにプロジェクトを再開いたしました。果たしてどこまで到達できるやら…

PyCharmとGithubの連携

本格的にプログラムを書いて行くということでIDEはPyCharmを導入致しました。
あとはバージョン管理のためにGithubと連携させてみました。ソースをクラウド管理するとどの環境からでもアクセスできてほんと便利ですね。

PyCharmからGitHubへの連携 - Qiita

操作は特に問題なく直感的に可能ですね。ただはじめはGitがメニューに見当たらず往生いたしました。VCSメニューから有効化するとともにGit自体をローカルにインストールしないと駄目みたいです。当たり前といえば当たり前か。。

とりあえず画面にタイルを表示してみる

ではでは、いざボードゲームの実装に取り掛かってみます。再現するゲームは「カルカソンヌ」と呼ばれるタイルと駒を使った名作です。タイルを表示しないことには始まらないというわけで、まずはスタートタイル1枚をウィンドウ内に表示してみます。

なんてことはないプログラムですがこれだけでもゲームっぽい感じがありちょっと感動します。ボードを管理しやすいようグリッドを引いており、それぞれ四角形の図形描画を行ってます。

    (x,y) = (2,2)  #タイル座標
    start_tile = pygame.image.load("tile.png").convert_alpha() # タイル画像読み込み
    rect_start_tile = start_tile.get_rect() # 画像領域取得
    rect_start_tile.center = (100*x+50, 100*y+50) # 座標からタイル位置補正
    screen.blit(start_tile, rect_start_tile) # 画像の描画

左上のグリッドを(0,0)座標としてボードの管理を行ってます。スタートタイルは(2,2)としてウィンドウ内の座標に補正して表示させています。特に難しいことはなし。タイルの回転などをどう管理していくかは今後の課題ですね。

タイルのクリック判定

続いて肝となるタイルのクリック判定も作ってみました。

    if (event.type == pygame.MOUSEBUTTONDOWN) and (event.button == 1) : #クリックイベント取得
        if rect_start_tile.collidepoint(event.pos): # タイルの領域をクリック
            print("hit")
        else:
            print("out") # タイル外をクリック

タイルをクリックするとhitが表示され、タイル外だとoutが表示されます。実際のところゲームの中で配置されているタイルをクリックすることはないと思いますが、ゲームの操作として類似の処理は必要となるはずなので試してみた感じです。下記を参考にさせて頂きました。

Python - pygame 画像範囲のクリック|teratail

今後の予定

  1. ボードゲームをプログラミング
    1. Pythonの基礎勉強
    2. Pygameの基礎勉強
    3. ボードゲームの実装 👈
  2. ボードゲームのAI作成
  3. 機械学習によるAI強化

ゲームに必要となる要素をコツコツ実装していきます。

今回の振り返り

  • やったこと
    • Githubを初めて使ってみた
    • ボードゲームの実装を始めた
    • 画像を表示してみた
  • わかったこと
    • クラウドでのソース管理は便利
    • GitをインストールしないとGithubへ連携できない
    • クリックイベントの取得は結構簡単
  • つぎにやること
    • タイルクラスの実装
    • タイルを回転させてみる