今回はPythonでテトリス風ゲームをつくる方法を完全解説していきます。
個人的にゲームを作るのって、初心者プログラマのレベルアップにちょうどいいなと思うんですよ。
複雑な処理の実行とか、オブジェクトの操作とか学べますから。
そんなわけで今回はPygameというPython用のゲームモジュールを利用して、テトリスゲームを作る方法を丁寧に解説していきます。
全4回の記事構成の予定です。
もくじ
本記事の対象者
先に本記事の対象者についてお伝えしておきます。
・Pythonのコードを動かす環境を持っている
この記事ではPythonの環境構築の方法については触れませんので、事前にPythonが動く環境をご用意いただければと思います。
初心者の方でしたら、Anaccondaを使うのが一番簡単かと思います。
こちらの記事に方法がまとめてありますので、環境構築がまだの方は先にこちらをお願いします。
初心者のためのFlaskアプリ開発① AnacondaでPythonの開発環境をつくる
・Pythonの基本的な文法がわかる
高度な知識はいらないです。
基本の分岐や繰り返し命令、あとはClassやDefなどについての知識があればOKです。
レベル的には、こちらの入門書を一通り読んでいるレベルを想定してます。
この本は僕もPythonを始めたときに使った本でとてもおすすめです。
非常にわかりやすくまとまっています。
プログラムの全体像
さて、次はプログラムの全体像について紹介していきます。
こちらのソースコードを非常に参考にさせていただきました。
上記のゲームはとても完成度が高く、普通のテトリスと遜色なく遊べます。
今回解説するのは、上記のコードを参考にしつつ僕が作成した、非常にシンプルな機能のみのテトリスゲームです。
ざっくり以下のような機能を持っています。
・ランダムにブロック(3種類)が上から落ちてくる
・ブロックは方向キーで左右に移動、zキーで回転できる
・ブロックが一列に並べば消滅、天井までいっぱいになるとゲームオーバー
処理の流れを追いやすくするため、機能はシンプルなものに絞り、余計なグラフィックなども排除しています。
それでは、さっそく順に流れを追っていきましょう。
Pygameのディスプレイをつくる
まずはゲームの画面を実装していきます。
先にコードを貼っておきますね。
import pygame from pygame.locals import * import sys #ウィンドウサイズの設定 BOX_WIDTH,BOX_HEIGHT = 640,480 #インポートしたpygameモジュールの初期化 pygame.init() #ディスプレイに値を入れていく BOX = pygame.display.set_mode((SCR_WIDTH,SCR_HEIGHT)) pygame.display.set_caption(u"テトリス風ゲーム") #マウスカーソルを非表示にする pygame.mouse.set_visible(False)
はじめにPygameのモジュールをインポートしています。
pipでインストールが必要なので、pip install pygameを忘れないようにしてください。
次に、ゲームウィンドウの高さと幅を設定し、pygameモジュールの初期化を行っています。
pygame.init()がpygameの初期化を行うメソッドです。
詳しくはこちらのドキュメントを参照してください。
pygameドキュメント
モジュールの初期化ができたら、display.set○○という記述で、pygameモジュールに情報を与えていきます。
今回は、ウィンドウのサイズとタイトルの情報を与えています。
最後にmouse.set_visibleを使ってマウスカーソルを非表示にしておきます。
mouse.set_visibleは、引数にboolean型を取ることでマウスカーソルの有無を設定します。
他にも色や音など、様々な情報を与えることができますので、詳しくはドキュメントを参考にしてください。
フレームレートを設定する
次にフレームレートを設定します。
僕はゲームを作るのは今回始めてだったので、フレームレートという言葉を知りませんでした。
なので一項目使って解説します。
フレームレートとは、画面の更新時間を指し、fpsという単語で表されます。
イメージとしては、パラパラマンガのコマ数といったところでしょう。
このfps、つまりはコマ数が大きければ大きいほど、画面はなめらかになります。
pygameでは、時間を監視するためのtimeモジュールを利用して、fpsを設定していきます。
timeモジュールには、以下のようなメソッドがあります。
・pygame.time.get_ticks – ミリ秒単位で時間を取得します。
・pygame.time.wait – 一定時間プログラムを停止します。
・pygame.time.delay – 一定時間プログラムを停止します。
・pygame.time.set_timer – 一定の間隔で、イベントキューにイベントを繰り返し発生させます。
・pygame.time.Clock – プログラム内の時間管理に役立つオブジェクトを作成します。
pygameドキュメントより
今回は、fpsという変数に、pygame.time.Clockオブジェクトを格納します。
このClockオブジェクトには、fpsを計算するためのメソッドを持っており、非常に便利に使うことができるようです。
まとめ
さて、少し長くなってきましたので、続きは次の記事にてまとめていきます。
次回は、テトリスゲームの核になるブロックなどのオブジェクトのクラス設計について書く予定です。
お楽しみに!
参考
pygameドキュメント
Github:テトリス
画像の移動と跳ね返り処理
Python入門におすすめの書籍
修正が必要です。
修正前
BOX = pygame.display.set_mode((SCR_WIDTH,SCR_HEIGHT))
修正後
BOX = pygame.display.set_mode((BOX_WIDTH,BOX_HEIGHT))
宜しくお願い致します。