توزیع کارت به چه صورت انجام میشود ؟
توزیع کارت به چه صورت انجام میشود ؟
اکنون که یک کلاس Hand داریم، میخواهیم کارتها را از Deck به دستها توزیع کنـیم. در ابتدا مشخص نیست که این متد باید در کلاس Hand باشد یا کلاس Deck ،اما از آنجا کـه ایـن متـد روي یک دسته ورق واحد و احتمالاً روي چند دست کارت عمل میکند، طبیعیتـر اسـت کـه آن را در Deck قرار دهیم. deal باید به اندازة کافی جامع باشد، زیرا بازيهاي گوناگون نیازمنـديهـاي مختلفـی دارنـد. ممکن است بخواهیم یک مجموعه ورق دستنخورده را یکباره توزیع کنیم، یا اینکه کارتها را یکییکی به هر دست اضافه کنیم. deal دو پارامتر میگیرد. پـارامتر اول یـک لیسـت (یـا چنـدتایی) از دسـتهـا و تعـداد کـل کارتهایی است که باید توزیع شود. اگر کارتهاي کافی درون دسته ورق نباشد، متد تمام کـارتهـا را توزیع میکند و متوقف میشود:
class Deck:
…
def deal(self, hands, nCards=999):
nHands = len(hands)
for i in range(nCards):
if self.isEmpty(): break # break if out of cards
card = self.popCard() # take the top card
hand = hands[i % nHands] # whose turn is next?
hand.addCard(card) # add the card to the hand
پارامتر دوم، nCards ،اختیاري است: مقدار پیشفـرض عـدد بزرگـی اسـت کـه یعنـی تمـام کارتهاي درون دسته ورق توزیع خواهد شد. متغیر حلقه، i ،از 0 تا 1-nCards را سیر میکند. هر بار در طول حلقه یک کـارت از دسـته ورق با استفاده از متد pop حذف میشود. این متد آخرین عنصر را حذف میکند و برمیگرداند. عملگر باقیمانده (%) به ما این اجازه را میدهد که کارتها را با نوبت گردشی توزیع کنیم (هـر کارت در هر نوبت به یک دست). هنگامی که i با تعداد دستهاي داخل لیست برابر مـیشـود، عبـارت nHands%i به ابتداي لیست (اندیس 0) میچرخد.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید