この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)
図形描画の例を示します。後半のrender()
関数の中に、図形の描画が入っています。
「example_pygame/draw.py」を示します。
import pygame
def main(): pygame.init() # Pygameを初期化 screen = pygame.display.set_mode((800, 600)) # 画面作成 running = True # 実行継続フラグ
while running: pygame.display.update() # 画面を更新 screen.fill(pygame.Color(0, 0, 0)) # 画面を塗りつぶす for event in pygame.event.get(): # イベント if event.type == pygame.QUIT: running = False # 終了 render(screen) # 描画 pygame.display.flip() # 画面フリップ pygame.quit()
# 描画def render(screen): col = pygame.Color(64, 255, 64)
# 四角形 pygame.draw.rect(screen, col, (50, 50, 200, 150)) # 塗りつぶし pygame.draw.rect(screen, col, (300, 50, 200, 150), width=5) # 線描画
# ポリゴン points = [(550, 50), (750, 150), (650, 200)] pygame.draw.polygon(screen, col, points)
# 円 pygame.draw.circle(screen, col, (150, 350), 100, draw_top_right=True, draw_top_left=False, draw_bottom_left=True, draw_bottom_right=False)
# 楕円 pygame.draw.ellipse(screen, col, (300, 250, 150, 200))
# 円弧 from math import pi pygame.draw.arc(screen, col, (500, 250, 150, 200), 0, pi * 1.2, width=5)
# 線 pygame.draw.line(screen, col, (700, 250), (750, 450), width=5)
# 複数線 points = [(50, 500), (750, 500), (400, 550)] pygame.draw.lines(screen, col, closed=False, points=points, width=5)
if __name__ == "__main__": main()
実行した画面です。
処理の前半はmain()
関数の処理です。while
文の最後の方でrender()
関数を実行します。
import pygame
def main(): pygame.init() # Pygameを初期化 screen = pygame.display.set_mode((800, 600)) # 画面作成 running = True # 実行継続フラグ
while running: pygame.display.update() # 画面を更新 screen.fill(pygame.Color(0, 0, 0)) # 画面を塗りつぶす for event in pygame.event.get(): # イベント if event.type == pygame.QUIT: running = False # 終了 render(screen) # 描画 pygame.display.flip() # 画面フリップ pygame.quit()
render()
関数です。描画をおこないます。まずは四角形とポリゴンです。
# 描画def render(screen): col = pygame.Color(64, 255, 64)
# 四角形 pygame.draw.rect(screen, col, (50, 50, 200, 150)) # 塗りつぶし pygame.draw.rect(screen, col, (300, 50, 200, 150), width=5) # 線描画
# ポリゴン points = [(550, 50), (750, 150), (650, 200)] pygame.draw.polygon(screen, col, points)
円と楕円と円弧です。
# 円 pygame.draw.circle(screen, col, (150, 350), 100, draw_top_right=True, draw_top_left=False, draw_bottom_left=True, draw_bottom_right=False)
# 楕円 pygame.draw.ellipse(screen, col, (300, 250, 150, 200))
# 円弧 from math import pi pygame.draw.arc(screen, col, (500, 250, 150, 200), 0, pi * 1.2, width=5)
線と複数線です。
# 線 pygame.draw.line(screen, col, (700, 250), (750, 450), width=5)
# 複数線 points = [(50, 500), (750, 500), (400, 550)] pygame.draw.lines(screen, col, closed=False, points=points, width=5)
図形の描画はpygame.draw
の各関数でおこないます。第1引数が描画対象のSurface
、第2引数が色です。以降は各関数によって引数が異なります。width
に何も指定しなければ塗りつぶしです。0
より大きな数値を指定すると、その太さの線を描きます。
pygame.draw
の各関数の引数と戻り値をコードの形で示します。初期値がない引数は必須のものです。
まずは四角形の描画です。border_radius
やborder_~_radius
は角丸の指定です。
pygame.draw.rect( surface, # 描画対象 color, # 色 rect, # 四角形 width=0, # 線の太さ border_radius=0, # 角丸の指定 border_top_left_radius=-1, # 角丸 上左 border_top_right_radius=-1, # 角丸 上右 border_bottom_left_radius=-1, # 角丸 下左 border_bottom_right_radius=-1 # 角丸 下右 ) -> Rect
ポリゴンの描画です。points
は、座標(x, y)
のリストです。
pygame.draw.polygon( surface, # 描画対象 color, # 色 points, # 座標のリスト width=0 # 線の太さ ) -> Rect
真円の描画です。center
は中心位置、radius
は半径、draw_~
は、四分割したそれぞれの位置を描くかのbool
値です。
pygame.draw.circle( surface, # 描画対象 color, # 色 center, # 中心位置 radius, # 半径 width=0, # 線の太さ draw_top_right=None, # 上右を描くか draw_top_left=None, # 上左を描くか draw_bottom_left=None, # 下左を描くか draw_bottom_right=None # 下右を描くか ) -> Rect
楕円の描画です。長方形rect
に内接する楕円を描きます。
pygame.draw.ellipse( surface, # 描画対象 color, # 色 rect, # 四角形 width=0 # 線の太さ ) -> Rect
円弧の描画です。長方形rect
に内接する円弧を描きます。
開始角度start_angle
と終了角度stop_angle
はラジアンで指定します。ラジアンでは、pi * 2
(パイの2倍)が1周になります。pi
はfrom math import pi
でインポートできます。
pygame.draw.arc( surface, # 描画対象 color, # 色 rect, # 四角形 start_angle, # 開始角度 stop_angle, # 終了角度 width=1 # 線の太さ ) -> Rect
線の描画です。開始位置start_pos
、終了位置end_pos
は、タプルやリストで表した座標です。1つ目はアンチエイリアスなしです。2つ目はアンチエイリアスありです。
pygame.draw.line( surface, # 描画対象 color, # 色 start_pos, # 開始位置 end_pos, # 終了位置 width=1 # 線の太さ ) -> Rect
pygame.draw.aaline( surface, # 描画対象 color, # 色 start_pos, # 開始位置 end_pos, # 終了位置 blend=1 # 非推奨、ブレンドの有無 ) -> Rect
複数線の描画です。points
は、座標(x, y)
のリストです。1つ目はアンチエイリアスなしです。2つ目はアンチエイリアスありです。
pygame.draw.lines( surface, # 描画対象 color, # 色 closed, # 線を閉じるかのbool値 points, # 座標のリスト width=1 # 線の太さ ) -> Rect
pygame.draw.aalines( surface, # 描画対象 color, # 色 closed, # 線を閉じるかのbool値 points, # 座標のリスト blend=1 # 線の太さ ) -> Rect
この連載は、同人誌『PythonとPygameで作る レトロ風RPG 全コード』を一部抜粋して編集したものです。
同人誌本編には、ゲーム本体のソースコードや、各種のサンプルコード、Windowsで実行できるEXEファイルが付属しています。PDFで290ページの本になります。ぜひ、こちらもご購入ください。
(2024-03-28:ver1.0.4 に更新、2024-03-10:ver1.0.3 に更新)