【掼蛋(淮安跑得快)游戏规则】
游戏牌数:
两副牌,共108张牌,每人27张牌。
2.牌型
单张:任意一张单牌。
顺子:五张点数相连的牌。(只限5张)
A在顺子中只能作为最前面或者最后面的一张牌,例如:A2345或者10JQKA是顺子,JQKA2属不符合规则的牌型。
同花顺:花色相同的顺子牌型。
对子:任意两张点数相同的牌。
两个大王或者两个小王也算做对子。
连对:三对点数相连的牌,(只限三对)如:556677。
A在连对中只能作为最前面或者最后面的一张牌,如AA2233或者QQKKAA。王不能参与到连对中。
三张:任意三张点数相同的牌。
三顺(钢板):两组点数相连的三张牌,(限定两组)如:555666。
三带二:点数相同的三张牌+一对牌,如55577
炸弹:四张或四张以上点数相同的牌。如6666,777777。
天王炸弹:四张王牌(两个大王+两个小王)
主牌:当局打到几,相应点数的牌就是主牌。
逢人配:
主牌中红桃花色的两张牌,和别的牌一起出的时候,可以替换成除了王以外的任意点数的牌,组成除天王炸弹外的任意牌型。
例如本局主牌为9:
则:
黑桃9,红桃9,10,Q,K,组成910JQK
5,5,6,7,7,红桃9,组成556677
66666666+两个红桃9,组成6666666666
3.牌型的比较
点数大小,从大到小依次为:大王、小王、主牌、A、K、Q、J、10、9、8、7、6、5、4、3、2。
A在顺子、同花顺、连对和三顺中,如果和2相连,则此时A点数算最小;
非炸弹和同花顺的牌型,牌型、张数相同才能相互比较,点数大的则大。
连对,三带二等组合牌型,比较张数多的一组的点数即可。
炸弹和同花顺牌型大于任何其他的牌型。
天王炸弹最大,同花顺大于所有5张牌和4张牌的炸弹;相同点数牌组成的炸弹,张数多的大;同花顺之间比较点数最大的一张牌即可。
4.游戏名次
按照出完牌的顺序排名次,依次为:
第一名(头游)
第二名
第三名
第四名(末游)
同一组的两个玩家获得第三名和第四名的情况,称为“双下”。
双下的情况,输方的两个玩家均算作末游。
5.升级规则
从2开始打,打到8或者打到A。
一局结束后:
如果是双下,赢家方升3级。
如果赢家方获得第一名和第三名,赢家方升2级;
如果赢家方获得第一名和末游,赢家升1级;
如果某个玩家连续3次头游,则该玩家所在的一方当局额外升1级;累计4次额外升2级,以此类推;
如果某个玩家连续3次末游,则该玩家所在的一方当局额外降1级;累计4次末游额外降2级,以此类推;
打到系统指定的最终点数的那一局,必须当局赢家没有末游才可以最终赢得本局。否则当局玩家不升级。
6.进贡规则
双下:
下一局两个输家要分别进贡一张除主牌红桃外的最大的牌给赢家;两张进贡的牌点数大的给头游,点数小的给第二名。
赢家分别还一张任意牌给自己的下家。
若两个输家方下一局一共抓了两个大王,则抗贡,不用进贡。
非双下的情况:
下一局末游玩家向头游玩家进贡一张除主牌红桃外的最大的牌,
头游玩家还一张任意牌。
若末游玩家有两张大王,可抗贡,不用进贡。
7.计分规则
在游戏中,以欢乐积分计划中累计产生的积分“欢乐豆”做为游戏计分单位。
完成一盘游戏后玩家的欢乐豆可能会发生变化,同时每盘游戏结束后,系统将自动回收每位玩家一定数量的欢乐豆。具体计算公式如下:
失败玩家的欢乐豆消耗:X×N+A
胜利玩家的欢乐豆奖励:X×N-A
系统回收的欢乐豆:根据不同游戏房间而不同
其中:
X=游戏基数
N=房间系数, 每个房间不同以具体房间为准
A=系统每盘自动回收的欢乐豆数量,根据不同游戏房间而不同
游戏基数计算规则:
一局游戏结束,赢家方升X级,游戏基数等于X。
打到8结束,游戏基数额外加5;
打到A结束,游戏基数额外加10分。
php
// 连接时
$worker->onConnect = function($connection) {
$connection->send(json_encode(['type' => 'init']));
};
// 收到消息
$worker->onMessage = function($connection, $data) {
$data = json_decode($data, true);
global $player;
$p = &$player[$connection->id];
switch ($data['type']) {
case 'fa_pai':
fa_pai();
send_pai($p['conn'], $p['pai']);
break;
case 'chu_pai':
if (can_chu_pai($data['pai'])) {
chu_pai($data);
} else {
send_msg('chu_pai_fail', '');
}
break;
case 'sheng_ji':
sheng_ji();
break;
case 'jin_gong':
jin_gong($data);
break;
}
};
// 消息推送
function send_msg($type, $data) {
global $player;
foreach ($player as $p) {
$p['conn']->send(json_encode(['type' => $type, 'data' => $data]));
}
}
// 牌组
function get_pai() {
// ...
}
// 发牌
function fa_pai() {
$pai = get_pai();
global $player;
shuffle($pai);
for ($i=0; $i<4; $i++) {
$player[$i]['pai'] = array_slice($pai, $i * 27, 27);
}
}
// 出牌规则判断
function can_chu_pai($pai) {
global $turn, $main_pai;
// 是否为主牌或同花顺
if (($pai[0] == $main_pai && count($pai) == 2)
|| is_tonghua_shun($pai)) return true;
// 其他规则判断...
}
// 升级规则
function sheng_ji() {
global $level;
if ($win[0] == $win[1]) $level[$win[0]] += 3; // 双下
elseif ($win[0] == 0 && $win[3] == 1) $level[0] += 2; // 头游+第三
elseif ($win[0] == 0 && $win[3] == 3) $level[0] += 1; // 头游+末游
// 连续头游或末游升级规则...
}
// 进贡规则
function jin_gong($data) {
global $turn;
if ($turn == 1) { // 双下
$max1 = get_max_pai($player[2]['pai']);
$max2 = get_max_pai($player[3]['pai']);
$player[0]['pai'][] = $max1;
$player[1]['pai'][] = $max2;
// 还牌规则...
} else { // 非双下
$max = get_max_pai($player[3]['pai']);
$player[0]['pai'][] = $max;
// 还牌规则...
}
}
// 其他规则...