Python の勉強 スロットゲーム編 〜その1:遊んでみる〜

プログラミング

VS Code を開き、新しいファイルを「slot-001.py」という名前で追加したら、以下のプログラムを追加したファイルにコピペしてください
150 行程度あるのでプログラムを初めたばかりの人は「えー難しそう!」と思うかも知れません。でも今すぐ内容を理解する必要はありませんので安心して下さい。さらに言うと、半分はただの補足説明です。

"""スロットゲーム

簡単なスローっとゲームです。ゲームスタート時に保有しているコインを増やしましょう。
掛けコイン数を入力すると、スロットの結果が表示されます。
絵柄が揃うと、そのパターンに応じた配当倍率でコインを獲得することができます。
"""


import random   # "乱数" を生成するために必要なライブラリをメモリ上に読み込む(標準ライブラリ)


# スロット(リール)の中身を "定数" で定義する
# 配列のインデックスは 0 から始まるので、0 〜 9 番目に格納されている
# 定数は全て大文字で記載する
REEL_MARK_LIST = ['♠', '♥', '♥', '◆', '◆', '◆', '♣', '♣', '♣', '♣']


# ============================================================
# ゲームに必要な関数を定義する
# ============================================================

def show_start_message():
    """ゲーム開始のメッセージを表示する
    (This function is to be called to show the start message.)
    """
    print('--------------')
    print('スロットゲーム')
    print('--------------')

def ask_player_name():
    """プレーヤーの名前を尋ねる
    (This function is to be called to ask player's name.)

    プレーヤーの名前を入力(input)してもらい、挨拶を表示(print)する
    入力されたプレーヤーの名前を返す(return)

    Returns:
        str: プレーヤーの名前
    """
    player_name = input('あなたの名前を入力して下さい: ')
    print('こんにちは ' + player_name + ' さん')
    return player_name

def ask_bets(player_coin):
    """現在の所持コイン数を表示した後、掛けるコイン数(bets)を尋ねる
    (This function is to be called to ask bets.)

    所持コイン数(player_coin)は数値なので、文字列に含めたい場合は文字列(string)に変換する必要がある ==> str() 関数
    input() 関数で入力した値は文字列(string)になるので整数(integer)に変換する ==> int() 関数

    Args:
        player_coin (int): プレーヤーの所持コイン数

    Returns:
        int: 掛けコイン数
    """
    print('------------------------------')
    print('現在の所持コイン数は ' + str(player_coin) + ' 枚です。')
    str_bets = input('掛けコイン数を入力して下さい: ')
    bets = int(str_bets)
    return bets

def show_and_get_result():
    """スロットの結果(絵柄)を表示し、結果を取得する
    (This function is to be called to show and get result.)

    Returns:
        str: スロットの結果(絵柄)
    """
    # TODO(佐藤宏行): ループ内で文字列を結合するのは避ける。代わりにリストに貯めて、最後に結合(join)すること
    # 参照: https://google.github.io/styleguide/pyguide.html#310-strings
    result_all = ''
    for i in range(3):
        index = random.randint(0, 9)
        result = REEL_MARK_LIST[index]
        result_all = result_all + result
    print(result_all)
    return result_all

def get_division(marks):
    """絵柄に応じた配当倍率を取得する
    (This function is to be called to get division.)

    Args:
        marks (str): スロットの結果(絵柄)

    Returns:
        int: 配当倍率
    """
    if marks == '♠♠♠':
        print('超大当たり!!')
        return 15
    elif marks == '♥♥♥':
        print('大当たり!')
        return 12
    elif marks == '◆◆◆':
        print('大当たり!')
        return 10
    elif marks == '♣♣♣':
        print('大当たり!')
        return 8
    elif marks[0:2] == '♠♠':
        print('当たり!')
        return 5
    else:
        print('ハズレ...')
        return -1

def calculate_coin(coin, bets, division):
    """掛けたコイン数(bets)と、配当倍率(division)を使用してプレーヤーの所持コイン数を精算する
    (This function is to be called to calculate (players's) coin.)

    Args:
        coin (int): プレーヤーの精算前の所持コイン数
        bets (int): 掛けコイン数
        division (int): 配当倍率

    Returns:
        int: 精算後のプレーヤーの所持コイン数
    """
    coin = coin + bets * division
    return coin


# ============================================================
# 実際にゲームを実行する
# ============================================================

# プレーヤーの所持コイン数
player_coin = 100

show_start_message()
player_name = ask_player_name()

if player_name == 'king':
    player_coin = player_coin + 100

for message in ['1回目', '2回目', '最後だよ']:
    print(message)
    bets = ask_bets(player_coin)
    marks = show_and_get_result()
    division = get_division(marks)
    player_coin = calculate_coin(player_coin, bets, division)

print('終了です。{} さんの所持コイン数は...'.format(player_name))
print(f'最終的に {player_coin} 枚になりました!')

上記プログラムの半分は補足説明です。

内容はこれから勉強していきましょう。

コピペが終わったら右上の実行ボタンをクリックして、スロットゲームで遊んでみましょう。
ゲームが始まると名前を聞かれますので、適当な名前を入力して下さい。
続けて “掛けコイン数” を聞かれます。私は「10」枚かけてみました。

スロットゲームで遊んでいる様子

ゲームは 3 回遊ぶことができます。私は最終的に 110 枚を残してゲーム終了となりました。

ゲーム終了時の様子

ゲームが終了しても実行ボタン(右上の▶ボタン)をクリックすれば何回でも遊べます。音も派手な演出もない単純なゲームですが「大当たり!」がでると、ちょっとだけ嬉しい気持ちになります。折角なので「大当たり!」が出るまでは遊んでみて下さい。

次回からはプログラムの勉強をする過程で、スロットゲームを修正したり機能を追加したりしていきます。プログラムはこの記事からいつでも復元できるので、「もしかして…」と思うところがあるなら、自分で変更して見るのもオススメです。
ちなみに VS Code を使わなくても、「001.py」ファイルをダブルクリックすれば同じようにスロットゲームで遊ぶことができます。しかしこの方法だと、ゲーム終了時にウィンドウが自動で閉じてしまうので結果が分かりません。

ダブルクリックでスロットゲームを開始した様子

不便ですが VS Code を使うことでこの問題を回避することができますので、修正は後回しにします。まずはもっと基本的なプログラムについて少しずつ学んでいきましょう!

コメント

タイトルとURLをコピーしました