Pythonトランプゲーム10時半(学堂オンライン-Pythonプログラム設計基礎)タスク1-10
66851 ワード
トランプゲーム-10時半前言 10時半ゲームルール紹介 ミッション8-トランプ類 任务8-手札类 任务9-一副牌類 タスク9-プレイヤークラス タスク9-荘家類 タスク10-Game.pyフルコード TenPoinHalf_class.pyフルコード 学堂オンラインカリキュラムリンク 前言
コードファイルはTenPoinHalf_に分かれています.class.pyとGame.py 2つのファイルは、デフォルトで同じディレクトリで実行するときにGameを実行するのを容易にするために実行されます.pyファイル
10時半のゲームのルールの紹介
アイテム名:簡易な10時半のカードゲームを設計します.
プレイヤー:2人から4人で游んで、1人の荘家で、残りは暇な家です.目標:手に持っているカードの点数の和を10時半を超えないようにできるだけ大きくする.牌数:大王の52枚の牌点牌を1枚取り除く:A、2、3、4、5、6、7、9、10、そのうちAは1点の他の牌が自分の点数である.人牌:J、Q、Kは「人牌」と呼ばれ、いずれも半点とされている.
トランプ:荘家自身からトランプを始め、時計回りに順番に閑家張に最初のトランプを配った.
要牌:プレイヤーは自分のベースカードの点数によってカードを必要とするかどうかを選択することができ、勝算があると思ったら、カードを補充する必要はありません.逆に、荘家の下家から始まり、順番に荘家に補札申請を提出する.最大4枚までお願いできます.荘家は閑家の補札情報を受け取った後、必要な人にカードのトップから順番にカードを引かなければならない.1ラウンドごとにカードを補充し終わった後、もし誰かがまた補充しなければならないならば、依然として荘家に要求することができて、カードを補充する前後の順序が混乱してはいけないことに注意します.各閑家がカードの補充を要求しなくなった後、荘家は自分のカードをめくって、実際の状況を考慮してカードの山の中でカードを補充しなければならない.
爆牌:持牌総点数が10時半を超えると、爆牌と見なされます.閑家はトランプを爆発させた後、もうトランプをもらうことができず、自分が賭けたチップを荘家に送った.
勝負:荘家も補札したくない(この間爆発は起こらなかった)と、全員の持札を公開し、勝負を決める.もし荘家閑家がトランプをしたら、荘家は大きい.荘家の点数が最大(最も10時半に近いか、10時半に等しい)で、各家が注いだチップを取り出すことができます.逆に、荘家より点数の多い人がいれば、荘家は彼に自分が賭けたチップを支払わなければならない.互いに点数が同じなら引き分けと見なす.もし誰かが4枚のカードを補充したが、爆発が起こらなかったら、五龍(この基本的なカードは全部で5枚)と呼ばれ、その点数が表す意味は10時半よりも大きい.
ミッション8-トランプ類
(1)花色、数値、init()コンストラクタ、_を含むトランプを表すカードクラスを作成する.str()__関数、単一のカードのサイズを計算する関数などのメンバー.
TenPoinHalf_class.py
クエスト8-手札類
(2)手札類Handを作成し,手札をクリアする方法,1枚札を追加する方法,1枚札を出す方法,手札点数を計算する方法を含む.
TenPoinHalf_class.py
タスク9-1セットのカード類
(3)4つの手札オブジェクトを含むリストを作成する(4)52枚のカードを含む1枚のカードオブジェクトを作成し,4つの手札オブジェクトに順番にカードを発行することを実現する.最後に4つの手札のカードとその総点数を印刷します.
1つのカードクラスを作成し、1つのカードクラスを継承しますが、カードを生成したり、カードを洗ったり、カードを発行したりする方法が追加されました.
TenPoinHalf_class.py
タスク9-プレイヤークラス
トランプを呼ぶかどうか、トランプを爆発させるかどうか、トランプに負けるかどうか、トランプに勝つかどうか、引き分けなどの方法を含むプレイヤークラスを作成します.
TenPoinHalf_class.py
ミッション9-荘家類
プレイヤークラスを継承し、トランプを呼ぶかどうかを書き換える荘家クラスを作成します.
TenPoinHalf_class.py
ミッション10-Game.pyフルコード
(1)タスク9に基づいて本タスクのコード作成を完了する.(2)タスク8とタスク9で作成されたクラスをTenPoinHalf_という名前に個別に置く.classコードファイルにあります.(3)Gameというコードファイルを作成し,その中にGameクラスを作成する.(4)ゲームのメイン関数main()をGameコードファイルに作成する.(5)コードをデバッグし,10時半のゲームのすべての機能を実現する.
Game.py
TenPoinHalf_class.pyフルコード
TenPoinHalf_class.py
スクールオンラインレッスンリンク
https://next.xuetangx.com/course/SZIIT61021001122/1515546
コードファイルはTenPoinHalf_に分かれています.class.pyとGame.py 2つのファイルは、デフォルトで同じディレクトリで実行するときにGameを実行するのを容易にするために実行されます.pyファイル
10時半のゲームのルールの紹介
アイテム名:簡易な10時半のカードゲームを設計します.
プレイヤー:2人から4人で游んで、1人の荘家で、残りは暇な家です.目標:手に持っているカードの点数の和を10時半を超えないようにできるだけ大きくする.牌数:大王の52枚の牌点牌を1枚取り除く:A、2、3、4、5、6、7、9、10、そのうちAは1点の他の牌が自分の点数である.人牌:J、Q、Kは「人牌」と呼ばれ、いずれも半点とされている.
トランプ:荘家自身からトランプを始め、時計回りに順番に閑家張に最初のトランプを配った.
要牌:プレイヤーは自分のベースカードの点数によってカードを必要とするかどうかを選択することができ、勝算があると思ったら、カードを補充する必要はありません.逆に、荘家の下家から始まり、順番に荘家に補札申請を提出する.最大4枚までお願いできます.荘家は閑家の補札情報を受け取った後、必要な人にカードのトップから順番にカードを引かなければならない.1ラウンドごとにカードを補充し終わった後、もし誰かがまた補充しなければならないならば、依然として荘家に要求することができて、カードを補充する前後の順序が混乱してはいけないことに注意します.各閑家がカードの補充を要求しなくなった後、荘家は自分のカードをめくって、実際の状況を考慮してカードの山の中でカードを補充しなければならない.
爆牌:持牌総点数が10時半を超えると、爆牌と見なされます.閑家はトランプを爆発させた後、もうトランプをもらうことができず、自分が賭けたチップを荘家に送った.
勝負:荘家も補札したくない(この間爆発は起こらなかった)と、全員の持札を公開し、勝負を決める.もし荘家閑家がトランプをしたら、荘家は大きい.荘家の点数が最大(最も10時半に近いか、10時半に等しい)で、各家が注いだチップを取り出すことができます.逆に、荘家より点数の多い人がいれば、荘家は彼に自分が賭けたチップを支払わなければならない.互いに点数が同じなら引き分けと見なす.もし誰かが4枚のカードを補充したが、爆発が起こらなかったら、五龍(この基本的なカードは全部で5枚)と呼ばれ、その点数が表す意味は10時半よりも大きい.
ミッション8-トランプ類
(1)花色、数値、init()コンストラクタ、_を含むトランプを表すカードクラスを作成する.str()__関数、単一のカードのサイズを計算する関数などのメンバー.
TenPoinHalf_class.py
class Card: # Card
def __init__(self, suit, rank): # 、 、
self.suit = suit
self.rank = rank
self.value = 0.0
Card.calculate(self)
def __str__(self):
return " %s, %s, %.1f" % (self.suit, self.rank, self.value)
def calculate(self): #
if self.rank == 'A':
value = 1
elif self.rank == 'J' or self.rank == 'Q' or self.rank == 'K':
value = 0.5
else:
value = float(self.rank)
self.value = value
クエスト8-手札類
(2)手札類Handを作成し,手札をクリアする方法,1枚札を追加する方法,1枚札を出す方法,手札点数を計算する方法を含む.
TenPoinHalf_class.py
class Hand: # Hand
def __init__(self, name):
self.name = name
self.handcard = []
self.handvalue = 0.0
def __str__(self):
return " {} , {:.1f}".format(self.name, self.handvalue)
def clearhand(self): #
self.handcard.clear()
self.handvalue = 0.0
def addcard(self, card): #
self.handcard.append(card.pop(0))
Hand.handcalculate(self)
def givecard(self, card): #
self.handcard.remove(card)
Hand.handcalculate(self)
def handcalculate(self): #
value = 0
for i in range(len(self.handcard)):
value += self.handcard[i].value
self.handvalue = value
タスク9-1セットのカード類
(3)4つの手札オブジェクトを含むリストを作成する(4)52枚のカードを含む1枚のカードオブジェクトを作成し,4つの手札オブジェクトに順番にカードを発行することを実現する.最後に4つの手札のカードとその総点数を印刷します.
1つのカードクラスを作成し、1つのカードクラスを継承しますが、カードを生成したり、カードを洗ったり、カードを発行したりする方法が追加されました.
TenPoinHalf_class.py
class Deck(Hand): # ,
def __init__(self):
self.card = []
Deck.producecard(self)
Deck.refresh(self)
def producecard(self): #
for suit in ['♥', '♠', '♦', '♣']:
for rank in [
'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J',
'Q', 'K'
]:
self.card.append(Card(suit, rank))
def refresh(self): #
from random import shuffle
shuffle(self.card)
def deal(self, hand): #
hand.append(self.card.pop(0))
タスク9-プレイヤークラス
トランプを呼ぶかどうか、トランプを爆発させるかどうか、トランプに負けるかどうか、トランプに勝つかどうか、引き分けなどの方法を含むプレイヤークラスを作成します.
TenPoinHalf_class.py
class Player: #
def __init__(self, name, chip):
self.name = name
self.chip = chip
self.hand = Hand(name)
def __str__(self):
return " {} {:.1f}
".format(self.name, self.chip)
def bid(self): #
if input(" {} ? Y>>".format(self.name)) in ['Y', 'y']:
print(" ! , !
")
return True
else:
print(" {}
".format(self.name))
return False
def overflow(self): #
if self.hand.handvalue > 10.5:
print(" !
")
return True
else:
print(" !
")
return False
def winlose(self, value): #
if self.hand.handvalue > value.hand.handvalue or len(
self.hand.handcard) == 5 > len(value.hand.handcard):
print("win")
return True
else:
print("lose")
return False
ミッション9-荘家類
プレイヤークラスを継承し、トランプを呼ぶかどうかを書き換える荘家クラスを作成します.
TenPoinHalf_class.py
class Banker(Player): # ,
def bid(self): #
if input(" {} ? Y>>".format(self.name)) in ['Y', 'y']:
print(" ! , !
")
return True
else:
print(" {}
".format(self.name))
return False
ミッション10-Game.pyフルコード
(1)タスク9に基づいて本タスクのコード作成を完了する.(2)タスク8とタスク9で作成されたクラスをTenPoinHalf_という名前に個別に置く.classコードファイルにあります.(3)Gameというコードファイルを作成し,その中にGameクラスを作成する.(4)ゲームのメイン関数main()をGameコードファイルに作成する.(5)コードをデバッグし,10時半のゲームのすべての機能を実現する.
Game.py
import TenPoinHalf_class as a
class Game:
def __init__(self, id):
self.id = id
self.players = [] # 4
self.chips = [0.0, 0.0, 0.0, 0.0, 0.0]
while True:
try:
p = int(input(" (1-5)>>"))
if 1 <= p <= 5:
self.nums = p
break
else:
pass
except Exception:
print("
Error:
")
for i in range(self.nums - 1):
self.players.append(
a.Player(input(" {} >>".format(i + 1)), 100))
self.players.append(a.Banker(input(" >>"), 100))
def main(self): #
self.deckcard = a.Deck() # 52
for i in range(self.nums - 1):
while True:
try:
p = float(
input(" {} 20 >>".format(self.players[i].name)))
if 0.0 < p <= 20.0:
self.chips[i] = p
break
except Exception:
print("
Error:
")
for i in range(self.nums): # 4
self.deckcard.deal(self.players[i].hand.handcard) #
self.players[i].hand.handcalculate() #
# 4
print(self.players[i].hand, '
', *self.players[i].hand.handcard,
'
')
for i in range(self.nums):
while self.players[i].bid(): #
self.players[i].hand.addcard(self.deckcard.card) #
print(self.players[i].hand, '
',
*self.players[i].hand.handcard, '
')
if self.players[i].overflow(): #
self.players[i].hand.clearhand() #
break #
elif len(self.players[i].hand.handcard) == 5:
print(" !
")
break
for i in range(self.nums - 1):
if self.players[i].winlose(self.players[self.nums - 1]): # or
print(" {} !".format(i + 1))
self.players[i].chip += self.chips[i]
self.players[self.nums - 1].chip -= self.chips[i]
print("{} {}
".format(self.players[i].name,
self.players[i].chip))
else:
print(" {} ".format(i + 1))
self.players[i].chip -= self.chips[i]
self.players[self.nums - 1].chip += self.chips[i]
print("{} {}
".format(self.players[i].name,
self.players[i].chip))
print(" {} {}
".format(self.players[self.nums - 1].name,
self.players[self.nums - 1].chip))
print(" {}
".format(self.id))
def play():
n = 1
x = Game(n)
twice = 1
while True:
print("
{} ".format(twice))
x.main()
if input(" ? Y>>") in ['Y', 'y']:
twice += 1
else:
break
print("
")
print(*x.players)
if __name__ == '__main__':
play()
TenPoinHalf_class.pyフルコード
TenPoinHalf_class.py
class Card: # Card
def __init__(self, suit, rank): # 、 、
self.suit = suit
self.rank = rank
self.value = 0.0
Card.calculate(self)
def __str__(self):
return " %s, %s, %.1f" % (self.suit, self.rank, self.value)
def calculate(self): #
if self.rank == 'A':
value = 1
elif self.rank == 'J' or self.rank == 'Q' or self.rank == 'K':
value = 0.5
else:
value = float(self.rank)
self.value = value
class Hand: # Hand
def __init__(self, name):
self.name = name
self.handcard = []
self.handvalue = 0.0
def __str__(self):
return " {} , {:.1f}".format(self.name, self.handvalue)
def clearhand(self): #
self.handcard.clear()
self.handvalue = 0.0
def addcard(self, card): #
self.handcard.append(card.pop(0))
Hand.handcalculate(self)
def givecard(self, card): #
self.handcard.remove(card)
Hand.handcalculate(self)
def handcalculate(self): #
value = 0
for i in range(len(self.handcard)):
value += self.handcard[i].value
self.handvalue = value
class Deck(Hand): # ,
def __init__(self):
self.card = []
Deck.producecard(self)
Deck.refresh(self)
def producecard(self): #
for suit in ['♥', '♠', '♦', '♣']:
for rank in [
'A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J',
'Q', 'K'
]:
self.card.append(Card(suit, rank))
def refresh(self): #
from random import shuffle
shuffle(self.card)
def deal(self, hand): #
hand.append(self.card.pop(0))
class Player: #
def __init__(self, name, chip):
self.name = name
self.chip = chip
self.hand = Hand(name)
def __str__(self):
return " {} {:.1f}
".format(self.name, self.chip)
def bid(self): #
if input(" {} ? Y>>".format(self.name)) in ['Y', 'y']:
print(" ! , !
")
return True
else:
print(" {}
".format(self.name))
return False
def overflow(self): #
if self.hand.handvalue > 10.5:
print(" !
")
return True
else:
print(" !
")
return False
def winlose(self, value): #
if self.hand.handvalue > value.hand.handvalue or len(
self.hand.handcard) == 5 > len(value.hand.handcard):
print("win")
return True
else:
print("lose")
return False
class Banker(Player): # ,
def bid(self): #
if input(" {} ? Y>>".format(self.name)) in ['Y', 'y']:
print(" ! , !
")
return True
else:
print(" {}
".format(self.name))
return False
スクールオンラインレッスンリンク
https://next.xuetangx.com/course/SZIIT61021001122/1515546