LoginSignup
1
4

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-02

今回は、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ポーカー作成講座

1
4
0

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
4