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

Pythonista+sceneでトランプをランダムに表示する

今回は、Pythonistaのsceneでトランプを表示する処理を作成してみました。

プログラム概要は以下の通り。
・53枚の中からランダムに5枚トランプを引く
・スマホ画面をタッチするとカードを引き直す

トランプ処理を作成する方法

まずは53枚(絵札13枚ずつ+ジョーカー)のトランプセットの作成です。
マーク+数字という形で文字列を作成し、トランプリストの配列に格納していきます。

マークはPythonistaのカード画像に合わせて'Clubs', 'Hearts', 'Spades', 'Diamonds'を使用します。

実装例

※2020/01/06修正
card_list.append()の位置がずれていたので修正しました。

class TrumpGame:
    def make_card_list(self):
        # マークのリスト
        symbol_list = ['Clubs', 'Hearts', 'Spades', 'Diamonds']
        # カードリスト
        card_list = ['Joker']

    # マークと数字を合体させる
    for symbol in symbol_list:
        for number in range(1, 14):
            # 11以上と1は置き換え
            if number == 1:
                card = symbol + 'A'
            elif number == 11:
                card = symbol + 'J'
            elif number == 12:
                card = symbol + 'Q'
            elif number == 13:
                card = symbol + 'K'
            else:
                # 10以下ならそのまま
                card = symbol + str(number)

            # カードをリストに追加
            card_list.append(card)

    return card_list


次にカードをシャッフル処理を関数として作成します。

randam.shuffle()を使えば簡単にシャッフルは作成可能。

◆実装例

    def shuffle(self, card_list):
        # カードをシャッフルする
        random.shuffle(card_list)
        return card_list

関連記事>>【Python】random.shuffle()の活用例

トランプを画面に表示する方法

トランプクラスを呼び出してカードリストを作成。
その後5枚をピックアップします。

class MyScene (Scene):
    def setup(self):
        # TrumpGame()クラスを呼び出してカードリストを作成 
        self.tg = TrumpGame()
        self.card_list = self.tg.make_card_list()
        self.card_list = self.tg.shuffle(self.card_list)
        self.draw_cards = []

        # 5枚ピックアップ
        for i in range(0, 5):
            self.draw_cards.append(
                self.card_list.pop(0)
            )

続いて描画処理の作成です。
SpriteNode()でカードの文字列を渡してadd_child()で画面に描画します。

    
        self.items = []
        for i,card in enumerate(self.draw_cards):
            item = SpriteNode('card:' + card)
            item.anchor_point = (0.5, 0)
            item.position = (80 + i * 50, 350)
            self.add_child(item)
            self.items.append(item)

トランプ作成とsceneの処理をまとめたコードは以下です。

from scene import *
import random

class MyScene (Scene):
    def setup(self):
        # バックグラウンド設定
        self.background_color = '#004f82'
        ground = Node(parent=self)
        
        self.tg = TrumpGame()
        self.make_draw_cards()

        self.items = []
        for i,card in enumerate(self.draw_cards):
                item = SpriteNode('card:' + card)
                item.anchor_point = (0.5, 0)
                item.position = (80 + i * 50, 350)
                self.add_child(item)
                self.items.append(item)
    
    def touch_began(self, touch):
        self.change_draw_cards()
    
    # 5枚引く処理
    def make_draw_cards(self):
        self.card_list = self.tg.make_card_list()
        self.card_list = self.tg.shuffle(self.card_list)
        self.draw_cards = []

        for i in range(0, 5):
            self.draw_cards.append(
                self.card_list.pop(0)
            )   
            
    # カードを交換する処理        
    def change_draw_cards(self):
        self.make_draw_cards()
        for i,card in enumerate(self.draw_cards):
                self.items[i].texture = Texture('card:' + card)
            
class TrumpGame:
    def make_card_list(self):   
        # マークのリスト
        symbol_list = ['Clubs', 'Hearts', 'Spades', 'Diamonds']
        # カードリスト
        card_list = ['Joker']

        # マークと数字を合体させる
        for symbol in symbol_list:
            for number in range(1, 14):
                # 11以上と1は置き換え
                if number == 1:
                    card = symbol + 'A'
                elif number == 11:
                    card = symbol + 'J'
                elif number == 12:
                    card = symbol + 'Q'
                elif number == 13:
                    card = symbol + 'K'
                else:
                    # 10以下ならそのまま
                    card = symbol + str(number)

                    # カードをリストに追加
                    card_list.append(card)
            
        return card_list
    def shuffle(self, card_list):
        # カードをシャッフルする
        random.shuffle(card_list)
        return card_list

if __name__ == '__main__':
    run(MyScene(), show_fps=False)

◆実行例

以上、Pythonista+sceneでトランプを作成する処理でした。

Pythonistaについてはブログでもまとめています。
Pythonistaの使い方まとめ

ブログでPythonistaで作るポーカー作成講座を作ってみました。
Pythonista+sceneポーカー作成講座

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