Saya sangat baru dalam pemrograman berorientasi objek, dan saya mencoba untuk mulai belajar dengan python dengan membuat permainan kartu sederhana (seperti yang terlihat tradisional!). Saya telah melakukan contoh berikut yang berfungsi dengan baik, dan mengajari saya tentang membuat beberapa instance PlayingCard()
kelas untuk membuat instance Deck()
kelas:
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()
Saya ingin membuat sesuatu sekarang dengan kartu yang lebih kompleks, bukan hanya kartu standar 52 (yang memiliki nilai tambah yang bagus). Dek yang ada dalam benak saya adalah permainan kartu Monopoli:
Ada 3 jenis kartu fundamental - kartu AKSI, KARTU PROPERTI, dan kartu UANG. Kartu aksi melakukan tindakan yang berbeda, kartu properti milik set warna yang berbeda, dan kartu uang dapat memiliki nilai yang berbeda. Selain itu, kartu properti dapat menjadi "wildcard", dan dapat digunakan sebagai bagian dari salah satu dari dua set. Akhirnya, setiap kartu juga memiliki nilai uang yang setara (ditunjukkan di sudut atas setiap kartu). Dalam kartu aksi sewa, kartu hanya dapat berlaku untuk properti warna yang ditunjukkan pada kartu.
Pertanyaan saya umumnya bagaimana menangani situasi seperti ini, dan apa cara yang baik untuk memasukkan kartu-kartu yang berbeda ini dalam program python berbasis kelas? Haruskah saya mempertahankan PlayingCard()
kelas tunggal saya , dan hanya memiliki banyak input, seperti PlayingCard(type="PROPERTY", value="3M")
. Atau akan lebih baik untuk membuat kelas terpisah seperti ActionPlayingCard()
, PropertyPlayingCard()
, dll? Atau ada cara yang lebih baik? Seperti yang saya katakan, saya berada di awal pembelajaran saya di sini, dan bagaimana mengatur jenis situasi ini dalam hal desain tingkat yang lebih tinggi.
Terimakasih banyak.