※この記事は初学者である筆者の備忘録的扱いのものです。
↓↓↓前回の記事↓↓↓
【Python】初学者が学習の為にトランプゲームを作成する(第1回)
はじめに
私は実務でPythonを使うことになり、勉強をしています。
トランプゲームを作成することによって、配列、関数、制御文等を学ぶことが出来ると考え、
作成を始めました。
現在は、デッキの部分を作成中。。。
前回の反省
【Python】初学者が学習の為にトランプゲームを作成する(第1回)
前回の記事で@shiracamusさんにコメントをいただきまして、
至らない部分が本当に多くて勉強になりました。
ありがとうございました。
その後、アドバイスをもとに改良を加えた部分と
必要だと気付いた部分がありましたので、今回はそれについて書きます。
改良した部分
まずは完成したデッキマスタ
import random
MARK = "♤", "♧", "♡", "♢"
NUMBER = [1,2,3,4,5,6,7,8,9,10,11,12,13]
NUMBER_4 = [1,2,3,4,5,6,7,8,9,10,11,12,13]*4
def card_deck():
deck_list = [f'{mark}{number}'
for mark in MARK
for number in NUMBER]
deck_master = dict(zip(deck_list, NUMBER_4))
random.shuffle(deck_list)
return deck_master, deck_list
def draw(deck_list, n):
player_card = deck_list[:n]
del deck_list[:n]
return player_card
まず、関数の共通化です。これは完全に見落としでした。
引数でデッキと手札枚数を渡すドロー関数として作成しました。
↓↓↓↓↓
def draw(deck_list, n):
player_card = deck_list[:n]
del deck_list[:n]
return player_card
次にデッキの作成部分ですが、リストに文字列として格納するだけだと
トランプの数値比較ができない?と考えたので。。。
このようにしました。
↓↓↓↓↓
def card_deck():
deck_list = [f'{mark}{number}'
for mark in MARK
for number in NUMBER]
deck_master = dict(zip(deck_list, NUMBER_4))
random.shuffle(deck_list)
return deck_master, deck_list
まずdeck_listにマークと数値を格納します。
deck_listをkeyとして、valueに1~13を与えるようにしました。
出力させるとこうなります。
↓↓↓↓↓
{'♤1': 1, '♤2': 2, '♤3': 3, '♤4': 4, '♤5': 5, '♤6': 6, '♤7': 7, '♤8': 8, '♤9': 9, '♤10': 10, '♤11': 11, '♤12': 12, '♤13': 13, '♧1': 1, '♧2': 2, '♧3': 3, '♧4': 4, '♧5': 5, '♧6': 6, '♧7': 7, '♧8': 8, '♧9': 9, '♧10': 10, '♧11': 11, '♧12': 12, '♧13': 13, '♡1': 1, '♡2': 2, '♡3': 3, '♡4': 4, '♡5': 5, '♡6': 6, '♡7': 7, '♡8': 8, '♡9': 9, '♡10': 10, '♡11': 11, '♡12': 12, '♡13': 13, '♢1': 1, '♢2': 2, '♢3': 3, '♢4': 4, '♢5': 5, '♢6': 6, '♢7': 7, '♢8': 8, '♢9': 9, '♢10': 10, '♢11': 11, '♢12': 12, '♢13': 13}
※今回はマークでの上下関係は考慮していません。
これで、プレイヤーが引いたカードをkeyにして値を取得し、比較できるようになるかな?(未確認)
という感じです。
それから
NUMBER_4 = [1,2,3,4,5,6,7,8,9,10,11,12,13]*4
この部分ですが、
deck_master = dict(zip(deck_list, NUMBER_4))
を作成する際に、deck_listにはマークごとに1~13で持っているので
NUMBERのリストだと1~13までしか作成できませんでした。。。
いろいろ調べてみたけどこれに落ち着きました。。。
いい方法があれば教えていただきたいです。
最後に
今回は前回の記事の改良で終わってしまいましたが、次回はゲーム作成に入っていきます。
現在はブラックジャックで処理を考え中です。
今後の目標としてはKotlin反映、アプリ作成です。
では、進捗がありましたら更新いたします。