掼蛋的业务逻辑

【掼蛋(淮安跑得快)游戏规则】

游戏牌数:

两副牌,共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; 
        // 还牌规则... 
    }
}

// 其他规则...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是一种常见的扑克牌游戏,也是一种很好的编程练习。下面是一个使用Node.js的游戏源码的简单解释。 Node.js是一个基于V8引擎的JavaScript运行时环境,可以让JavaScript代码在服务器端运行。使用Node.js可以创建一个实时网络应用,这个应用可以处理多个客户端的请求。 游戏源码使用Node.js实现了在网络上的玩法。游戏的核心逻辑是通过WebSocket来实现实时通信。WebSocket是一种在单个TCP连接上进行全双工通信的协议。 源码中使用了Express框架来构建Web应用,并使用了ws库来处理WebSocket通信。Express是一个流行的Web应用程序框架,它可以帮助开发者更轻松地构建Web应用。ws库是一个用于WebSocket通信的库,可以让开发者更简单地创建WebSocket服务器。 游戏源码中,服务器端负责管理游戏逻辑和处理客户端的请求,客户端通过WebSocket与服务器进行通信,并根据服务器端的指示进行游戏操作。比如,服务器会发送当前游戏的状态、当前玩家的手牌等数据给客户端,客户端可以根据这些数据进行相应的操作,比如出牌或者叫牌等。 游戏源码使用了一些设计模式,比如观察者模式和状态机模式。观察者模式用于管理游戏中的各个对象之间的关系,状态机模式则用于管理游戏的各个状态和状态转换。 总结来说,游戏源码使用了Node.js的特性来实现一个基于WebSocket的实时网络游戏。通过这个源码的学习,可以帮助开发者更好地理解Node.js和WebSocket的使用,并提高编程能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值