이 질문은 싫어하고 아마도 정말로 신속하게 대답 할 것이라고 이미 말할 수 있습니다. Id는이 사실을 당신이 내가 이것을 조사했음을 알리는 것에 의해 서언하기를 좋아하지만, 할 수있는 일을 이해하지 못한다.파이썬에서 클래스의 인스턴스를 하나만 사용하는 방법
그래서 나는 카드 게임을 만드는 파이썬 스크립트가 있습니다. 마음에있는 카드 놀이는 3 's이다. 내 가족에게만 게임하는 법을 아는 게임.
내 스크립트는 지금까지입니다 :
import math
import random
from itertools import product
def start_game():
print ("Game started")
deck = Deck()
deck.current_turn = random.randint(1,2)
print ("Player " + str(deck.current_turn) + " will go first.")
Round_Start()
def Round_Start():
deck = Deck()
p1down = Player1Down()
p2down = Player2Down()
p1up = Player1Up()
p2up = Player2Up()
if p1down.hidden == True:
print("P1: " + " - ".join(map(str,p1up.cards)))
print("P1: #/# - #/# - #/#")
else:
print("P1: " + " - ".join(map(str,p1up.cards)))
print("P1: " + " - ".join(map(str,p1down.cards)))
if p2down.hidden == True:
print("P2: " + " - ".join(map(str,p2up.cards)))
print("P2: #/# - #/# - #/#")
else:
print("P2: " + " - ".join(map(str,p2up.cards)))
print("P2: " + " - ".join(map(str,p2down.cards)))
Give_Turn()
def P1Turn():
print("It is now Player 1's turn.")
def P2Turn():
print("It is now Player 2's turn.")
def Give_Turn():
deck = Deck()
print(deck.current_turn)
if deck.current_turn == 2:
print("It is now Player 1's turn.")
P1Turn()
elif deck.current_turn == 1:
print("It is now Player 2's turn.")
P2Turn()
class Player1Down(object):
def __init__(self):
deck = Deck()
self.cards = deck.Deal(3)
self.hidden = True
class Player2Down(object):
def __init__(self):
deck = Deck()
self.cards = deck.Deal(3)
self.hidden = True
class Player1Up(object):
def __init__(self):
deck = Deck()
self.cards = deck.Deal(3)
class Player2Up(object):
def __init__(self):
deck = Deck()
self.cards = deck.Deal(3)
class Deck(object):
current_turn = 0
def __init__(self, ranks=None, suits=None):
if ranks is None:
ranks = range(2,15)
if suits is None:
suits = ["H","D","C","S"]
self.deck = []
for r in ranks:
for s in suits:
self.deck.append(Card(r,s))
def Deal(self, n):
return random.sample(self.deck,n)
class Card(object):
FACES = {11: 'J', 12: 'Q', 13: 'K', 14: 'A'}
def __init__(self, rank, suit):
self.suit = suit
self.rank = rank
def __str__(self):
value = self.FACES.get(self.rank, self.rank)
return "{0}/{1}".format(value, self.suit)
def __lt__(self, other):
return self.rank < other.rank
if __name__ == '__main__':
start_game()
지금 스크립트의 일부는 다른 사용자가 내가 일을이 시점까지 작동시킬 수있는 유일한 방법이었다, 직장에서 직접 복사 붙여 넣기입니다.
내 문제는
deck.current_turn
는 내가 연 데크() 클래스의 여러 인스턴스를 가질 수 있기 때문입니다 알아낼 0으로 재설정 유지한다는 것이다. 그러나 나는 이것을 고치는 법을 모른다. 현재 스크립트에서
내 출력은 다음과 같습니다
Game started
Player 2 will go first.
P1: 7/H - 9/H - J/H
P1: #/# - #/# - #/#
P2: 5/H - 3/S - 10/H
P2: #/# - #/# - #/#
0
이것은 내 첫 번째 스택 교환 포스트이며,이 바보 같은 질문 경우 미안 해요.
게임을 시작할 때'Deck'을 한 번 만든 다음 모든 기능에'deck' 변수로 전달하십시오. 어쨌든 실생활에서는 매 게임마다 게임 덱에서 새 갑판을 구입하지 않을 것입니다. 어쨌든 하나의 프로그램에서 여러 게임을 실행할 수 없기 때문에 어쨌든 나쁜 생각 일 것입니다. – Rufflewind
네, 새로운'Deck()'인스턴스를 만들 때마다 현재 턴은 0이됩니다. 게임을 시작할 때 하나의'Deck' 인스턴스를 만든 다음 내부적으로 처리하십시오. 'Game'과 같은 새로운 클래스를 만들고, __init__ 메소드에서'Deck'을 인스턴스화 할 수 있습니다. 그렇게하면 게임 내내 self.deck을 참조 할 수 있습니다. – reptilicus
나는 Rufflewind와 Reptilicus가 주어진 해답을 조합 해 해결책을 찾았다. 나는 'Game'이라는 클래스를 만들었고 거기에서 'Deck'을 인스턴스화하고 나머지 'Game'클래스에서 참조했습니다. 매력을 발휘합니다. 감사! –