[ゲーム]簡単!今日から出来るゲーム開発~Pygameへの招待
2006年11月09日(木)18:30|imoto
井元です。
今回はPygameのインストールから超簡易スケルトンの作成までをご紹介していきたいと思います。 時間のない方も多いかと思いますので、駆け足でご紹介していきます。
PygameとはPythonのモジュールであり、これはSDLというライブラリを使用して作られています。 SDLとはWikipadiaによると
SDL (Simple DirectMedia Layer) はゲームなどのマルチメディア関係のソフトウェアを開発する時の手間を省くため、グラフィックやサウンド等のAPIを提供するライブラリの一つ。 Linuxを中心に、Windows、Mac OS、BeOSなど主要なOSで使用可能である。SDL自身はほとんどC言語で書かれているが、インターフェイス部は他のプログラミング言語のいくつかにも移植されている。 単体では基本的な機能しか得られないが、フォントやネットワーク、スプライトなどの多数のライブラリが公開されている。
という風に説明されています。 短く説明すると、複数のプラットフォームで統一的に使えるマルチメディアAPIという所でしょうか。 このSDLのおかげで簡単に複数プラットフォームで動くゲームを作ることが出来るというわけです。 これから数回に渡ってPygameを使ったゲーム作りを紹介して行きたいと思います。
今回は初回ということであまりゲーム作りらしい内容ではありませんが、
- PythonとPygameのインストール
- 開発環境のインストール
- 超簡易スケルトン作成
といった内容をご紹介いたします。
PythonとPygameのインストール
今回はWindowsプラットフォームでのインストール方法を説明します。 出来れば”MacOS環境で”というちょっと珍しい方を説明したかったのですが、自分の勉強不足でまとめられませんでした。 これについては、また機会があったらご紹介したいと思います。
では、気を取り直して進めていきます。 まずはPythonをインストールしましょう。 この記事を書いている現在のPythonの最新版は「2.5」ですが、Pygameの現時点での最新版(1.7.1)は「2.4.X」までしか対応していないので、バージョン2.4.3を下記からダウンロードしてローカルに保存します。
http://www.python.org/download/releases/2.4.3/
保存したpython-2.4.3.msiをダブルクリックしてインストールウィザードに従えば問題なくインストールが終了するでしょう。 次に下記からPygameの1.7.1をダウンロードしてインストールします。
http://www.pygame.org/download.shtml
これもPythonと同じく保存したpygame-1.7.1release.win32-py2.4.exeを起動させてインストールウィザードに従えば問題なくインストールされるはずです。
開発環境のインストール
そして、ここから一工夫。 開発環境も整えないとやる気が起きないので、Eclipseを使って開発できるように準備します。 まず、Eclipse本体とEclipseでPythonの開発が出来るようにするプラグインPyDevをダウンロードしてきます。 EclipseはJREなども必要な為、下記URLから必要であればJREもダウンロードしてきます。
http://eclipsewiki.net/eclipse/index.php?%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB#r18a72f5
PyDevは下記URLからダウンロードできます。 http://pydev.sourceforge.net/download.html
EclipseとJREはインストールウィザードに従えば問題ないでしょう。 PyDevは圧縮ファイルを展開するとeclipseというフォルダが展開されますので、その中身を先ほどインストールしたEclipseのカレントフォルダにコピーします。 それでPyDevはインストール完了です。
次に、Eclipseを起動します。 workspaceなどのパスを設定しろと聞かれますので、任意のパスを指定して下さい。 起動したらメニューバーからウィンドウ→設定と移動して設定画面を開きます。 設定画面の左側にあるメニューからPyDev→Interpreter – Pythonを選びます。 開いた画面がPythonエンジンのパスを設定する画面になりますので、一番右上の「新規」ボタンをクリックして、先ほどインストールしたPython2.4のexeファイルを選択して設定します。 これで、PythonをEclipseで実行できるようになりました。
では、次に簡単なスケルトンを作ってみましょう。
超簡易スケルトン作成
ここでは、「Hello World」というタイトルのウィンドウを作り、その中に「Hello World!」と表示するプログラムを作ります。 まずは、ソースコードを下記に記します。
import pygame
from pygame.locals import *
# pygameの初期化
pygame.init()
# 画面を作る
screen = pygame.display.set_mode( (300, 300) )
# タイトルを設定
pygame.display.set_caption('Hello World')
# フォントを設定する
font = pygame.font.Font(None, 32)
text = font.render('Hello World!', False, (255,255,255))
while 1:
# 画面に文字を書く
screen.blit(text, (0,0))
# 画面を更新して、変更を反映する
pygame.display.flip()
# イベントチェック
for event in pygame.event.get():
# 終了ボタンが押された場合
if event.type == QUIT:
exit()
# ESCキーが押された場合
if (event.type == KEYDOWN and event.key == K_ESCAPE):
exit()
では、順を追って説明しましょう。 まずは一番最初。
import pygame from pygame.locals. import *
これは、pygameのモジュールをインポートしています。 これを実行しなければPygameが使えません。 pygame.locals以下にはPygameが使う定数値が入っています。 必ずしも全部インポートする必要はありませんが、全部インポートしてしまった方が便利です。
次はウィンドウの設定をしている部分。
# pygameの初期化
pygame.init()
# 画面を作る
screen = pygame.display.set_mode( (300, 300) )
# タイトル
pygame.display.set_caption('Hello World')
まずは、pygame.init関数でpygameに関する全てを初期化します。 この関数はimportで読込んだモジュールの各init()関数を内部で呼び出し順次処理します。 各モジュール毎に単体で初期化処理(init)を呼び出すことも出来ますが、余程特殊な場合でない限りはpygame.init()で全ての初期化処理を行ってしまうのが確実な方法です。
次に、pygame.display.setmode関数で表示する画面を生成しています。 この場合は300×300の領域を持つ画面を生成しており、返り値に生成した画面領域(サーフィスと呼びます)を返してくるので変数screenに代入しています。 サーフィスとは画像オブジェクトのようなもので、「フォント」「画像」など画面に表示するものは全てこの形式のオブジェクトで管理されます。 pygame.display.setcaption関数はウィンドウのタイトルを設定します。 ここでは「Hellow World」と設定しました。
次はフォントを設定している部分。
# フォントを設定する
font = pygame.font.Font(None, 32)
text = font.render('Hello World!', False, (255,255,255))
pygame.font.Font関数で32pointの大きさのフォントオブジェクトを取得しています。オブジェクトが返ってくるので変数fontに格納しています。 次に、font.render関数でフォントの(文字、アンチエイリアスの有無、色(RGB))を設定しています。 これはフォントのサーフィスを返してくるので変数textに格納しています。
最後に実行部分。
while 1:
# 画面に文字を書く
screen.blit(text, (0,0))
# 画面を更新して、変更を反映する
pygame.display.flip()
# イベントチェック
for event in pygame.event.get():
# 終了ボタンが押された場合
if event.type == QUIT:
exit()
# ESCキーが押された場合
if (event.type == KEYDOWN and event.key == K_ESCAPE):
exit()
ここでは「while 1:」として単純な無限ループにしています。 このループがないと一瞬ウィンドウが表示されてそのままプログラムが終了してしまうので、無限ループにしています。 まず、screen.blit(text, (0,0))関数で先ほどのテキストのサーフィスをウィンドウ画面に描画しています。(0,0)は描画する左端の座標です。 その後、pygame.display.flip()で画面を更新してテキストを反映させ、ウィンドウを表示します。 その下のfor文で行っているのはキーを押された時等のイベントチェックです。 この場合は終了ボタン(×ボタン)を押された場合か、ESCキーを押されたらプログラムを終了するようにしています。
駆け足ではありますが、これで一通りの動作を説明しました。 基本的には「ウィンドウを設定」して「ウィンドウに貼り付ける素材を読み込み」、そして「メインループでイベント処理を行いながらプログラムを実行し続ける」という形でゲームが作れるはずなので、そのスケルトンとしての意味は持てたかなと思っています。 これを作成するにあたり、サイト「Pygame入門」を参考にさせて頂きました。
最後に
今回はインストールと超簡易なスケルトンプログラムの紹介にとどまりましたが、今後は少しずつ本格的なプログラムを作って紹介していく予定です。 実際に上記プログラムを走らせてみて、ゲーム作りが簡単に行えそうな感触を感じて頂けたなら幸いです。
参考サイト
Pygameオフィシャルサイト-http://www.pygame.org/news.html Pygame 関連文書-http://www.unixuser.org/~euske/doc/pygame/index.html Pygame入門-http://www.halb-katze.jp/pygt/index.html