ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

【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処理でロードした背景画像をスクリーンに描画しています。

一旦、ここまでできたら、ファイルを保存して実行してみましょう。

$python pygame_dango_game.py

以下のようにウィンドウに背景画像が表示されたら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()

ここまで実装できたら、ファイルを保存して実行してみましょう。

pygame_dango_game.py

以下のように、マス上に意図通りだんごが表示されればOKです。
余裕があれば、2次元リストdangoの数値を色々変えてみて、だんごの表示位置、種類が変わるか試してみてください。

4.最後に

以上、今回はマス上にだんごを表示させる処理を作ってみました。
次回はだんごの落下処理など作っていこうと思います。
それでは、次回もお楽しみに!

関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン