簡単なゲーム

【Pygame Zero】簡単なゲーム14:4枚×2段のカードめくりゲーム

ratch2025

こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」
ラッチ先生です

ラッチ先生
ラッチ先生
スック
スック

スックです。よろしくね!

今回のプロジェクトは、こちら!

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
「rise and shine」 written by 山本リョーマ

効果音提供:魔王魂
https://maou.audio/
「maou_se_onepoint17」: ワンポイント17
「maou_se_onepoint19」: ワンポイント19
「maou_se_onepoint31」: ワンポイント31

ラッチ先生
ラッチ先生

基礎プログラムと 画像を入れた
「簡単なゲーム14: ババを 引くな!」zipフォルダを
ダウンロードしてください

pythonしよう!簡単なゲーム14:boonを表示する
スック
スック

今回は、スクリーンの色を “lightyellowライトイエロー” にしたよ

「原色大事典」サイトには、URL:https://www.colordic.org/
pygame zeroで使える色が載っています

pythonしよう!簡単なゲーム14
:ババを引くな!zipの中身
スック
スック

このゲームで使用している音声ファイルは、
以下のサイトからお借りしています。

各自でダウンロードして、該当するフォルダに入れてください!

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
「rise and shine」 written by 山本リョーマ

効果音提供:魔王魂
https://maou.audio/
「maou_se_onepoint17」: ワンポイント17
「maou_se_onepoint19」: ワンポイント19
「maou_se_onepoint31」: ワンポイント31

pythonしよう!簡単なゲーム14
:ババを引くな!zipの中身
スポンサーリンク

クリックして めくる

ゲームの結果

pythonしよう!簡単なゲーム14
:ゲームの結果の解説

スペースキーで リスタート

プログラムを 実行してみよう




ラッチ先生
ラッチ先生

今回の「ババを 引くな!」では、
・ マウスで カードをクリックする
・ ババのカードを ランダムに 決める
プログラムがあります。

そこで、2つのモジュールを 用意しました

pythonしよう!簡単なゲーム14
:randomモジュールの解説
pythonしよう!簡単なゲーム14
:pgzhelperモジュールの解説
スック
スック

モジュールとは、
関数やプログラムが書かれているファイルのことだよ

ラッチ先生
ラッチ先生

Actorアクター( )クラスが入っている 変数boonボーン には、
オブジェクトを動かす属性(データ)やメソッド(命令)が
あります。

pythonしよう!簡単なゲーム14
:変数boonの解説
スック
スック

プロパティ(データ)やメソッド(命令)は、
『 . (ドット)』を付ければ、使えるよ




ラッチ先生
ラッチ先生

今回のプログラミングのポイントです

スック
スック

「%」と「//」という演算子を使うよ




ラッチ先生
ラッチ先生

最初に 8枚のカードを4枚 × 2段に 並べましょう

演算子
 ・ % : 除算子(割り算の余りを求める)
 ・ // : 割り算の整数部分だけを 求める
を使うと 簡単に できてしまいます。

スック
スック

変数colコル は、「columnカラム (列)」の略語
変数rowロー は、行です

プロパティ:numナン は、「numberナンバー(番号)」の略語だよ

Python
boon = Actor("boon", (400, 100))

cards = [] #1 空リストcardsを 生成する

for i in range(8): #2 8回繰り返す
    col = i % 4  #3 変数colに i % 4の値を 代入する
    row = i // 4 #4 変数rowに i // 4の値を 代入する
    x = 175 + 150 * col #5 x座標に 175+150×colの値を 代入する
    y = 350 + 170 * row #6 y座標に 350+170×rowの値を 代入する
    card = Actor("card", (x, y)) #7 カードを 生成する
    card.num = i #8 プロパティnumに カウンター変数 iの値を 代入する
    cards.append(card) #9 リストcardsに カードを追加する
Python
def draw():
    screen.fill("lightyellow")
    boon.draw()
    for card in cards: #10 カードを取り出す
        card.draw() #11 カードを表示する
pythonしよう!簡単なゲーム14:クリックしてめくる①の解説
Q
キャラクターの量産の仕方
Q
append( )メソッドとは
pythonしよう!簡単なゲーム14
:appendメソッドの解説
スック
スック

カードに 番号を つけたよ

ラッチ先生
ラッチ先生

今回のゲームは、スペースキーを押すと リスタートします

gameゲーム_starsスターズ( )関数で、ゲームスタートを 定義します

pythonしよう!簡単なゲーム14
:プロパティonの解説
Python
    cards.append(card)

