LoginSignup
3
7

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-10-22

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

はじめに

私は実務で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時間くらいかかっちゃいました。

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

3
7
2

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
3
7