python学習を行ってきて、そろそろマウスやキーボードの動きを反映させたり、モノを動かしたりしてみたいなということで、その動きをもつ代表的なモノ「ゲーム」を作る中で学習してみたことについてアウトプットします。
使用ライブラリは「pygame」で、教科書として「ゲームを作りながら楽しく学べる Pythonプログラミング」田中賢一郎 著を用いて勉強しました。
pygameを用いた勉強として、動きやマウスやキーボードの動きの反映はもちろん、class(クラス)についての理解が少し進みました。
pythonの基礎を学んだ際に、オブジェクトやクラスやなんやらといった果たして何に使うのだろうというモノたちについて、実際に使うことで「何それおいしいの?」から「なんとなくわかる気がする」ぐらいまでは成長できた気がするので、ぜひ基礎を一周した後に取り組んでみてはいかがでしょうか。
環境
- OS:Mac
- 使用環境:Python3.7、VS Code
- 使用ライブラリ:pygame
参考図書
「ゲームを作りながら楽しく学べる Pythonプログラミング」
田中賢一郎 著
株式会社インプレスR&D 発行
pygameインストール方法
pythonの他のライブラリと同様にターミナルで
pip install pygame
と入力するとインストールすることができます。
VSCodeで使用するときの注意点
VSCodeでpygameを使用する際にとある設定をしないとエラーがでてしまいました。
これを解決するのに2〜3時間ぐらい格闘しましたがなんとか解決できたので、アウトプットします。
pygameをインストールして使用すると下記のようなエラーが出ました。
No name 'QUIT' in module 'pygame.locals'
Module 'pygame' has no 'init' member
Module 'pygame' has no 'quit' member
この解決方法としては、VSCodeのsettings.jsonの部分に
"python.linting.pylintArgs": [
"----extension-pkg-whitelist=lxml"
]
もしくは
"python.linting.pylintArgs": [
"--extension-pkg-whitelist=pygame"
]
と入力するとエラーが出なくなります。
どうもVSCodeはセキュリティ的なものがかかっているらしくそのままだとpygameにアクセスできずにエラーが出るそうです。上記の文を追記することで、pygameへのアクセスを許可することができるようになるため、エラーが解消されるっぽいです。(自信がないのでもし間違えていたらご指摘お願いします。)
参考URL
・Why does it say that module pygame has no init member?
https://stackoverflow.com/questions/50569453/why-does-it-say-that-module-pygame-has-no-init-member
・【VSCode】pygame.init()の「E1101:Module ‘pygame’ has no ‘init’ member」エラーを消す方法
https://blog.qs-grct.com/2018/11/05/231549/
この本から学べたこと
各種ゲームの基本的な作成方法
この本からはpygameの基本的な使い方をはじめ、横スクロールゲーム、マインスイーパー、ブロック崩し、テトリスなどの計9種類のゲームを作製することができます。コードに加え、設計の考え方や各パーツの解説が詳しく書かれており、モノを自動で動かしたり、手動で動かす方法はもちろん、pythonではじめに学習した基礎的なことが、実際にはどう使われているのかということを具体的に把握することができました。
その中で特につかむことができたのが「クラス」についてだと感じます。
クラスについて
上記で述べたクラスについて学んだことをアウトプットします。(間違えていたらご指摘お願いします)
実際にpythonで動かすモノをオブジェクトと呼ぶそうですが、それを抽象的な特徴を定義付けたモノをクラスという感じでしょうか。
例えばブロック崩しのゲームを作るとします。
この時、登場するものは「ブロック」「ボール」「パドル」の3つですね。
それぞれを定義していくと
ブロック・・・色有り、長方形、動かない
ボール・・・色有り、円形、自動で動く
パドル・・・色有り、長方形、手動で動く
と毎回同じようなことも定義しなければいけません。
ここでクラスを作ってまとめると
- 塗りつぶし色
- 描画する形(位置と大きさ)
- 移動速度
- 移動の向き
というクラスを作り、「ブロック」「ボール」「パドル」に応じたパラメーターを付けて具体的なモノにしていくことでより少ないコードで書くことができるそうです。ブロック崩しぐらいではそこまで恩恵が大きくなさそうですが、より複雑なモノを作るときに威力を発揮しそうです。また、少ないコードで書くことができれば、ミスも減ると思うので使いこなしたら便利そうですね。
まとめ
VSCodeでpygameというライブラリを使って、ゲームを作る中でpythonの基本的な形について学ぶことができたと感じました。
はじめはエラーに苦しめられましたが、解決する中でたくさん調べたので様々な副産物も得られたりと実りはあったかと思います。
特にクラスについては実際に使うことで理解が少し進みました。
ゲームの作製とかは解析には直結しない完全に趣味の領域になりますが、pythonをはじめに学習するなかでの基礎と呼ばれるリスト・タプル・辞書・ループ文・if文などそれだけやってもいまいち使い方に実感が持てないようなことを、実際に使ってみることで理解が深まりました。
基礎は実際に使う中で学ぶ方が良いのかなと体感しますね。
ミスなどでエラーに苦しんだけれど、なんとか解決してちゃんと動いた時はたとえ写経でも感動しますし、次も作りたくなる原動力になりますね。
pythonの基礎を勉強して次は何をしようかと悩んでる方がいたらぜひトライしてみてはいかがでしょうか。
コメント