先介绍下21点的游戏规则与流程:1、玩家共两个角色:电脑和人类,电脑是庄家2、游戏开始时,先给人类和电脑每个玩家分别发两张牌作为底牌,庄家底牌只漏一张3、判断双方底牌是否直接为21点,如果其中一方为21点则直接判胜利,并在总分上加一分。如果双方都是21点,那就是平局,不得分。4、当初始牌面上,没有直接出现21点,人类玩家根据自己的牌面大小决定是否继续要牌。如果要牌,那就在牌堆中抽一张,再次询问是否要牌。如果人类牌面的总点数超过了21点,那就直接判输。5、如果人类玩家停止要牌了,并且没有因为超过21点而被判输的情况下,则电脑要牌。电脑要牌这里,可以自己设计一个规则:比如电脑一直要牌,直到比人类玩家大才停止要牌。当然你也可以自己设定这个规则。6、 电脑要完牌之后,直接判断人类玩家和电脑玩家的牌面大小判断胜负。7、 完成一轮游戏的时候,可由人类玩家决定,是否继续玩下一轮8、 牌堆中剩余的牌数不够玩一轮游戏的时候,游戏自动结束。9、 计算规则: 2、3、4、5、6、7、8、9、10分别是正常的点数,J、Q、K都是10点10、A比较特殊,首先把A当做1来计算,牌面总分数如果小于21,那么再把A当做11再计算一次,如果这个时候仍然小于21,那么A就当11算,如果这个时候牌面总分数大于了21,那么A就当1算。下面是python实现的详细代码:# coding: utf-8 -*-
import random
import numpy as np
from random import shuffle
# 定义扑克牌所表示的点数
playing_cards = {
"黑桃A": 1, "黑桃2": 2, "黑桃3": 3, "黑桃4": 4, "黑桃5": 5, "黑桃6": 6, "黑桃7": 7,
"黑桃8": 8, "黑桃9": 9, "黑桃10": 10, "黑桃J": 10, "黑桃Q": 10, "黑桃K": 10,
"红桃A": 1, "红桃2": 2, "红桃3": 3, "红桃4": 4, "红桃5": 5, "红桃6": 6, "红桃7": 7,
"红桃8": 8, "红桃9": 9, "红桃10": 10, "红桃J": 10, "红桃Q": 10, "红桃K": 10,
"方块A": 1, "方块2": 2, "方块3": 3, "方块4": 4, "方块5": 5, "方块6": 6, "方块7": 7,
"方块8": 8, "方块9": 9, "方块10": 10, "方块J": 10, "方块Q": 10, "方块K": 10,
"梅花A": 1, "梅花2": 2, "梅花3": 3, "梅花4": 4, "梅花5": 5, "梅花6": 6, "梅花7": 7,
"梅花8": 8, "梅花9": 9, "梅花10": 10, "梅花J": 10, "梅花Q": 10, "梅花K": 10
}
# 扑克牌列表
poker_names = list(playing_cards.keys())
# 用于判断手牌中是否有A
poker_a = {'黑桃A', '红桃A', '梅花A', '方块A'}
# 定义牌的数量
poker_count = 1
# 最终生成的牌
poker_list = poker_names * poker_count
# 总分的计分器,numpy中的人数组和我们正常使用的数组差不多作用,这里数组中有两个元素,第一个代表玩家的分数,第二个代表电脑的分数
total_score = np.array([0, 0])
# 记录游戏是第几个汇合
game_round = 1
def random_card(pokers):
"""
洗牌,重新对扑克牌进行随机排列
"""
# 声明一个列表,用来存储洗过之后的牌
shuffle(pokers)
return pokers
def get_one_poker(pokers):
"""
发牌:要牌的时候,需要从牌堆随机抽取一张牌
"""
# 发一张牌,并在牌堆中删除这张牌
return pokers.pop()
def score_count(hand_poker):
"""
计算手里的牌的分数
"""
# 计算牌的点数
has_a = False
core = 0
for poker in hand_poker:
core += playing_cards[poker]
if poker in poker_a:
has_a = True
if has_a and core + 10 <= 21:
core += 10
return core
def who_win(your_poker, pc_poker):
"""
判断是谁赢了
"""
your_score = score_count(your_poker)
pc_score = score_count(pc_poker)
if your_score == 21 and pc_score == 21:
print("你手上的牌为:", your_poker)
print("电脑的牌为:", pc_poker)
print("平局!")
return np.array([1, 1])
elif your_score <= 21 and (pc_score > 21 or pc_score < your_score):
print("你手上的牌为:", your_poker)
print("电脑的牌为:", pc_poker)
print("你赢了!")
return np.array([1, 0])
else:
print("你手上的牌为:", your_poker)
print("电脑的牌为:", pc_poker)
print("电脑赢了!")
return np.array([0, 1])
def if_get_next_poker(pokers):
"""
是否继续要牌
"""
print("你手上的牌为:", pokers)
input_message = input("是否继续要牌? y/n")
if input_message.lower() == "y":
return True
else:
return False
def continue_or_quit():
"""
一轮游戏结束后,是继续还是结束
当牌堆里面牌的数目不足的时候,自动停止游戏
"""
if len(poker_list) >= 4:
input_message = input("是否开启下一轮? y/n")
if input_message.lower() == "y":
return True
else:
print("剩余的牌不够玩下一轮了,游戏结束")
print("总比分:", total_score)
return False
def start_game_init_two_poker(poker_database):
# 开局的时候,自动给玩家和电脑发两张牌
return [
poker_database.pop(random.randint(0, len(poker_database)-1)),
poker_database.pop(random.randint(0, len(poker_database)-1))
]
def one_round(poker_list):
"""
每一轮游戏的流程
"""
your_poker = start_game_init_two_poker(poker_list)
pc_poker = start_game_init_two_poker(poker_list)
your_score = score_count(your_poker)
pc_score = score_count(pc_poker)
if your_score == 21 and pc_score == 21:
print("你手上的牌为:", your_poker)
print("电脑的牌为:", pc_poker)
print("平局!")
return np.array([1, 1])
elif your_score > 21:
print("你手上的牌为:", your_poker)
print("电脑的牌为:", pc_poker)
print("电脑赢了")
return np.array([0, 1])
elif pc_score > 21:
print("你手上的牌为:", your_poker)
print("电脑的牌为:", pc_poker)
print("你赢了")
return np.array([1, 0])
else:
pass
# 玩家要牌
while if_get_next_poker(your_poker):
your_poker.append(poker_list.pop())
if score_count(your_poker) > 21:
break
# 电脑要牌,这里简单设定:只要牌数没有超过20.就继续要牌
while score_count(pc_poker) < 20:
pc_poker.append(poker_list.pop())
return who_win(your_poker, pc_poker)
input('游戏开始,祝你好运哦!按"回车"游戏正式开始\n')
while True:
print('游戏第{}轮 :'.format(game_round))
# 打印一下游戏的分隔符
print('*' * 60)
# 洗牌
random_card(poker_list)
# 一轮游戏开始
score = one_round(poker_list)
# 计算总比分
total_score = np.add(total_score, score)
print('目前比分为:玩家{}:电脑{}'.format(total_score[0], total_score[1]))
game_round += 1
# 本轮结束,继续还是退出游戏
if not continue_or_quit():
break
2杠牌:杠牌和听牌相对比较简单捕鱼机技巧,给大家介绍几个原则就可以。从杠牌这个角度来讲呢,如果下家打出一张牌正好是你想要杠的牌的话要杠,因为时间上你要是杠牌了你就多一次抓牌的机会。再者如果手中的牌行十分不好不妨杠它一下换换牌道。
首先,要熟练了解规则捕鱼机技巧,根据规则来玩游戏。玩家无论在任何一个游戏平台上玩麻将游戏都要对其规则熟练掌握,否则很难赢得游戏。对于玩家们来说了解游戏规则是开始游戏的第一步,要让自己熟悉规则,然后才能利用规则。而且对于规则的各个方面要多了解,并且能够找到其中的关联,这样才能让自己在游戏的过程中充分调动起来已有的游戏经验,才能让自己提高赢得游戏的机会。