def game_start(): #1 game_start()関数を 定義する
    boon.on = True #2 プロパティonを Trueに設定する
    boon.baba = random.randint(0, 7) #3 プロパティbabaに 0~7から ランダムに選んだ値を 設定する
    
game_start() #4 game_start()関数を 実行する
Q
randint( )関数とは
pythonしよう!簡単なゲーム14
:randint()関数の解説
スック
スック

スタートすると ババの番号が 決まるんだ

ラッチ先生
ラッチ先生

onオン_mouseマウス_downダウン(posポス)関数で
クリックしたら カードがめくれるプログラムを定義します

pythonしよう!簡単なゲーム14
:on_mouse_down()関数の解説
Python
game_start()

def on_mouse_down(pos): #1 クリックしたら動く関数を 定義する
    if boon.on: #2 プロパティonが Trueだったら
        for card in cards: #3 カードを取り出す
            if card.collidepoint_pixel(pos): #4 もし クリックされたら
                if card.num == boon.baba: #5 もし プロパティnumと プロパティbabaが 同じなら
                    card.image = "card_baba" #6 カードの画像を card_babaに 設定する
                else: #7 その他
                    card.image = "card_ok" #8 カードの画像を card_okに 設定する
                    sounds.maou_se_onepoint19.play() #9 効果音を 鳴らす
Q
collidepoint_pixel( )メソッドとは
pythonしよう!簡単なゲーム14
:collidepoint_pixel()メソッドの解説

効果音提供:魔王魂
https://maou.audio/
「maou_se_onepoint19」: ワンポイント19

スック
スック

プロパティbabaババの数値のカードが、ババカードになるよ




pythonしよう!簡単なゲーム14
:ゲームの結果の解説
ラッチ先生
ラッチ先生

まず、BGMと背景画像が表示する準備をしましょう

Python
def game_start(): 
    boon.on = True 
    boon.baba = random.randint(0, 7)
    music.play("rise_and_shine") #1 BGM流す
    boon.bg = None #2 プロパティbgに None(無し)を設定する
Python
def draw():
    screen.fill("lightyellow")
    if boon.bg: #3 もし プロパティbgに データが入ったら
        screen.blit(boon.bg, (0, 0)) #4 背景画像を表示する
    boon.draw()

BGM提供: DOVA-SYNDROME
https://dova-s.jp/
「rise and shine」 written by 山本リョーマ

Q
musicモジュールとは
pythonしよう!簡単なゲーム14
:musicモジュールの解説
Q
blit( )メソッドとは
pythonしよう!簡単なゲーム14
:blit()メソッドの解説
ラッチ先生
ラッチ先生

つぎは、
ゲームオーバーとクリアのプログラムをまとめた
gameゲーム_endエンド()関数を 定義します

pythonしよう!簡単なゲーム14
:ポイントの解説
Python
game_start()

def game_end(bg, sound, costume): #1 game_end()関数を 定義する
    boon.on = False #2 プロパティonを Falseに設定する
    music.stop() #3 BGMを 止める
    boon.bg = bg #4 プロパティbgを 引数bgを代入する
    sound.play() #5 効果音を 鳴らす
    boon.image = costume #6 プロパティimageに 引数costumeを代入する
スック
スック

gameゲーム_endエンド()関数を使って、
ババのカードをクリックしたら ゲームオーバーにするよ

Python
def on_mouse_down(pos): 
    if boon.on: 
        for card in cards: 
            if card.collidepoint_pixel(pos): 
                if card.num == boon.baba: 
                    card.image = "card_baba"
                    game_end("bg_over",
                             sounds.maou_se_onepoint31,
                             "boon_over") #1 game_end()関数を 実行する
スック
スック

あれっ? 最後は、クリアだよね…

ラッチ先生
ラッチ先生

そうです。
7枚のカードをクリックできたら クリアにします

そのために、プロパティcountカウントを追加して、
クリックした枚数をカウントしましょう

Python
def game_start(): 
    boon.on = True 
    boon.baba = random.randint(0, 7)
    music.play("rise_and_shine") 
    boon.bg = None
    boon.count = 0 #1 プロパティcountに 0を設定する
