前提・実現したいこと
プログラミング初心者です。
『独学プログラマー』のサンプルコード「戦争」を少しアレンジも加えながら理解を深めようとしているのですが、エラーが発生し、その解決方法を見つけられずにいます。
ご指摘いただけますと幸いです。
発生している問題・エラーメッセージ
エラーメッセージ Line 76 Line 106 ‘Game’ object has no attribute ‘deck’ ### 該当のソースコード from random import shuffle # カード(トランプ)のクラス class Card: suits = ['スペード', 'ハート', 'ダイヤ', 'クラブ'] values = [None, None, '2', '3', '4', '5', '6', '7', '8', '9', '10', 'ジャック', 'クイーン', 'キング', 'エース'] 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: return self.suit < c2.suit return False def __gt__(self, c2): if self.value > c2.value: return True if self.value == c2.value: return self.suit > c2.suit return False def __repr__(self): v = self.suits[self.suit] + 'の' + self.values[self.value] return v # デッキのクラス class Deck: def __init__(self): self.cards = [] for i in range(2, 15): for j in range(4): self.cards.append(Card(i, j)) shuffle(self.cards) def draw(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('プレイヤー1の名前を入力してください: ') name2 = input('プレイヤー2の名前を入力してください: ') self.deck = Deck() self.p1 = Player(name1) self.p2 = Player(name2) def print_winner(self, winner): w = 'このラウンドは {} が勝ちました' print((w.format(winner.name))) def print_draw(self, p1, p2): d = '{} は {} 、 {} は {} を引きました' print((d.format(p1.name, p1.card, p2.name, p2.card))) def play_game(self): cards = self.deck.cards print('Warをはじめます') while len(cards) >= 2: m = 'qで終了、それ以外のキーでプレイ: ' response = input(m) if response == 'q': break self.p1.card = self.deck.draw() self.p2.card = self.deck.draw() self.print_draw(self.p1, self.p2) if self.p1.card > self.p2.card: self.p1.wins += 1 self.print_winner(self.p1) else: self.p2.wins += 1 self.print_winner(self.p2) 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 = Game() game.play_game()
Python 3.6
試したこと
入力ミス等ないか確認しましたが、問題を解決できませんでした。
補足情報(FW/ツールのバージョンなど)
環境:Pythonista
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/08 14:47