拡張モジュールを使う重量級のライブラリとしてパッと思いつくものに、ゲームエンジンとして使われるPygameがある。ここでは、これを呼び出してみよう。
Pygameとは?
Pygameとは、フリーのクロスプラットフォームライブラリである「SDL」(Simple DirectMedia Layer)を、Pythonから簡単に扱えるようにしたライブラリである。このライブラリを利用すると、2Dグラフィック描画機能の他、スプライト管理を容易に行える。また、マウス、キーボード、ジョイスティック、効果音などのゲームで必須となる機能が用意されている。
今回、Pygameの入門記事を多数掲載している「Pygameでゲームを作ろう」にある「Pygame入門」内のサンプルを参考にさせていただいた。
まずは、上記サイトの「はじめの一歩」項にあるサンプル(リスト1)を、IronPythonから呼べるよう移植してみよう。
リスト1:「はじめの一歩」項にある元のサンプルコード(CPython用)
# -*- coding:sjis -*-
import pygame
from pygame.locals import *
SCR_W = 200 # 表示ウィンドウの横幅
SCR_H = 100 # 表示ウィンドウの縦幅
def main():
pygame.init() # pygameの初期化
screen = pygame.display.set_mode( (SCR_W, SCR_H) ) # 画面を作る
pygame.display.set_caption('Hello pygame') # タイトル
pygame.display.flip() # 画面を反映
while 1:
for event in pygame.event.get(): # イベントチェック
if event.type == QUIT: # 終了が押された?
return
if (event.type == KEYDOWN and
event.key == K_ESCAPE): # ESCが押された?
return
if __name__ == '__main__': main()
# end of file
上記リスト1のサンプルコードを、cextライブラリを使ってIronPython向けに書き換えると、リスト2のようになる。
リスト2: cextライブラリを使い、リスト1をIronPython向けに書き換えたもの
#import pygame
#from pygame.locals import *
from embedding import Import
sys = Import('sys')
sys.path.append('C:\\Python24\\Lib')
sys.path.append('C:\\Python24\\Lib\\site-packages')
pygame = Import('pygame')
SCR_W = 200 # 表示ウィンドウの横幅
SCR_H = 100 # 表示ウィンドウの縦幅
def main():
pygame.init() # pygameの初期化
screen = pygame.display.set_mode( (SCR_W, SCR_H) ) # 画面を作る
pygame.display.set_caption('Hello pygame') # タイトル
pygame.display.flip() # 画面を反映
while 1:
for event in pygame.event.get(): # イベントチェック
if event.type == pygame.QUIT: # 終了が押された?
return
if (event.type == pygame.KEYDOWN and
event.key == pygame.K_ESCAPE): # ESCが押された?
return
if __name__ == '__main__': main()
# end of file
変更点は、cextライブラリを経由しての呼び出しと、"from pygame.locals import *"という記述が行えなかったために"QUIT"を"pygame.QUIT"という風に、モジュール名の記述を付け加えたのみである。
画面3にCPythonとIronPythonの呼び出し結果を並べて示す。
ご覧の通り、少しの修正で、Pygameのような大きなライブラリも使用可能だということがわかる。