بازی با کارت (قسمت اول)

بازی با کارت

به دوره آموزش پایتون خوش آمدید. برای رفتن به اولین جلسه این دوره، اینجا کلیک کنید. جلسه قبل درمورد تابع سازنده در پایتون صحبت کردیم. همیشه برای یادگیری شی گرایی، بهترین روش انجام یک پروژه عملی بوده است. از این رو میخواهیم ادامه این مبحث را پروژه محور ادامه دهیم. پروژه ای که در نظر گرفته شده بازی با کارت است که از قوانین زیر پیروی میکند:

ﯾﮏ دﺳﺘﻪ ورق ﺷﺎﻣﻞ ﭘﻨﺠﺎه و دو ﮐﺎرت اﺳﺖ. اﯾﻦ ﮐﺎرتﻫﺎ ﺑﻪ ﭼﻬﺎرﮔﺮوه ﺳﯿﺰدهﺗﺎﯾﯽ ﺑﺎ ﭼﻬﺎر ﺧﺎل ﻣﺘﻔﺎوت ﺗﻘﺴﯿﻢ ﺷﺪه اﻧﺪ. در ﺑﺮﺧﯽ از ﺑﺎزیﻫﺎ ارزش ﻫﺮ ﺧﺎل ﻧﺴﺒﺖ ﺑﻪ دﯾﮕﺮ ﺧﺎلﻫﺎ ﻣﺘﻔﺎوت است. ﻣﺜﻼً ﺑـﻪ اﯾﻦ ﺻﻮرت:

 

Clubs < Diamonds < Hearts < Spades

 

ﻫﺮ دﺳﺘﮥ ﺳﯿﺰدهﺗﺎﯾﯽ ﺑﻪ اﯾﻦ ﺗﺮﺗﯿﺐ است:

Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King

 

ﺑﺴﺘﻪ ﺑﻪ ﻧﻮع ﺑﺎزی ﻣﻤﮑﻦ اﺳﺖ اﻣﺘﯿﺎز Ace از King ﺑﯿﺸﺘﺮ یا از ۲ ﮐﻤﺘﺮ ﺑﺎشد.

پس لازم است ابتدا به کامپیوتر بفهمانیم که کارت چیست چه روابطی بین آن هاست، و بعد از آن میتوانیم بازی هایی را برنامه ریزی کنیم.

همانطور که قبلا گفته شد همیشه از جزیی ترین قسمت یک شی شروع میکنیم. قبل از اینکه هرگونه دسته کارت یا قوانین بازی ای داشته باشیم باید بدانیم که یک کارت چیست.

پس از کلاس کارت شروع میکنیم که دو خصوصیت دارد:

  • رتبه کارت
  • خال کارت

که به ترتیب آن ها را rank و suit مینامیم.

مشکلی که وجود دارد این است که اگر برای یازدهمین کارت از کلمه “Jack” استفاده کنیم، آنوقت هنگام مقایسه کردن کارت ها به اشکال بر میخوریم. این نکته درمورد خال ها هم اتفاق می افتد. راه حلی که باید از آن استفاده کنیم این است که رتبه ها و خال ها را به رمز گذاری کنیم و به طور قراردادی بگوییم که هر خال یا رتبه معادل یک عدد است:

Clubs                     ۰

Diamonds             ۱

Hearts                   ۲

Spades                  ۳

Jack                      ۱۱

Queen                   ۱۲

King                      ۱۳

 

کلاس Card را مینویسیم، باید توجه کنیم که برای نام گذاری کلاس ها با حروف بزرگ شروع کنیم، این کار خوش خطی برنامه نویس را میرساند.

class Card:
    def __init__(self, suit=0, rank=0):
        self.suit = suit
        self.rank = rank

وقتی قرار نیست از وراثت استفاده کنیم میتوانیم در تعریف کلاس از پرانتز استفاده نکنیم. این کلاس دو ورودی میگیرد که مقدار پیش فرض آن ها صفر است.

حالا از این کلاس یک شی میسازیم:

card = Card(0,3)

این کارت ( ۳ از Clubs ) میباشد، انتظار داریم وقتی این شی را پرینت میکنیم برای ما چاپ شود : Three of Clubs

اما هنگام پرینت، این اتفاق می افتد:

print(card)
# <__main__.Card object at 0x038BB9A0>

راه حل این مشکل را در قسمت بعدی مورد بررسی قرار میدهیم.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *