トップページ -> データベース研究スタート -> Python のコンピュータグラフィックス・ゲームエンジン -> ゲームエンジン pygame を使ってみる
[サイトマップへ]  

ゲームエンジン pygame を使ってみる

キーワード: Pyglet, pygame, Python


前もって準備しておくこと

前準備として,Anaconda のインストールが終わっていること. 手順を下に説明しています.

Anaconda のインストール

Python 3 の開発環境である Anacondaをおすすめ.Window でのインストール手順は次の通りです(Linuxでも同様の手順です).

  1. https://www.continuum.io/downloads#windows

  2. Download」をクリックする.

  3. ダウンロードが始まるので確認する.

  4. ダウンロードした .exe ファイルを実行して,Anacondaをインストール.

Anaconda 3 での新しい Python 3.5 環境の作成

pygame を動かすのにPython 3.5 環境があった方が便利です.(2017/11 時点では 3.6用の pygame が無いようです)

  1. Anaconda プロンプトを管理者として開き,次のコマンドを実行

    ※ 「--name pygame」のところに書く名前「pygame」は何でもいいですが,あとで思い出しやすい分かりやすい名前がいいです.

    conda create --name pygame python=3.5 anaconda
    

  2. 「Proceed ([y]/n)?」のように表示されたときは y, Enter キー

ゲームの構成物

ゲームの構成物には,次のようなものがある.


Python の Pyglet, pygame のインストール

Pyglet はマルチメディアのライブラリ. pygame は Python で簡単にゲームが作れるようにするライブラリ

次の手順で,Anaconda 3 の Python 2.7 環境に dlib 及び関連パッケージをインストールします.

コマンドプロンプトを管理者として実行そして,次のコマンドを実行.

※ 「--name」のハイフンは2つ

activate pygame
pip install pygame
pip install Pyglet

※ 「Proceed ([y]/n)?」のように表示されたときは y, Enter キー

これで、インストール終了


pygame のプログラム例

ゲームアプリ(ただし,黒い画面が開くだけというアプリ)

Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

import os, sys
import pygame
from pygame.locals import *
class PyManMain:
    def __init__(self, width=640,height=480):
        pygame.init()
        self.width = width
        self.height = height
        self.screen = pygame.display.set_mode((self.width, self.height))
    def MainLoop(self):
        while 1:
            for event in pygame.event.get():
                if event.type == pygame.QUIT: 
                    sys.exit()

MainWindow = PyManMain()
MainWindow.MainLoop()

黒いだけの画面が開く.右上の「x」を1回だけクリックして終了.(ウインドウは消えないが,プログラムは止まる

  • 直線

    Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

    import os, sys
    import pygame
    from pygame.locals import *
    class PyManMain:
        def __init__(self, width=640,height=480):
            pygame.init()
            self.width = width
            self.height = height
            self.screen = pygame.display.set_mode((self.width, self.height))
        def MainLoop(self):
            pygame.draw.line(self.screen, (0,95,0), (0,0), (80,80), 5)
            pygame.display.update()
            while 1:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT: 
                        sys.exit()
    
    MainWindow = PyManMain()
    MainWindow.MainLoop()
    

    右上の「x」を1回だけクリックして終了.(ウインドウは消えないが,プログラムは止まる)

  • 四角形

    Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

    import os, sys
    import pygame
    from pygame.locals import *
    class PyManMain:
        def __init__(self, width=640,height=480):
            pygame.init()
            self.width = width
            self.height = height
            self.screen = pygame.display.set_mode((self.width, self.height))
        def MainLoop(self):
            pygame.draw.rect(self.screen,(0,80,0),Rect(10,10,80,50),5)
            pygame.display.update()
            while 1:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT: 
                        sys.exit()
    
    MainWindow = PyManMain()
    MainWindow.MainLoop()
    

    右上の「x」を1回だけクリックして終了.(ウインドウは消えないが,プログラムは止まる)

  • 楕円

    Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

    import os, sys
    import pygame
    from pygame.locals import *
    class PyManMain:
        def __init__(self, width=640,height=480):
            pygame.init()
            self.width = width
            self.height = height
            self.screen = pygame.display.set_mode((self.width, self.height))
        def MainLoop(self):
            pygame.draw.ellipse(self.screen,(0,100,0),(50,50,200,100))
            pygame.display.update()
            while 1:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT: 
                        sys.exit()
    
    MainWindow = PyManMain()
    MainWindow.MainLoop()
    

    右上の「x」を1回だけクリックして終了.(ウインドウは消えないが,プログラムは止まる)

  • テキスト

    Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

    import os, sys
    import pygame
    from pygame.locals import *
    class PyManMain:
        def __init__(self, width=640,height=480):
            pygame.init()
            self.width = width
            self.height = height
            self.screen = pygame.display.set_mode((self.width, self.height))
        def MainLoop(self):
            font = pygame.font.Font(None, 55)   
            text = font.render("hello, world", True, (255,255,255))  
            self.screen.blit(text, [20, 100])
            pygame.display.update()
            while 1:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT: 
                        sys.exit()
    
    MainWindow = PyManMain()
    MainWindow.MainLoop()
    

    右上の「x」を1回だけクリックして終了.(ウインドウは消えないが,プログラムは止まる)

  • キーボードの矢印キー(上,下,右,左)

    Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

    実行したら,矢印キーを連打してください (押しっぱなしではイベントが発生しない.連打)

    import os, sys
    import pygame
    from pygame.locals import *
    class PyManMain:
        def __init__(self, width=640,height=480):
            pygame.init()
            self.width = width
            self.height = height
            self.screen = pygame.display.set_mode((self.width, self.height))
        def MainLoop(self):
            x = 100
            y = 200
            while 1:
                pygame.display.update()   
                pygame.time.wait(30)
                pygame.draw.circle(self.screen, (0, 200, 0), (x, y), 5)
                for event in pygame.event.get():
                    if event.type == pygame.QUIT: 
                        sys.exit()
                    if event.type == KEYDOWN:
                        if event.key == K_ESCAPE:
                            pygame.quit()
                            sys.exit()
                        if event.key == K_LEFT:
                            x -= 5
                        if event.key == K_RIGHT:
                            x += 5
                        if event.key == K_UP:
                            y -= 5
                        if event.key == K_DOWN:
                            y += 5
    
    MainWindow = PyManMain()
    MainWindow.MainLoop()
    

    右上の「x」を1回だけクリックして終了.(ウインドウは消えないが,プログラムは止まる)