#前回の振り返り
全くのゼロから始めるボードゲームのプログラミングと機械学習 [2日目] - Qiita
- Pythonでゲームを作るにあたって参考とする書籍の紹介
- Pythonを使い始めました
- Pythonはひとまず書籍に合わせて2系で
なんとかかんとかPythonを使い始めました。しかしながらゲーム制作への道のりはまだまだ長そうです。
#クラスの定義
前回で変数やループなどプログラムの初歩は学んだので、いよいよ核となるクラスに進んでみたいと思います。とはいえ、この辺も根本的なところはJavaと似通っているのでそれほど真新しい発見は無いかなと言う感じです。
class Tank(object):
def __init__(self, name):
self.name = name
self.alive = True
self.ammo = 5
self.armor = 60
def __str__(self):
(省略)
def fire_at(self, enemy):
(省略)
def hit(self):
(省略)
def explode(self):
(省略)
サンプルで作成した戦車のクラス。
__init__はコンストラクタでありクラス生成の際の初期情報を設定、__str__はprintなどで表示する際の情報となるようです。それぞれに「self」の引数が入っていることに注意。本書に関わらずどのサイトでもselfはお約束として入れてくださいと記載があります。とりあえず入れておけばいいのだなと理解はしましたが、詳しいところはまだ勉強できていません。
ゲームらしく戦車のクラスということで弾倉やアーマーと言った情報を持ってます。そしてfire_atという誰かに弾を撃つ関数や、弾がヒットした時のhit関数、そしてアーマーがなくなった際のexplodeつまり爆発の関数があります。
オブジェクトに対して状況や説明、そして行動といった情報がまとめて含まれていることはオブジェクト指向としては実に当たり前のことなんですが、こうやってゲームに当てはめて考えてみると実に効率的なものに感じますね。
#標準ライブラリの使用
Pythonの魅力は何と言ってもその豊富なライブラリではないかと自分は思います。標準でもかなりのモジュールやパッケージが用意されている(らしい)し、Pygameをはじめゲームに役立つパッケージや機械学習に必要なパッケージも数多く存在しています。とりあえずはボードゲームでよく使いそうなrandomパッケージを使ってみます。
>>> import random
>>> random.randint(1,6)
1
ボドゲ必須といえるサイコロ乱数です。importでrandomモジュールをインポートすることでランダムな整数を生成するrandint関数が使えるようになりました。
>>> from random import randint
>>> randint(1,6)
2
fromとimportでrandomのrandint関数だけインポートもできます。
##randomが生み出す乱数は本当の乱数ではない
randomが生み出す乱数は「疑似乱数」であり本当の乱数ではないという記載がありました。確かにコンピュータは真の乱数は生み出せないし、あくまで複雑な関数を経てランダムに見える数字を生み出しているだけと言えますね。ゲーム攻略動画とかを見てると「乱数調整」などといった言葉も耳にしますし、特定のパターンを任意に発生させたりしてますね。
randomにはseed関数があり、同じseedを設定してあげると毎回同じパターンの乱数を生み出します。
>>> random.seed(100)
>>> random.randint(1,100)
15
>>> random.randint(1,100)
46
>>> random.randint(1,100)
78
>>> random.seed(100)
>>> random.randint(1,100)
15
>>> random.randint(1,100)
46
>>> random.randint(1,100)
78
#今後の予定
- ボードゲームをプログラミング
2. Pythonの基礎勉強
3. Pygameの基礎勉強 👈 - ボードゲームのAI作成
- 機械学習によるAI強化
一通りPythonの基礎を学びましたので、次はいよいよPygameの章に入りたいと思います。
#今回の振り返り
- やったこと
- Pythonでクラスを定義
- モジュールをインポート
- わかったこと
- __init__や__str__の役目
- fromとimportの使い方
- randomは擬似乱数
- つぎにやること
- Pygameのインストール
- Pygameを使ってみる