拡張モジュールを使う重量級のライブラリとしてパッと思いつくものに、ゲームエンジンとして使われる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の呼び出し結果を並べて示す。

画面3: CPython(右)とIronPython(左)の呼び出し結果

ご覧の通り、少しの修正で、Pygameのような大きなライブラリも使用可能だということがわかる。