小游戏程序业务:
由于我不会玩21点,写出来的程序有点瑕疵~ 谢谢理解
21点游戏规则与流程:
- 玩家共两个角色:电脑和人类,电脑是庄家
- 判断双方底牌是否直接为21点,如果其中一方为21点则直接判胜利
- 如果人类牌面的总点数超过了21点,那就直接判输
- 如果玩家停止要牌了,并且没有超过21点的情况下,则电脑根据概率要牌。
- 电脑要完牌之后,直接判断人类玩家和电脑玩家的牌面大小判断胜负。
- 完成一轮游戏的时候,可由人类玩家决定,是否继续玩下一轮
- 牌堆中剩余的牌数不够玩一轮游戏的时候,由玩家决定是否重新取牌。
- 计算规则: 2、3、4、5、6、7、8、9、10分别是正常的点数,J、Q、K都是10点
- A比较特殊,A可以做为1或11。
代码展示
import time
import random
def welcome_game():
print('欢迎光临21点小游戏')
time.sleep(1) # 休眠1秒
print('祝您玩的愉快')
game_cmd()
# 判断是否游戏
def game_cmd():
f_command = input('是否进入游戏?y(进入)/n(退出)')
if f_command == 'y':
game_start()
elif f_command == 'n':
print('期待您的下次光临')
quit()
else:
print('输入错误,请查证后再次输入')
game_cmd()
# 新扑克牌列表
def card_list():
f_list = ['J','Q','K','A']*4
card_list =[i for i in range(2,11)]*4
card_list.extend(f_list)
# 打乱扑克牌顺序
random.shuffle(card_list)
return card_list
# 概率控制
def computer_p(score):
# 前面的数占总数的百分比
p = (21-score)/13
# 如果符合这些情况,就继续要牌,否则返回0
if p > 1/4 and score < 13 or p > 1/3 and score <16 or p > 1/2 and score <17 or p > 3/4 and score <18:
x = 1
else :
x = 0
return x
# 计算得分
def sorce(score_list):
score = 0
num = score_list.count('A')
for i in score_list:
if i == 'J' or i =='Q' or i == 'K':
score += 10
elif i == 'A':
score += 1
else:
score += i
# 21点最多加1个10分
if num >= 1 and score < 12:
return score+10
else:
return score
# 判断函数
def pd_fun(new_card_list):
if len(new_card_list) > 8:
again_cmd = input('请选择是否继续?y/n')
if again_cmd == 'y':
x = True
person = []
computer = []
return x, person, computer
else:
quit()
else:
again_cmd = input('请选择是否继续?y/n')
print('我要重新取牌了')
if again_cmd == 'y':
game_start()
else:
quit()
# 开始游戏
def game_start():
person = []
computer = []
# 取出一副顺序随机的扑克牌
new_card_list = card_list()
person_score = 0
computer_score = 0
x = 1
while x:
# 选择是否要牌
Pcmd = input('请选择是否要牌?:y/n')
Ccmd = '1'
if Pcmd =='y':
# 取出的牌和剩余牌数
card= new_card_list.pop(-1)
person.append(card)
person_score = sorce(person)
print('你的牌为:', person)
print('点数和为:', person_score)
if person_score > 21:
print('你输了!')
# 调用函数判断是否继续玩
x,person,computer = pd_fun(new_card_list)
else:
Pcmd = 'n'
if computer_p(sorce(computer)) == 1:
card = new_card_list.pop(-1)
computer.append(card)
computer_score = sorce(computer)
#print('电脑牌为:', computer)
#print('点数和为:', computer_score)
if computer_score > 21:
print('电脑输了')
x,person,computer = pd_fun(new_card_list)
else:
Ccmd = 'n'
if Pcmd == 'n' and Ccmd == 'n':
if person_score > computer_score:
print('你的牌面:{},电脑牌面{},你赢了!'.format(person,computer))
elif person_score == computer_score:
print('你的牌面:{},电脑牌面{},平局!'.format(person,computer))
else:
print('你的牌面:{},电脑牌面{},电脑赢!'.format(person,computer))
x,person,computer = pd_fun(new_card_list)
if __name__ == '__main__':
welcome_game()