Pythonゲーム作りの過程 その7

今回の目標

回答の正誤判定を関数化する

今回の結果

回答の正誤判定を関数化する
→達成

回答の正誤判定を関数化する

 今回は、簡単に関数化しておきました。
 戻り値を1か0にすることでif文の条件式のTRUEとFALSEにそれぞれ対応させています。
 以下が実際のコードの一部です。

def sf(a1,a2):#success,failuer
    if a1==chr(65+a2):
        return 1
    else:
        return 0

 次回には、csv形式のデータベースを扱っていきたいと思います。
 これが重そうなので、今回の作業が圧迫されました。
 以下が、今回までのコードです。

import subprocess
import time
import csv
from playsound import playsound #メモ windows11では古めのバージョンをインストールすること。pip install playsound==1.2.2
import pygame
import random
import sys
import string


def get_answer(q):#関数定義
    shuffle_kouho=q['kouho']
    random.shuffle(shuffle_kouho)
    answer_str=shuffle_kouho.index(q['answer'])#1
    return [shuffle_kouho,answer_str]

def sf(a1,a2):#success,failuer
    if a1==chr(65+a2):
        return 1
    else:
        return 0


def battle():#戦闘時の関数定義
    i=0
    mhp=40 #主人公のHP
    ehp=50 #敵モンスターのHP

    pygame.mixer.init(frequency = 44100)
    bgm_sound = pygame.mixer.Sound("./sound/battle.wav")
    bgm_sound2 = pygame.mixer.Sound("./sound/quiz1.wav")
    bgm_sound3 = pygame.mixer.Sound("./sound/quiz2.wav")
    bgm_sound4 = pygame.mixer.Sound("./sound/madamada.mp3")
    bgm_sound5 = pygame.mixer.Sound("./sound/kakugo.mp3")
    bgm_sound.play()

    #問題のデータベース。ここから問題がピックアップされて出題される。
    questions =[
        {'question':"「洋琴」が表す楽器はどれ?",'kouho':['ピアノ','ギター','チェロ','ハープ'],'answer':"ピアノ",'category':'漢字'},
        {'question':"ラッコを漢字で書くとどれ?",'kouho':['海鼠','海獺','海狸','海犬'],'answer':"海獺",'category':'漢字'},
        {'question':"ガーナの首都は?",'kouho':['アクラ','アピア','アテネ','アンカラ'],'answer':"アクラ",'category':'地理'},
    ]

    this_question = questions[random.randint(0,2)] #questions[0] とかquestions[1]とか
    #print(this_question)
    #sys.exit( )

    while i<3:
        ran = random.randint(1,3)
        if ran ==2 :
            bgm_sound5.play()

        if mhp<=0:
            bgm_sound4.play() 
            print("主人公は敗北した…")
            time.sleep(2)
            break
        elif ehp<=0:
            print("モンスターは倒れた!")
            break
        else:
            """
            s1="漢字出題モンスターが現れた!"
            s2=s1.replace(s1,"")
            print(s1)
            time.sleep(2)
            print(s2)
            """
            #没になった。メモリ内容が変わるだけで、画面に出力したのは変わらない。
            
            
            #print(this_question['category'],end='')
            #print("出題モンスターが現れた!")
            #print("漢字出題モンスターが現れた!")
            print(this_question['category']+"出題モンスターが現れた")#モンスターの名前の表示
            time.sleep(2)
            subprocess.run('CLS',shell=True)#2秒後に消す
            print(this_question['question'])
            #print(this_question['kouho'])
            ans_list=get_answer(this_question)
            for i in range(0,len(ans_list[0])):
                print(chr(65+i)+': '+ans_list[0][i])#ASCIIコードで設定しました
            """
            for question_kouho in this_question['kouho']:
                print('候補: '+question_kouho)
            """
            
            
        # ans=input()
        # if ans=="A":
        #     bgm_sound2.play()
        #     print("モンスターは30のダメージを受けた!")
        #     #bgm_sound.stop()
        #     ehp=ehp-30
        #     time.sleep(1)
        #     break
        #ans=input()
        ans=input()#答えの入力を行わせる
        if sf(ans,ans_list[1]):#ans==chr(65+ans_list[1])
            bgm_sound2.play()
            print("モンスターは30のダメージを受けた!")
            #bgm_sound.stop()
            ehp=ehp-30
            time.sleep(1)
            break
        else:
            bgm_sound3.play()
            print("主人公は30のダメージを受けた!")
            mhp=mhp-30
            time.sleep(1)
        i=i+1
        time.sleep(2)
        subprocess.run('CLS',shell=True)




battle()#確認用に呼び出し

コメントは大切

 今のところは困ってはいませんが、数か月後にコードを見直す際にコメントが書いてないと内容を理解するのに時間がかかります。
 振り返ってみると、まだコメントのご利益は今のところは感じていません。
 ですが、数か月後に困るとしたらあったほうがいいと思います。