Help us understand the problem. What is going on with this article?

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

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

はじめに

私は実務でPythonを使うことになり、勉強をしています。
トランプゲームを作成することによって、配列、関数、制御文等を学ぶことが出来ると考え、
作成を始めました。

内容

作成を行うにあたって、ゲーム内容を考える前にトランプゲームのほとんどに共通する

「デッキからカードを配る」

というところから作っていこうと考えました。

実際に今回作成した「デッキからカードを配る」です。
↓↓↓↓↓↓↓↓↓↓

import random

mark = ["♤ ", "♧ ", "♡ ", "♢ "]
number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
card_deck = []
player_card = []
cpu_card = []

def card_master():
    for mark_idx in range(4):
        for number_idx in range(13):
            card_deck.append(mark[mark_idx] + str(number[number_idx]))

def player(maisu):
    player_card.extend(random.sample(card_deck, maisu))
    for idx in range(maisu):
        card_deck.remove(player_card[idx])

def cpu(maisu):
    cpu_card.extend(random.sample(card_deck, maisu))
    for idx in range(maisu):
        card_deck.remove(cpu_card[idx])

card_master()
player(5)
cpu(5)
print(player_card)
print(cpu_card)
print(card_deck)

解説

・デッキを作る

まず、カードを作っていきます。
いろいろ考えましたが、一番シンプルなやり方です。

mark = ["♤ ", "♧ ", "♡ ", "♢ "]
number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

リストにマーク数字を格納します。

def card_master():
    for mark_idx in range(4):
        for number_idx in range(13):
            card_deck.append(mark[mark_idx] + str(number[number_idx]))

それぞれのマークに1~13の数字を結合し、それをデッキに格納していきます。
上記のこの部分

card_deck.append(mark[mark_idx] + str(number[number_idx]))
#リスト.append(<追加したい要素>)

.appendはリストに要素を追加(リストの一番後ろ)します。

デッキの中身はこのようになっています。
↓↓↓↓↓↓↓↓↓↓

['♤ 1', '♤ 2', '♤ 3', '♤ 4', '♤ 5', '♤ 6', '♤ 7', '♤ 8', '♤ 9', '♤ 10', '♤ 11', '♤ 12', '♤ 13', '♧ 1', '♧ 2', '♧ 3', '♧ 4', '♧ 5', '♧ 6', '♧ 7', '♧ 8', '♧ 9', '♧ 10', '♧ 11', '♧ 12', '♧ 13', '♡ 1', '♡ 
2', '♡ 3', '♡ 4', '♡ 5', '♡ 6', '♡ 7', '♡ 8', '♡ 9', '♡ 10', '♡ 11', '♡ 12', '♡ 13', '♢ 1', '♢ 2', '♢ 3', '♢ 4', '♢ 5', '♢ 6', '♢ 7', '♢ 8', '♢ 9', '♢ 10', '♢ 11', '♢ 12', '♢ 13']

・カードを配る

次にプレイヤーにカードを配ります。

def player(maisu):
    player_card.extend(random.sample(card_deck, maisu))
    for idx in range(maisu):
        card_deck.remove(player_card[idx])

上記のこの部分

player_card.extend(random.sample(card_deck, maisu))
#リスト.extend(<追加したいリスト>)
#random.sample(<リスト>, <取得数>)

先程、リストに要素を追加する際は.appendを使いましたが、
今回はリストにリストを追加するため.extendを使いました。
また、デッキからランダムなカードを取得するために、
random.sampleを使いました。

その後、デッキから取得されたカードをデッキから取り除きます。

card_deck.remove(player_card[idx])
#リスト.remove(<削除する要素>)

これでプレイヤー側は完成です。
これと同様にCPU側も作成しました。

・結果

デッキからプレイヤーとCPUに5枚ずつカードを配り、配ったカードはデッキから削除
という動作を確認します。

['♡ 6', '♤ 13', '♧ 10', '♤ 12', '♤ 8']
['♧ 5', '♡ 1', '♢ 8', '♢ 9', '♢ 1']
['♤ 1', '♤ 2', '♤ 3', '♤ 4', '♤ 5', '♤ 6', '♤ 7', '♤ 9', '♤ 10', '♤ 11', '♧ 1', '♧ 2', '♧ 3', '♧ 4', '♧ 6', '♧ 7', '♧ 8', '♧ 9', '♧ 11', '♧ 12', '♧ 13', '♡ 2', '♡ 3', '♡ 4', '♡ 5', '♡ 7', '♡ 8', '♡ 9', '♡ 10', '♡ 11', '♡ 12', '♡ 13', '♢ 2', '♢ 3', '♢ 4', '♢ 5', '♢ 6', '♢ 7', '♢ 10', '♢ 11', '♢ 12', '♢ 13']

見づらいですが、1番目のリストはプレイヤー、2番目はCPU、3番目はデッキ。
配られたカードがデッキにない事を確認できました。

最後に

ここまで作るのに4時間くらいかかっちゃいました。

作成するゲームはポーカーかブラックジャックかなーと思っています。
次回はゲームの内容を作成していきます。

O_LUPAN
沖縄→名古屋 2019年4月に業界未経験で転職 現在は客先常駐として修業中 C Java Python Kotlin
yowayowa-engineer
弱々エンジニア会とは駆け出しエンジニアやベテランエンジニアまで、弱々から強々まで幅広く集まるコミュニティのエンジニア集団です!!メンバー募集してますので気になる方は、URLよりSlackに参加ください!条件等は特にありません!
https://join.slack.com/t/yowayowa-engineer/shared_invite/zt-c227e3jr-uQ~0NOZU4xaiZjNLe_E8hg
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした