LoginSignup
1
3

More than 3 years have passed since last update.

【Python】初学者が学習の為にトランプゲームを作成する(第2回)

Last updated at Posted at 2019-10-27

※この記事は初学者である筆者の備忘録的扱いのものです。

↓↓↓前回の記事↓↓↓
【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反映、アプリ作成です。

では、進捗がありましたら更新いたします。

1
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3