Pygame Zero① Pygame Zeroの基本
Pygame Zero
Pygame ZeroはPythonでゲームを開発するためのライブラリです. 利用可能なAPIやイベントループなどの仕組みが簡略化されており,初学者が教育目的でゲームを開発するには適しています. 美麗なグラフィックの3Dゲームなどの開発は困難ですが,シューティングやパズルなどの2Dゲームの開発を目標に頑張りましょう(3Dゲームの開発にはUnityがオススメ).
準備
Muエディタを起動したら,Pygame Zero モードを選択しましょう. これまでとは異なり,保存用のフォルダを作成し,ソースファイルをフォルダ内に保存します. 「chapter8」という名前でフォルダを作成した後で,ツールバーにある「保存」をクリックして,「game.py」という名前でフォルダ内にスクリプトを保存します.
ウィンドウの初期化
ゲームを表示するためのウィンドウを作成しましょう.
ウィンドウの幅と高さを設定するにはWIDTH
,HEIGHT
という変数に代入します.
ここでは,幅を640px,高さを480pxに設定しています.
また,draw()
という関数を定義し,関数内でscreen.fill()
を実行します.
screen.fill()
は,ゲームを描画するスクリーンの背景色を設定する関数です.
引数に,色名を表す文字列や,RGB(赤・緑・青)のタプルを指定します.
WIDTH = 640 # ウィンドウの幅
HEIGHT = 480 # ウィンドウの高さ
def draw():
# 背景色が白のスクリーン
screen.fill("white") # screen.fill((255, 255, 255))でもOK
図形やテキストの描画
図形の描画
スクリーンに直線,正方形,円などの図形を描画するには,次の表に示す関数を用います.
スクリーンの左上が原点(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")
例題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 -*-
例題2
自由にスクリーンにテキストを描いてください.
画像の描画
画像ファイルを読み込みをスクリーンに描画するにはscreen.blit()
を利用します.
保存用フォルダに images というフォルダを作成して,PNG形式の画像ファイルを配置する必要があります.
ここでは,いらすとやで提供されている3種類の動物の画像(dog.png,cat.png,bear.png)を利用します.
画像サイズは幅が100px,高さが96pxです.
画像をダウンロードしたら,imagesに配置しましょう.
screen.blit()
の引数として,画像ファイルを指定する方法には2種類あります.
- 拡張子を除いた画像ファイルの名前を 文字列 で指定(例:“dog”)
- imagesオブジェクト を利用して指定(例:images.dog)
前者の方が簡単ですが,後者の場合は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
例題3
自由に画像を表示してください. 画像サイズを変更したり,背景を透過にするには,PEKO STEPを利用すると良いでしょう.
課題
次の課題に取組んでください.
課題を完成させたらスクリプトを保存し,chapter8フォルダをZIPで圧縮してから,chapter8.zipという名前でファイルを提出してください.