pygame チュートリアル
pygameの使い方
サーチ…
備考
Pygameは、Pete Shinnersによって書かれた、マルチメディアを制御するためのクロスプラットフォームのCライブラリであるSDL用のPythonラッパーです。つまり、pygameを使って、ビデオゲームやその他のマルチメディアアプリケーションをPythonで書くことができます。これは、SDLのサポートされているプラットフォーム(Windows、Unix、Mac、beOSなど)上で変更されずに実行されます。
このセクションでは、pygameの概要と開発者がそれを使いたい理由について概説します。
また、パイゲームの中の大きなテーマについても触れ、関連するトピックにリンクしてください。 pygameのドキュメンテーションは新しいので、それらの関連トピックの初期バージョンを作成する必要があります。
バージョン
|バージョン| ==============> |リリース日|
| Pygame 1.9.0 | ========> | 2009年8月1日|
| Pygame 1.8.1 | ========> | 2008年7月30日|
| Pygame 1.8.0 | ========> | 2008年3月29日|
| Pygame 1.7.1 | ========> | 2005年8月16日|
| Pygame 1.6.2 | ========> | - |
| Pygame 1.6 | =========> | 2003年10月23日|
| パイガム1.5 | =========> | 2002年5月30日|
| パイガム1.4 | =========> | 2002年1月30日|
| Pygame 1.3 | =========> | 2001年12月19日|
| Pygame 1.2 | =========> | 2001年9月4日|
| パイガーム1.1 | =========> | 2001年6月23日|
| Pygame 1.0 | =========> | 2001年4月5日|
| Pygame 0.9 | =========> | 2001年2月13日|
| Pygame 0.5 | =========> | Jan 6 14、2001 |
| パイガム0.4 | =========> | 2000年12月14日|
| パイガム0.3 | =========> | 2000年11月20日|
| Pygame 0.2 | =========> | 2000年11月3日|
| パイガム0.1 | =========> | 2000年10月28日|
単純な「ゲーム」
インポートと初期化
すべてのモジュールをインポートする必要があり、pygameも例外ではありません。 pygameのインポートされたすべてのモジュールが正しく初期化されるためには、関数pygame.init()
を呼び出す必要があります。これを忘れると、いくつかのモジュールは動作しません。この関数はまた、すべての成功した失敗と失敗した初期化のタプルを返します(モジュールが初期化に失敗した場合、エラーは発生しません)。
import pygame
successes, failures = pygame.init()
print("{0} successes and {1} failures".format(successes, failures))
必需品を作る
また、ディスプレイを作成する必要があります。 Pygameはすでに(非表示の)ディスプレイを作成しているので、表示のモードを設定するだけです(この例では解像度を設定するだけです)。また、プログラムが一定の速度で更新されるようにクロックを作成することをお勧めします(そうでなければ、コンピュータの速さによって異なる速度で実行されます)。
screen = pygame.display.set_mode((720, 480)) # Notice the tuple! It's not 2 arguments.
clock = pygame.time.Clock()
FPS = 60 # This variable will define how many frames we update per second.
後のコードでは、赤、緑、青(RGB)のタプルを表す2つの色定数を作成します。値は0(光なし)から255(フルライト)になります。
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
Pygameでは、通常、オブジェクトの外観を表すSurfaceと、オブジェクトの位置を表すRect (長方形)を使用します。 サーフェスは、色や画像を含む白紙のようなものです。クラスを作成している場合は、多くの関数がそれらの属性を探して使用するため、属性にimageとrectの名前を付ける必要があります。そのようなクラスは、 ここで読むことができる理由から、 pygame.sprite.Sprite
クラスを継承することによって利益を得ます 。
rect = pygame.Rect((0, 0), (32, 32)) # First tuple is position, second is size.
image = pygame.Surface((32, 32)) # The tuple represent size.
image.fill(WHITE) # We fill our surface with a nice white color (by default black).
ゲームループ
これで、ゲームループのすべてが設定されました。これはゲーム全体で実行されるループで、イベントを処理し、オブジェクトの画面と位置を更新します。
最初に、ループが特定のFPSで実行されることを確認します。私たちはFPSを定義し、プログラムの始めに時計を作りました。次のコードは、私たちのプログラムがFPSを定義した量のループを繰り返すのに十分な時間をスリープさせるようにします。この例では、毎秒60回です。
clock.tick(FPS)
その後、私たちはイベントを処理します。イベントとは基本的に、マウスの移動やキーの押下などのユーザーアクションです。 Pygameはpygame.event.get()
呼び出して、これらのイベントをすべてキューに登録します。これを繰り返して、処理したいイベントがあるかどうかを確認できます。イベントにはtype属性があり、pygameモジュールの定数と照合して、どのタイプのイベントであるかを判断できます。
for event in pygame.event.get():
if event.type == pygame.QUIT: # The user pressed the close button in the top corner of the window.
quit()
# Close the program. Other methods like 'raise SystemExit' or 'sys.exit()'.
# Calling 'pygame.quit()' won't close the program! It will just uninitialize the modules.
if event.type == pygame.KEYDOWN
をチェックして、ユーザーがキーを押したかどうかを確認if event.type == pygame.KEYDOWN
こともできます。その場合、イベントには属性キーがあり、それがどのキーを表すかを確認することができます。
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
rect.move_ip(0, -2) # Changes the rect's position.
elif event.key == pygame.K_s:
rect.move_ip(0, 2)
elif event.key == pygame.K_a:
rect.move_ip(-2, 0)
elif event.key == pygame.K_d:
rect.move_ip(2, 0)
今度はイメージを表示する必要があります。最初に、以前のレンダリングから画面をクリアしたいかもしれません。画面全体を黒く塗りつぶす(コードを削除して、なぜそれを消去するのか確認します)。その後、我々は画面に私たちの画像を ブリットする必要があります。基本的には、 画像を別のサーフェス(この場合はスクリーン)にコピーすることです。最後に、画面を反転または更新します。
私たちがblittingしているとき、実際には何も表示していません。一方のコンピュータと他方のコンピュータのユーザーとして想像してみてください。コンピュータは、画面の横に( ブリット )を描き、ユーザーに向かって反転させてから、繰り返します。
screen.fill(BLACK)
screen.blit(image, rect)
pygame.display.update() # Or 'pygame.display.flip()'.
今、私たちは基本的なゲームを持っています!かなり退屈な、はい、しかし本質はそこにある!これをあなたの現在のPythonの知識と組み合わせれば、素晴らしいものを作ることができます。
完全なコード
import pygame
successes, failures = pygame.init()
print("{0} successes and {1} failures".format(successes, failures))
screen = pygame.display.set_mode((720, 480))
clock = pygame.time.Clock()
FPS = 60 # Frames per second.
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
# RED = (255, 0, 0), GREEN = (0, 255, 0), BLUE = (0, 0, 255).
rect = pygame.Rect((0, 0), (32, 32))
image = pygame.Surface((32, 32))
image .fill(WHITE)
while True:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
rect.move_ip(0, -2)
elif event.key == pygame.K_s:
rect.move_ip(0, 2)
elif event.key == pygame.K_a:
rect.move_ip(-2, 0)
elif event.key == pygame.K_d:
rect.move_ip(2, 0)
screen.fill(BLACK)
screen.blit(image, rect)
pygame.display.update() # Or pygame.display.flip()
やや改善されたゲームの仕組み
プログラムがキーを押したときをチェックし、キーを押しているときをチェックしていないことに注意してください。これを修正するために、 速度変数を導入することができます。私たちはそれをより組織化したものにするためにプレーヤークラスを作ることができます。フレームに依存する動きを避けるために(FPSを30に変更するとオブジェクトは半分の速度で動きます)、ティックの間の時間を移動可能オブジェクトに渡すことによって時間依存の動きを導入します。
import pygame
successes, failures = pygame.init()
print("Initializing pygame: {0} successes and {1} failures.".format(successes, failures))
screen = pygame.display.set_mode((720, 480))
clock = pygame.time.Clock()
FPS = 60
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((32, 32))
self.image.fill(WHITE)
self.rect = self.image.get_rect() # Get rect of some size as 'image'.
self.velocity = [0, 0]
def update(self):
self.rect.move_ip(*self.velocity)
player = Player()
running = True
while running:
dt = clock.tick(FPS) / 1000 # Returns milliseconds between each call to 'tick'. The convert time to seconds.
screen.fill(BLACK) # Fill the screen with background color.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
player.velocity[1] = -200 * dt # 200 pixels per second
elif event.key == pygame.K_s:
player.velocity[1] = 200 * dt
elif event.key == pygame.K_a:
player.velocity[0] = -200 * dt
elif event.key == pygame.K_d:
player.velocity[0] = 200 * dt
elif event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s:
player.velocity[1] = 0
elif event.key == pygame.K_a or event.key == pygame.K_d:
player.velocity[0] = 0
player.update()
screen.blit(player.image, player.rect)
pygame.display.update() # Or pygame.display.flip()
print("Exited the game loop. Game will quit...")
quit() # Not actually necessary since the script will exit anyway.
このコードについて改善すべき点はまだたくさんあります。 pygameのチュートリアルと、Richard Jonesのこの講演をもっと深く読んでみることをお勧めします。
pygameのインストール
ウィンドウズ
http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame - Christoph Gohlkeの公式CPythonディストリビューション用のオープンソースPythonパッケージのWindowsバイナリを提供する非公式のサイト。
あなたのインストールされているPythonのバージョンに従って適切なpygame
.whl
ファイルをダウンロードしてください。 (このファイルの名前は、pygame -
<pygame version> - <python version>
- win32.whl
)走る
pip install your-pygame-package.whl
あなたの端末の内側で、bashまたはconsol。
注:PATH
pip
が見つからない場合は、python -m pip install your-pygame-package.whl
を実行してみてpython -m pip install your-pygame-package.whl
pygameをPythonモジュールとしてインポートできるかどうか確認してください
import pygame
エラーが表示されない場合は、コンピュータにpygameが正しくインストールされていることを確認してください:)
Linuxで
あなたのターミナルを開き、走りなさい
sudo apt-get install python-pygame
注: python2のpygameをインストールします。
Pygameを内部にインポートしようとする
import pygame
エラーが表示されない場合は、あなたのLinuxシステムにpygameが正しくインストールされています:)
macOSについて
Macにインストールするには2つの方法があります:
方法1
Pygameのダウンロードページに行き、Macインストーラをダウンロードしてください 。それを実行すると、MacにPygameがインストールされます。
方法2
ホームブリューをインストールする:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrewを使ってPython 2.7.12とPygameをインストールする:
brew install python; brew install homebrew/python/pygame
今度はあなたの端末でPythonを実行し、 import pygame
してみてください。何も言わないなら、正常にインストールされています。
ディスプレイ上にパイゲームと図面を取り込む
入門
Pygameを使い始めるには、以下を実行する必要があります:
import pygame
これは、サイズ640,480のウィンドウを開き、それをscreenという変数に格納します。
ウィンドウ名の設定
pygameウィンドウの名前を設定するには、次の構文が必要です。
pygame.display.set_caption('Name')
画面について
- 点(0,0)は画面の左上隅にあります。
- x座標は左から右に増加し、y座標は上から下に向かって増加する。デカルト平面上の右辺座標は正で左辺は負である。しかし、デカルト平面上の上側座標は上と正で負である( 注 :点が原点から取られている場合は、これが考慮されます)。
画面の更新
画面に加えた変更 - たとえば色で塗りつぶしたり、描画したりするなど、すぐには表示されません。
だからそれを行う方法?
この関数を呼び出す必要があります:
pygame.display.update()
色
パイゲームのカラーリングはRGBモードで動作します。
着色のコードは次のとおりです。
color_Name = (r,g,b)
- Rは赤を表す。
- Gは緑色を表す
- Bは青を表します。
- 3つは0〜255の整数で、255が最も明るく、0が最も暗い
図
線を描くには
pygame.draw.lines(screen, color, closed, pointlist, thickness)
長方形を描画するには
pygame.draw.rect(screen, color, (x,y,width,height), thickness)
円を描くには
pygame.draw.circle(screen, color, (x,y), radius, thickness)
すべてをループに設定する
ループを作成するには、次のコードを使用します。
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
パイゲームウィンドウ(コード)に四角形を描く
import pygame
background_colour = (255,255,255) # White color
(width, height) = (300, 200) # Screen size
color=(0,0,0) #For retangle
screen = pygame.display.set_mode((width, height)) #Setting Screen
pygame.display.set_caption('Drawing') #Window Name
screen.fill(background_colour)#Fills white to screen
pygame.draw.rect(screen, color, (100,50,30,40), 1) #Drawing the rectangle
pygame.display.update()
#Loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()