見出し画像

【Pythonでゲーム制作】Quixoを作ってみようとした

どうもです。あいぺけです。

いつもPythonで作ってみたシリーズ(勝手に言ってる)を投稿をしていますが、今回のは未完成なので「作ってみようとした」というタイトルになりました。

作ったゲームは、簡単に言えばマルバツゲームに近いゲームですが、コンピューター側の処理が上手くいかず、制作が進んでいません。

制作途中のものを出すのもどうかと思いましたが、開き直って 今日もさらしあげることにしました。


1. 制作物

一応、現状の動画がありますのでアップします。
Quixoは、勝敗判定は○✖️ゲーム同様に、自分のマーク(○か✖️)を一列に並べると勝利です。
ただ、コマ(○✖️の印)の置き方が特徴的なゲームになります。

今回は、音声をつけて動画を作成しました。
途中で面倒臭くなったので、字幕はつけませんでした。(笑)

動画にも出てきますが、コンピューターの処理にモンテカルロ法という手法を使って、コンピューターが戦略的にプレイしてくれるように試みました。

結果、動画のような無様をさらす結果となりました。

かなりざっくりとですが、処理の方法について 次の項目に書きます。


2. コード紹介

一応、現場のプログラムのコードを下記のGitHubに載せておきます。

コンピュータの処理にはモンテカルロ法を使用しました。

モンテカルロ法は、コンピュータの乱数を利用したシミュレーションで、駒が置ける箇所を総当たりして、理想の一手を求めるようにしています。

...しているつもりです。

最初に、打てる駒の箇所全てに、100回ずつ乱数を利用してコンピュータ内でゲームをプレイさせていき、勝った回数が最も多かった箇所の駒を選択するようにしています。

次に、スライドさせるために置く駒の位置も同様に、100回ずつ乱数を利用してシミュレーションを行い、その結果に基づいて駒の置く位置決めています。

動画の右側のシェルウィンドウの結果を見たところ、処理自体は上手くいっているはずです(願望)
(動画にはないですが、次の一手で勝てる場面でちゃんと選択されると勝利した回数が100と表示されていました)


3. 制作途中の感想

上手くいかない理由について少し考えてみました。

現状では勝敗が決まるまでシミュレーションを繰り返し、その勝った結果のみを記録しています。

これだと、例えば『10手先で勝った時』と『20手先で勝った時』のカウントが同じ1になるため、明らかにここにおけば勝てるというような状況でも、場合によっては、違った結果が生まれてしまうのではないかと思います。

つまり、少ない手で勝てる方に重きを置く必要があるかと思います。

もう一つは、上記の条件を取り入れても相手が勝つのを防ぐことが考慮できていない(自分がここに動かさないと相手に勝たれるという状況)ということかなと思いました。

…どうすればいいのかな。

4. 最後に

プログラムを使ってゲームを作る醍醐味は、人同士ではなくコンピュータとの対戦、コンピュータ側の処理を実装することかなと思っています。
(1人でも遊べるようになるしね...)

ただ、個人的にはまだ難しいところがあるなーと思います。

あと、今回のゲームでスライドする様子まで書いてないので、一瞬で移動して、コンピュータが何をどこに動かしたのか分からないんですよね。(笑)

ゲーム作りながら、あれがあった方がいいなーとか、こうした方がいいなーっていうのが出てきて、改良していくのも楽しくはあるのですが...

ちょっと、面倒臭いと思う時があります。(笑)

なので、気分転換に他のものを作ったり、考えたりするので、今回もそんな感じになりそうです。


今回も最後まで読んでいただき、ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?