search
LoginSignup
4

More than 3 years have passed since last update.

posted at

updated at

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ポーカー作成講座

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
What you can do with signing up
4