※この記事は初学者である筆者の備忘録的扱いのものです。
↓↓↓前回の記事↓↓↓
【Python】初学者が学習の為にトランプゲームを作成する(第1回)
はじめに
私は実務でPythonを使うことになり、勉強をしています。
トランプゲームを作成することによって、配列、関数、制御文等を学ぶことが出来ると考え、
作成を始めました。
現在は、デッキの部分を作成中。。。
前回の反省
【Python】初学者が学習の為にトランプゲームを作成する(第1回)
前回の記事で@shiracamusさんにコメントをいただきまして、
至らない部分が本当に多くて勉強になりました。
ありがとうございました。
その後、アドバイスをもとに改良を加えた部分と
必要だと気付いた部分がありましたので、今回はそれについて書きます。
改良した部分
まずは完成したデッキマスタ
importrandomMARK="♤","♧","♡","♢"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]*4defcard_deck():deck_list=[f'{mark}{number}'formarkinMARKfornumberinNUMBER]deck_master=dict(zip(deck_list,NUMBER_4))random.shuffle(deck_list)returndeck_master,deck_listdefdraw(deck_list,n):player_card=deck_list[:n]deldeck_list[:n]returnplayer_card
まず、関数の共通化です。これは完全に見落としでした。
引数でデッキと手札枚数を渡すドロー関数として作成しました。
↓↓↓↓↓
defdraw(deck_list,n):player_card=deck_list[:n]deldeck_list[:n]returnplayer_card
次にデッキの作成部分ですが、リストに文字列として格納するだけだと
トランプの数値比較ができない?と考えたので。。。
このようにしました。
↓↓↓↓↓
defcard_deck():deck_list=[f'{mark}{number}'formarkinMARKfornumberinNUMBER]deck_master=dict(zip(deck_list,NUMBER_4))random.shuffle(deck_list)returndeck_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反映、アプリ作成なのです。
では、進捗がありましたら更新いたします。