Tôi cực kỳ mới đối với lập trình hướng đối tượng và đang cố gắng bắt đầu học về python bằng cách tạo ra một trò chơi bài đơn giản (dường như là truyền thống!). Tôi đã thực hiện ví dụ sau đây hoạt động tốt và dạy tôi về việc tạo nhiều thể hiện của PlayingCard()
lớp để tạo một thể hiện của Deck()
lớp:
class PlayingCard(object):
def __init__(self, suit, val):
self.suit = suit
self.value = val
def print_card(self):
print("{} of {}".format(self.value, self.suit))
class Deck(object):
def __init__(self):
self.playingcards = []
self.build()
def build(self):
for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
for v in range(1,14):
self.playingcards.append(PlayingCard(s,v))
deck = Deck()
Tôi muốn tạo ra một cái gì đó ngay bây giờ với các thẻ phức tạp hơn, không chỉ là một cỗ bài 52 tiêu chuẩn (có giá trị tăng dần). Bộ bài tôi có trong đầu là trò chơi bài Monopoly:
Có 3 loại thẻ cơ bản - thẻ HÀNH ĐỘNG, THẺ TÀI SẢN và thẻ TIỀN. Thẻ hành động thực hiện các hành động khác nhau, thẻ thuộc tính thuộc các bộ màu khác nhau và thẻ tiền có thể có các giá trị khác nhau. Ngoài ra, thẻ thuộc tính có thể là "ký tự đại diện" và có thể được sử dụng như một phần của một trong hai bộ. Cuối cùng, mỗi thẻ cũng có một giá trị tiền tương đương (được chỉ định ở góc trên cùng của mỗi thẻ). Trong thẻ hành động thuê, thẻ chỉ có thể áp dụng cho thuộc tính màu được chỉ định trên thẻ.
Câu hỏi của tôi nói chung là làm thế nào để xử lý một tình huống như thế này, và cách tốt nhất để đưa các thẻ khác nhau này vào một chương trình python dựa trên lớp là gì? Tôi có nên giữ PlayingCard()
lớp duy nhất của mình và chỉ cần có nhiều đầu vào, chẳng hạn như PlayingCard(type="PROPERTY", value="3M")
. Hoặc nó sẽ được tốt hơn để tạo ra các lớp học riêng biệt chẳng hạn như ActionPlayingCard()
, PropertyPlayingCard()
, vv? đây có phải là cách tốt hơn không? Như tôi đã nói, tôi đang bắt đầu học ở đây và làm thế nào để tổ chức các loại tình huống này theo thiết kế cấp cao hơn.
Cảm ơn nhiều.