今日はプログラミング言語のPythonのモジュールの1つであるPygameを使って画像表示を行いました。
使っている参考書はpythonゲームプログラミング入門というものです。
1.オシャレにHello World
プログラミングの勉強を始めると毎回のように出てくる「Hello world」という言葉。
例にもれずに今回も出てきました。
ただ今回の「Hello world」はいつもよりオシャレで
画像付きです!!
そんなプログラムをソースコードを参考に書いてみました。
まずは、プログラムと実行結果を
プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/usr/bin/env python background_image_filename = 'sushiplate.jpg' mouse_image_filename = 'fugu.png' import pygame from pygame.locals import * from sys import exit pygame.init() screen = pygame.display.set_mode((640, 480), 0, 32) pygame.display.set_caption("Hello, World!") background = pygame.image.load(background_image_filename).convert() mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha() while True: for event in pygame.event.get(): if event.type == QUIT: exit() screen.blit(background, (0,0)) x, y = pygame.mouse.get_pos() x -= mouse_cursor.get_width() / 2 y -= mouse_cursor.get_height() / 2 screen.blit(mouse_cursor, (x, y)) pygame.display.update() |
実行結果
このようにお皿の背景画像の上にフグが乗っているものが出てきました。
フグの画像はマウスを動かすと一緒に動くようになっています。
2.解説
まずプログラムの1,2行目に関しては
background_image_filename と mouse_image_filename という関数に画像データを代入してます。
これでこの関数を呼び出せば画像が出てくるようにできるわけです。
3〜5行目はpygameモジュールとsysモジュールを使えるようにしています。
この部分で出力されるディスプレイの大きさと、その時の出力される名前を指定しています。
background = pygame.image.load(background_image_filename).convert()mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()
ここは最初の行で背景画像の指定を行い、次の行でマウスと共に動く画像の指定を行なっています。
.loadが読み込みの意味なので一番最初で指定した2つの画像を出力することができます。
また.convertは画像のピクセル形式を指定するものです。
今回はパソコンのピクセル形式のまま変える必要がないので何も指定していません。
.convert_alphaと.convertの違いは透過性です。
_alphaがつくことによって画像に透過性を持たせ、マウスのポインタを出現させられます。
while True:for event in pygame.event.get():
if event.type == QUIT:
exit()
これはゲームでよくある無限ループの構造です。
eventというのは画像が出現している間は値を出し続けます。
ここでQUITとは画面左上の×ボタンのことでこれを押すことによって無限ループから出る(exit()があるから)という仕組みになっています。
最後の部分はなくても出力は行えますが、画像の真ん中を初期位置になるように変更を加えています。
3.最後に
他のPygameについてのプログラミング教材も載せておきます。
このブログは僕が普段学習したことのアウトプット用に使っています。
大学での専攻は物理学、独学でPythonを学習しているためこの2つが主な内容を占めています。
時間がある時に読んでいただけると嬉しいです。
気に入っていただけたらブックマーク、twitter(@tsureblo_nobu)のフォローよろしくお願いします。
twitterではタイムリーな学問に対する思いなどをつぶやいています。