Pygame Zero① Pygame Zeroの基本

Image from Gyazo

Pygame Zero

Pygame ZeroはPythonでゲームを開発するためのライブラリです. 利用可能なAPIやイベントループなどの仕組みが簡略化されており,初学者が教育目的でゲームを開発するには適しています. 美麗なグラフィックの3Dゲームなどの開発は困難ですが,シューティングやパズルなどの2Dゲームの開発を目標に頑張りましょう(3Dゲームの開発にはUnityがオススメ).

準備

Muエディタを起動したら,Pygame Zero モードを選択しましょう. これまでとは異なり,保存用のフォルダを作成し,ソースファイルをフォルダ内に保存します. 「chapter8」という名前でフォルダを作成した後で,ツールバーにある「保存」をクリックして,「game.py」という名前でフォルダ内にスクリプトを保存します.

ウィンドウの初期化

ゲームを表示するためのウィンドウを作成しましょう. ウィンドウの幅と高さを設定するにはWIDTHHEIGHTという変数に代入します. ここでは,幅を640px,高さを480pxに設定しています. また,draw()という関数を定義し,関数内でscreen.fill()を実行します. screen.fill()は,ゲームを描画するスクリーンの背景色を設定する関数です. 引数に,色名を表す文字列や,RGB(赤・緑・青)のタプルを指定します.

WIDTH = 640 # ウィンドウの幅
HEIGHT = 480 # ウィンドウの高さ

def draw():
    # 背景色が白のスクリーン
	screen.fill("white") # screen.fill((255, 255, 255))でもOK

Image from Gyazo

図形やテキストの描画

図形の描画

スクリーンに直線,正方形,円などの図形を描画するには,次の表に示す関数を用います. スクリーンの左上が原点(0,0)であり,右方向にX軸,下方向にY軸が伸びています. このため,スクリーンの四隅の座標は,右上が(640, 0),右下が(640, 480),左下が(0, 480)となります.

関数 説明
screen.draw.line(start, end, color) 直線を描く
screen.draw.rect(rect, color) 正方形を描く
screen.draw.filled_rect(rect, color) 塗りつぶしの正方形を描く
screen.draw.circle(center, radius, color) 円を描く
screen.draw.filled_circle(center, radius, color) 塗りつぶしの円を描く
def draw():
    # 背景色が白のスクリーン
    screen.fill(color="white")

    # 始点(50, 50)から終点(200, 50)に黒色の直線を描く
    screen.draw.line((50, 50), (200, 50), "black")

    # 左上の座標(50, 150),幅100,高さ100の赤色の正方形を描く
    screen.draw.rect(Rect((50, 150), (100, 100)), "red")

    # 左上の座標(50, 300),幅100,高さ100,緑色の塗りつぶしの正方形を描く
    screen.draw.filled_rect(Rect((50, 300), (100, 100)), "green")    

    # 中心(300, 150),半径50,青色の正方形を描く
    screen.draw.circle((300, 150), 50, "blue")

    # 中心(300, 300),半径50,黄色の塗りつぶしの正方形を描く
    screen.draw.filled_circle((300, 300), 50, "yellow")

Image from Gyazo

例題1

自由にスクリーンに図形を描いてください.

テキストの描画

テキストをscreen.draw.text()で描画することもできますが,日本語フォントを描画する際には,保存用フォルダに fonts というフォルダを作成して,フォントファイル(.ttf)を配置する必要があります. ここでは,情報処理推進機構(IPA)が公開しているIPAexフォントをダウンロードして利用することにしましょう. 上記のサイトからIPAexゴシックを表す「ipaexg.ttf」をダウンロードしたら,fontsフォルダにコピーしましょう.

関数 説明
screen.draw.text(text, position, color="color") テキストを描く
def draw():
    # … 省略 …

    # 左上の座標(400, 150),フォントサイズ24,黒色の文字列「ABC」を描く
    screen.draw.text("ABC", (400, 150), color="black")

    # 左上の座標(400, 300),フォントサイズ32,黒色の文字列「あいう」を描く
    # IPAexフォント https://moji.or.jp/ipafont/
    screen.draw.text("あいう", (400, 300), fontname="ipaexg", color="black", fontsize=32)

環境によっては文字コードが原因で実行できないことがあります. ソースコードの冒頭に下記のマジックコメントを追加しておきましょう.

# -*- coding: cp932 -*-

Image from Gyazo

例題2

自由にスクリーンにテキストを描いてください.

画像の描画

画像ファイルを読み込みをスクリーンに描画するにはscreen.blit()を利用します. 保存用フォルダに images というフォルダを作成して,PNG形式の画像ファイルを配置する必要があります. ここでは,いらすとやで提供されている3種類の動物の画像(dog.pngcat.pngbear.png)を利用します. 画像サイズは幅が100px,高さが96pxです. 画像をダウンロードしたら,imagesに配置しましょう.

Image from Gyazo

Image from Gyazo

Image from Gyazo

screen.blit()の引数として,画像ファイルを指定する方法には2種類あります.

前者の方が簡単ですが,後者の場合はget_width()get_height()などの関数で,画像の幅・高さの情報を取得することができます. 状況に合わせて使い分けると良いでしょう.

関数 説明
screen.blit(image, position) 画像を描く
def draw():
    screen.fill("white")
    screen.blit("dog", (120, 200))
    screen.blit("cat", (270, 200))
    screen.blit("bear", (420, 200))
def draw():
    screen.fill("white")
    screen.blit(images.dog, (120, 200))
    screen.blit(images.cat, (270, 200))
    screen.blit(images.bear, (420, 200))
print(images.dog.get_width()) # -> 100
print(images.dog.get_height()) # -> 96

Image from Gyazo

例題3

自由に画像を表示してください. 画像サイズを変更したり,背景を透過にするには,PEKO STEPを利用すると良いでしょう.

課題

次の課題に取組んでください.

課題を完成させたらスクリプトを保存し,chapter8フォルダをZIPで圧縮してから,chapter8.zipという名前でファイルを提出してください.

Image from Gyazo

Image from Gyazo

Image from Gyazo

参考書籍

愛知県名古屋市にある椙山女学園大学 文化情報学部 向研究室の公式サイトです. 専門は情報科学であり,人工知能やデータベースなどの技術要素を指導しています. この公式サイトでは,授業で使用している教材を公開すると共に, ベールに包まれた女子大教員のミステリアスな日常を4コマ漫画でお伝えしていきます. サイトに関するご意見やご質問はFacebookまたはTwitterでお問い合わせください.