前回、勉強したフォーマットを用いてスロットゲームのプログラムを修正していきます。「005.py」をコピペして「007.py」を作成して下さい。
修正対象は
print('こんにちは ' + player_name + ' さん')
と
print('現在の所持コイン数は ' + str(player_coin) + ' 枚です。')
の2カ所になります。
修正する際は、是非「フォーマット済み文字列リテラル(f-string)」か「文字列の format() メソッド」のどちらかを使うようにして下さい。修正が完了したらプログラムを動かして確認してみましょう。
項目の比較用の拡張機能を利用してみる
その4(こちら)ではファイル同士の比較方法を勉強しました。ここで一度、使い方を復習しておきましょう。比較するのは、みなさんが作成した「007.py」と以下のプログラムです。
"""スロットゲーム
簡単なスローっとゲームです。ゲームスタート時に保有しているコインを増やしましょう。
掛けコイン数を入力すると、スロットの結果が表示されます。
絵柄が揃うと、そのパターンに応じた配当倍率でコインを獲得することができます。
"""
import random # "乱数" を生成するために必要なライブラリをメモリ上に読み込む(標準ライブラリ)
# スロット(リール)の中身を "定数" で定義する
# 配列のインデックスは 0 から始まるので、0 〜 9 番目に格納されている
# 定数は全て大文字で記載する
REEL_MARK_LIST = ['♠', '♥', '♥', '◆', '◆', '◆', '♣', '♣', '♣', '♣']
# プレーヤーの名前が「king」だった場合、ゲームスタート時の所持コイン数にボーナスするコイン数
KING_BONUS_COIN = 100
# プレーヤーの名前が「queen」だった場合、ゲームスタート時の所持コイン数にボーナスするコイン数
QUEEN_BONUS_COIN = 150
# ============================================================
# ゲームに必要な関数を定義する
# ============================================================
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(f'こんにちは {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(f'現在の所持コイン数は {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 = 123
show_start_message()
player_name = ask_player_name()
if player_name == 'king':
player_coin = player_coin + KING_BONUS_COIN
elif player_name == 'queen':
player_coin = player_coin + QUEEN_BONUS_COIN
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} 枚になりました!')
(おまけ)項目比較用の拡張機能を利用してみる ※興味ある人だけ対象
VS Code の標準機能ではファイル同士の比較しかできません。「Partial Diff」という拡張機能を入れると下記の比較できるようになり便利です。
- 一つのファイルの中で選択した2箇所の範囲の比較
- ファイルとクリップボードの中身の比較
- VS Code で開いているタブ同士の比較
拡張機能「Partial Diff」のインストール
拡張機能のインストールは簡単です。
- VS Code のアクティビティバーの拡張機能ボタンをクリック
(VS Code の各パーツの名称については、こちら) - 検索バーに「partial diff」と入力
- 対象を選択して内容を確認したら、「インストール」ボタンをクリック

インストールが完了したら、早速、使ってみましょう。
一つのファイルの中で選択した2箇所の範囲の比較
「何に使うんだよ!」と突っ込みたい方もいらっしゃると思いますが、意外に使う機会があります。
私は例えば「ここだけ少し修正してみたい。でも上手くいくか心配だからコメントアウトして残しておこう」という場合、あとから何を修正したかを確認するときに使います。
- 比較対象を選択して、右クリック→「Select Text for Compare」を選択
- 比較対象を選択して、右クリック→「Compare Text with Previous Seletion」を選択

ファイルとクリップボードの中身の比較
やり方は簡単です。
- 上のプログラムをコピーする
- 「007.py」を VS Code で開く
- ファイル中で右クリック→「Compare Text with Clipboard」を選択
すると、新しいタブが開いて、前回やったような比較結果を確認することができます。
当然、上のプログラムと全く同じ場合は差分が表示されないので、もしやり方が心配な方は「007.py」の内容を少し変更してから、「3」の手順を実施してみて下さい。変更した箇所が差分となって表示されるはずです。

VS Code で開いているタブ同士の比較
保存する前のファイルを比較対象にしたいときに使うのかな?正直、私は使ってないです。一応、使い方を……。
- ファイルを2個開く
- 1個を新しいエディタグループで開く
- 右クリック→「Compare Text in Visible Editors」を選択

前回の内容が多かったので、今回は少なめです。


コメント