【Python講座】Pythonで作るパズルゲーム#2_マス上にだんごを表示させてみる

こんにちは、koheiです。
Pythonでパズルゲームを作ろうの第2回目です。
今回は、ウィンドウのマス上にだんごを表示させてみましょう。
動画解説もあります。記事と合わせてどうぞ!
1.だんごゲームの仕様
今回作るだんごゲームの仕様を説明します。
②だんごを配置したら、上部からランダムにだんごが落ちてくる
③同じ色のだんごが縦横斜めに3つ以上並んだらだんごを消す。
④消しただんごの数に応じてスコアが加算される
⑤一番上のマスにだんごが到達したらゲームオーバー
今回は、マス上にだんごを表示する処理を作ってみましょう。
今回のゴール

練習素材は以下からダウンロードできますので、ぜひダウンロードしてやってみてください。
2.背景画像を表示する
まずは、ゲームの背景画像をウィンドウに表示させてみましょう。
練習素材のpygame_dango_game.pyを開いて、以下のコードを加えてみましょう。
※ちなみに、pygame_dango_game.pyには、pygame関連の初期化処理はすでに実装済みです。
import pygame
import random
import sys
#ゲームメイン処理
def main():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.blit(bg,[0,0]) #背景画像描画
pygame.display.update()
clock.tick(10)
if __name__ == '__main__':
#初期化、画像ロード処理など
pygame.init()
pygame.display.set_caption("だんごパズル(pygame ver)")
screen = pygame.display.set_mode((912,768))
clock = pygame.time.Clock()
bg = pygame.image.load("dango_back.png") #背景画像をロード
#ゲームメイン処理
main()
まず29行目の pygame.image.load処理で指定した画像ファイルをロードします。
その後、メイン処理内の15行目screen.blit処理でロードした背景画像をスクリーンに描画しています。
一旦、ここまでできたら、ファイルを保存して実行してみましょう。
以下のようにウィンドウに背景画像が表示されたらOKです。

3.マス上にだんごを表示する
続いて、マス上にだんごを表示させてみましょう。
まず、マス上のだんご表示を管理する2次元リストを作ります。(※マスは、横8×縦10マスなので、2次元とします)
dangoというリストを以下の様に実装しましょう。
import pygame import random import sys #だんごをマス上に表示するための2次元リスト dango = [ [1,0,0,0,0,0,3,4], [0,2,0,0,0,0,0,0], [0,2,3,0,0,0,0,0], [0,1,4,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,4,0] ]
リスト内の数値は、各だんごの表示を示しています。(以下)

続いて、だんご画像をロード処理を書きます。
pygame_dango_game.pyを開いて、以下のコードを加えてみましょう。
if __name__ == '__main__':
#初期化、画像ロード処理など
pygame.init()
pygame.display.set_caption("だんごパズル(pygame ver)")
screen = pygame.display.set_mode((912,768))
clock = pygame.time.Clock()
bg = pygame.image.load("dango_back.png") #背景画像をロード
img_dango = [ #だんご画像をロード
None,
pygame.image.load("dango1.png"),
pygame.image.load("dango2.png"),
pygame.image.load("dango3.png"),
pygame.image.load("dango4.png"),
pygame.image.load("dango_kushi.png")
]
#ゲームメイン処理
main()
今回ロードした画像は、img_dangoというリストに格納しています。
ポイントとしては、だんご表示の番号とimg_dangoのindex番号が紐づくように画像を入れています。

次に、だんご表示する関数を作りましょう。
disp_dango()という関数名で作成します。
繰返しfor文で、だんご表示するための2次元リストdangoの値をチェックしていきます。
0より大きければ、screen.bilt処理で、img_dangoリストの画像を引っ張ってきて、スクリーンに描画します。
最後に36行目の名処理内で、disp_dango()を呼び出し完成です。
import pygame
import random
import sys
#だんごをマス上に表示するための2次元リスト
dango = [
[1,0,0,0,0,0,3,4],
[0,2,0,0,0,0,0,0],
[0,2,3,0,0,0,0,0],
[0,1,4,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,4,0]
]
#団子を表示する関数
def disp_dango():
screen.blit(bg,[0,0]) #背景画像描画
for y in range(10):
for x in range(8):
if dango[y][x] > 0:
screen.blit(img_dango[dango[y][x]],[x*72+20, y*72+20])
#ゲームメイン処理
def main():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
disp_dango() # だんご表示
pygame.display.update()
clock.tick(10)
if __name__ == '__main__':
#初期化、画像ロード処理など
pygame.init()
pygame.display.set_caption("だんごパズル(pygame ver)")
screen = pygame.display.set_mode((912,768))
clock = pygame.time.Clock()
bg = pygame.image.load("dango_back.png") #背景画像をロード
img_dango = [ #だんご画像をロード
None,
pygame.image.load("dango1.png"),
pygame.image.load("dango2.png"),
pygame.image.load("dango3.png"),
pygame.image.load("dango4.png"),
pygame.image.load("dango_kushi.png")
]
#ゲームメイン処理
main()
ここまで実装できたら、ファイルを保存して実行してみましょう。
以下のように、マス上に意図通りだんごが表示されればOKです。
余裕があれば、2次元リストdangoの数値を色々変えてみて、だんごの表示位置、種類が変わるか試してみてください。
4.最後に
以上、今回はマス上にだんごを表示させる処理を作ってみました。
次回はだんごの落下処理など作っていこうと思います。
それでは、次回もお楽しみに!

