前提・実現したいこと
python学習の一環としてカードゲーム"War"を作成していました。
結果の文字列になっているところをトランプの数字、記号にしたい(例:4 of spades)
発生している問題・エラーメッセージ
以下結果
Player1 name:ryo
Player2 name:taro
Let's start war
q to finish, type go to play:go
ryo drew <main.Card object at 0x03F0C958>,taro drew <main.Card object at 0x03F0C688>
ryo wins this round
q to finish, type go to play:
該当のソースコード
from random import shuffle class Card: suits=["spades","hearts","diamonds","clubs"] values=[None,\ "Ace","2","3","4","5","6","7","8","9","10",\ "Jack","Queen","King"] def __init__(self,v,s): self.value=v self.suit=s def __lt__(self,c2): if self.value<c2.value: return True if self.value==c2.value: if self.suit<c2.self: return True else: return False return False def __gt__(self,c2): if self.value>c2.value: return True if self.value==c2.value: if self.suit>c2.suit: return True else: return False return False def __rept__(self): v=self.values[self.value]+"of"+self.suits[self.suit] return v class Deck: def __init__(self): self.cards=[] for i in range(1,14): for j in range(4): self.cards.append(Card(i,j)) shuffle(self.cards) def rm_card(self): if len(self.cards)==0: return return self.cards.pop() class Player: def __init__(self,name): self.wins=0 self.card=None self.name=name class Game: def __init__(self): name1=input("Player1 name:") name2=input("Player2 name:") self.deck=Deck() self.p1=Player(name1) self.p2=Player(name2) def wins(self,winner): w="{} wins this round" w=w.format(winner) print(w) def draw(self,p1n,p1c,p2n,p2c): d="{} drew {},{} drew {}" d=d.format(p1n,p1c,p2n,p2c) print(d) def play_game(self): cards=self.deck.cards print("Let's start war") while len(cards)>=2: m="q to finish, type go to play:" response=input(m) if response=="q": break elif response=="go": 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.p1.wins+=1 self.wins(self.p1.name) else: self.p2.wins+=1 self.wins(self.p2.name) else: print("please type go or q") win=self.winner(self.p1,self.p2) print("Game is Over, {} is winner".format(win)) def winner(self,p1,p2): if p1.wins>p2.wins: return p1.name if p1.wins<p2.wins: return p2.name return "Draw" game=Game() game.play_game()
試したこと
参考書と比べても違うところは見つからず(個人的に仕様を変更したところは除いて)。
おそらく__repr__メソッドのところ、もしくはrm_cardメソッドのところがおかしいのかなと思っているのですが具体的に何を直したらいいかわかりません。
補足情報(FW/ツールのバージョンなど)
これはコーリー・アルソフ著の独学プログラマーの第15章の内容になります。
回答1件
あなたの回答
tips
プレビュー