Python-知識を一つに-3
game,ゲーム
class Game:
def __init__(self):
name1 = input("プレーヤー1の名前")
name2 = input("プレーヤー2の名前")
self.deck = Dec()
self.p1 = player(name1)
self.p2 = player(name2)
def wins(self, winner):
w = "このラウンドは {} が勝ちました"
w = w.format(winner)
print(w)
def draw(self, p1n, p1c, p2n, p2c):
d = "{}は{},{}は{}を引きました"
d = d.format(pln, p1c, pn2, p2c)
print(d)
def play_game(self):
cards = self.deck.cards
print("戦争を始めます!")
while len(cards) >= 2:
m = "qで終了、それ以外のキーでplay:"
response = input(m)
if response == 'q':
break
p1c = self.deck.rm_card()
p2c = self.deck.rm_card()
p1n = self.p1.name
p2n = self.p2.name
self.draw(p1n, p1c, p2n, p2c)
if p1c > p2c:
self.pl.wins += 1
self.wins(self.p1.name)
else:
self.p2.wins += 1
self.wins(self.p2.name)
win = self.winner(self.p1, self.p2)
print("ゲーム終了,{}の勝利です!".format(win))
def winner(self, p1, p2):
if p1.wins >p2.wins:
return p1.name
if p1.wins < p2.wins:
return p2.name
return "引き分け!"
解説
Gameオブジェクトを作ると、、Pythonは__init__メソッドを呼びます。
するとinput関数が実行されて、プレイヤーの名前を聞いてきます。
入力した値はname1とname2に格納されます。つぎに、Deckのオブジェクト
を作ってインスタンス変数deckに格納し、そして、先程の2つのname1と
name2を使ってplaye オブジェクトをつくります。
Gameクラスんplay_gameメソッドでゲームが始ります。このメソッドはゲーム中
ずーとループするコードを持ち、デッキのカードが2枚未満になるか、response
にqという文字が代入されるまで繰り返します。ループを回すごとにrespons変数に
ユーザーから入力された値が代入されます。
play_gameメソッドでは、ループごとに2つのカードがデッキから引かれ、1枚目をself.p1.card,2枚目をself.p2.cardに代入します。そして、引いたカードを
プリント出力し、2枚のカードのどちらが大きいか比較します。大きいカードをひい
たプレイヤーのwinsインスタンス変数をインクリメントして、勝者がどちらかを表示
ます。
Gameクラスのwinnerメソッドは2つのプレーヤーオブジェクトを引数で受取
ります。そして、どちらの勝利回数が多いか比較して、多く勝った方のプレイヤーの
名前を返します
Deckオブジェクトからカードがなくなったら、play_gameメソッドはwinnerメソ
ッドを呼び(p1とp2を渡します)、そしてゲームの勝者を表示して終了します。