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