简单想法学习写21点游戏(二)
- 扑克牌制造好了,下一步就想要做一个裁判出来,我觉得起码应该能计算手牌的点数,能裁判输赢。玩家知道规则可以自行计算手牌点数,但是电脑还是要靠代码才能计算,输赢结果也由电脑来判断。
- 有点难啊,主要在于“A”的计算上。试想过以总数不大于21的最大值来实现对A为1还是11的判断,但是有多个A时有点难办。以我这可怜的基础知识,实在有点捉襟见肘。
- 简单想法来做:反正不管有多少个A,最多只能有一个为11点,其他都只能是1点。那就先排序,把A统统放到最后,只要不是最后一个A,全部计为1点。反正程序是由上到下一句一句执行的,轮到最后一个A时,前面点数和大于10,A就计为1;小于等于10,A就计为11. 圆满解决问题,难道这就是传说中的“算法”?
- 先写写看吧:
class Hand:
def __init__(self, handcards):
self.handcards = handcards
self.point = 0
@staticmethod
def get_values(_):
values = _[1:]
return values
def arrange(self):
for _ in self.handcards:
value = self.get_values(_)
if value == 'A':
self.handcards.remove(_)
self.handcards.append(_)
return self.handcards
def counting(self):
self.arrange()
for _ in self.handcards:
value = self.get_values(_)
if value != 'A':
if value == 'J':
self.point += 10
elif value == 'Q':
self.point += 10
elif value == 'K':
self.point += 10
else:
self.point += int(value)
else:
if self.handcards.index(_) < len(self.handcards) - 1:
self.point += 1
else:
if self.point <= 10:
self.point += 11
else:
self.point += 1
return self.point
- 好像还没有判断输赢的功能,继续添加上去。提醒自己:要留好接口,这是判断两个人的输赢。
class Judge:
def __init__(self, handcards):
self.handcards = handcards
self.point = 0
@staticmethod
def get_values(_):
values = _[1:]
return values
def arrange(self):
for _ in self.handcards:
value = self.get_values(_)
if value == 'A':
self.handcards.remove(_)
self.handcards.append(_)
return self.handcards
def counting(self):
self.arrange()
for _ in self.handcards:
value = self.get_values(_)
if value != 'A':
if value == 'J':
self.point += 10
elif value == 'Q':
self.point += 10
elif value == 'K':
self.point += 10
else:
self.point += int(value)
else:
if self.handcards.index(_) < len(self.handcards) - 1:
self.point += 1
else:
if self.point <= 10:
self.point += 11
else:
self.point += 1
return self.point
@staticmethod
def judgement(role1_point, role2_point):
if role1_point <= 21 < role2_point:
var = '张老三赢了!'
score = np.array([1, 0])
elif role1_point > 21 >= role2_point:
var = '你赢了!'
score = np.array([0, 1])
elif role1_point > role2_point:
var = '张老三赢了!'
score = np.array([1, 0])
elif role1_point < role2_point:
var = '你赢了!'
score = np.array([0, 1])
elif role1_point > 21 and role2_point > 21:
var = '平局!'
score = np.array([0, 0])
else:
var = '平局!'
score = np.array([0, 0])
return var, score
- 感觉最难的一段写出来了,头发又白了好几根,还是很开心的。