Python
def on_mouse_down(pos): 
    if boon.on: 
        for card in cards: 
            if card.collidepoint_pixel(pos): 
                if card.num == boon.baba: 
                    card.image = "card_baba"
                    game_end("bg_over",
                             sounds.maou_se_onepoint31,
                             "boon_over") 
                else: 
                    card.image = "card_ok" 
                    boon.count += 1 #2 プロパティcount 1ずつ上げる

                    if boon.count == 7: #3 もし プロパティcountが 7になったら
                        game_end("bg_clear",
                                 sounds.maou_se_onepoint17,
                                 "boon_clear") #4 game_end()関数を 実行する
                    else: #5 その他
                        sounds.maou_se_onepoint19.play() #6 効果音を 鳴らす
スック
スック

これで、ゲームの結果は 完成だよ




ラッチ先生
ラッチ先生

それでは、
スペースキーを押して リスタートさせましょう!

onオン_keyキー_downダウン(keyキー)関数を使って、
gameゲーム_starsスターズ()関数を 実行させれば いいだけだよ

pythonしよう!簡単なゲーム14
:on_key_down()関数の解説
Python
def on_key_down(key): #1 キーが押された時の命令を 定義する
    if key == keys.SPACE: #2 もし スペースキーが 押されたら
        game_start() #3 game_start()関数を 実行する

def update():
スック
スック

あれぇ! boonボーンの顔と カードが 元に戻らないよ

ラッチ
ラッチ

おぉぉぉ……っと!
忘れてたあ!!

gameゲーム_starsスターズ()関数で
boonボーンとカードを 元の画像にしましょう

Python
def game_start(): 
    boon.on = True 
    boon.baba = random.randint(0, 7)
    music.play("rise_and_shine") 
    boon.bg = None
    boon.count = 0
    boon.image = "boon" #1 プロパティimageを "boon"に設定する
    for card in cards: #2 リストcardsから cardを取り出す
        card.image = "card" #3 プロパティimageを "card"に設定する
スック
スック

今回の学習は、これで 終了! おつかれさま




ラッチ先生
ラッチ先生

今回は、
4枚 × 2段に配布するカードゲームのプログラムを作りました。

Python
import pgzrun
from pgzhelper import *
import random

WIDTH = 800
HEIGHT = 600

boon = Actor("boon", (400, 100))

cards = [] 

for i in range(8): 
    col = i % 4  
    row = i // 4 
    x = 175 + 150 * col 
    y = 350 + 170 * row 
    card = Actor("card", (x, y)) 
    card.num = i 
    cards.append(card)

def game_start(): 
    boon.on = True 
    boon.baba = random.randint(0, 7)
    music.play("rise_and_shine") 
    boon.bg = None
    boon.count = 0
    boon.image = "boon" 
    for card in cards: 
        card.image = "card" 

game_start()

def game_end(bg, sound, costume): 
    boon.on = False 
    music.stop() 
    boon.bg = bg 
    sound.play() 
    boon.image = costume 

def on_mouse_down(pos): 
    if boon.on: 
        for card in cards: 
            if card.collidepoint_pixel(pos): 
                if card.num == boon.baba: 
                    card.image = "card_baba"
                    game_end("bg_over",
                             sounds.maou_se_onepoint31,
                             "boon_over") 
                else: 
                    card.image = "card_ok" 
                    boon.count += 1 

                    if boon.count == 7: 
                        game_end("bg_clear",
                                 sounds.maou_se_onepoint17,
                                 "boon_clear") 
                    else: 
                        sounds.maou_se_onepoint19.play()

def on_key_down(key): 
    if key == keys.SPACE: 
        game_start() 

def update():
    pass

def draw():
    screen.fill("lightyellow")
    if boon.bg: 
        screen.blit(boon.bg, (0, 0)) 
    boon.draw()
    for card in cards: 
        card.draw() 

pgzrun.go()
ラッチ先生
ラッチ先生

カードを 横4枚を2段に配置するプログラムに
 演算子
 ・ % : 除算子(割り算の余りを求める)
 ・ // : 割り算の整数部分だけを 求める

を 使うと 簡単に できちゃいます。覚えておきましょう

スック
スック

カードゲームに 使えるね
みんなも このプログラムを使って、カードを並べてみてね

それじゃあ、またね!

スポンサーリンク
ABOUT ME
ラッチ先生
ラッチ先生
こんにちは!
「Pythonしよう!楽しく学べるプログラミング教室」の学長、ラッチです。

scratchのように楽しく学べるPython講座です。
・図やアニメーションを使って、わかりやすく楽しく学べる!
・毎回の授業が新しい発見の連続!
・プログラミングの考え方が身につき、自分のやりたいことが形にできるように。

この3点をモットーにサイトを立ち上げました。 よろしくお願いします
記事URLをコピーしました