地方游戏,绥江-丢,状态机设计

术语解释:

叫牌:

挖到或者前面的玩家出牌,轮到自己对这个牌发表意见。�� 包括:放弃、吃、筷、对、水、丢

要牌:

当前轮到的牌,自己叫牌优先级最高,可以将牌与自己手中的牌与底牌匹配,吞掉(吃、筷、对、水、丢)

等牌:

其他玩家在对牌做处理,要么是在要牌(等他打出新的牌),要么是在等待这个玩家叫牌。

摸牌:

上一张牌已经确定了没有人叫牌,轮到自己从底牌中拿起新的一张牌。

丢牌:

逻辑

角色与规则定义:

  • 两边是另外两个玩家,玩家轮流摸牌,摸到牌依次叫牌,叫牌后根据优先级最高的人判断给谁优先处理。

  • 每一个玩家摸到牌之后,其他玩家自动弹出对或者吃的提示。由玩家确定要选择哪种,
    特殊点:选择丢牌,则让玩家选出手中用来丢牌的另外两张牌,合法的逻辑就可以让该玩家丢牌,并结束游戏。

  • 要牌的玩家,如果不是丢牌,则需要打出一张新的牌。

  • 叫牌后的牌,分派牌的优先级规则是:吃 < 块 < 块水 < 硬对(或者块水,2张硬牌)< 丢(结束游戏)。

  • 限定要牌的时间为15秒(暂定),限定听牌的时间为20秒(暂定)。

洗牌规则:

  • 模拟短牌在桌面上的洗牌方式。
    对半开+使用随机数(小于10)再分配半的数量,
    得到:数组A + 数组B,在A、B之间随机获得其中一方的最前面一张牌(根据奇偶性质),并移动到新的数组C中,直到AB数组都移除。重复此过程3次即可。

打牌规则:

  • 分为:ABCD三个角色玩家,由系统分配玩家(1234)角色,角色和玩家之间的对应关系为A头家,BC陪玩,D闲家。

  • 发牌以类似区块链的规则处理,底牌直接以每次10张发送给玩家,少于3张时,再次发送10张,直到底牌发完。
    这样每个玩家都有3到13张底牌,可以在摸牌的时候不会因为网络慢而不能立刻看到摸起来的牌。

  • 头家打牌之后,轮次发放牌。发牌之后从摸牌家起轮询是否要牌。

tnA, tnB, tnC: turnA, turnB, turnC
1、挖牌后:
logic A,叫牌:
tnA是否喊牌,然后轮询其他玩家是否拦截。
tnB喊牌,tnC决定是否拦截。
tnC家决定是否要牌,轮询结束。

任意一家轮询过程中给丢牌了,都结束游戏,并且不再轮询后续玩家。

logic B,要拍:
若没有人叫牌,玩家轮流的角色变更。开始新的一轮叫牌。
有人叫牌,
需要前面的玩家再次叫牌,原本优先级低(并且不是叫吃、筷)的玩家是否要丢。
则根据谁的优先级高,分派牌给对应的玩家。
2、头家出牌:排除丢牌的逻辑,B是否要牌,C是否拦截。
B不要牌,C是否要牌。

A的牌,C不能吃。

除了摸牌并有人丢牌,其他情况都是挨个轮询对这个牌的决定,上家要牌后,下家要牌的规则需要比上一家高。
轮询完成后才实行实际的分配,指定玩家得以放牌。

放牌的玩家的下家开始重复逻辑2,如果没有人要牌,重复逻辑1。

伪代码:

服务器对客户端的要牌规则的优先级是:

logic_diu = [](){
    if X 丢了{ 则直接结束, return true}
    return false;
}

logic_hard_couple = [](surplus_players){ 
    if logic_diu(B) { return true; }
    if  logic_diu (C) {return true;}
        
    do it on this player;
    return true;
}
logic_shui_with2xcard = [](surplus_players){
    if logic_hard_couple(B, C) {
        return false;
    }else{
        do it; return true;
    }   
}

logic_kuai_with1xcard = [](surplus_players){
    if logic_shui_with2xcard(B, C) {
        return false;
    }else{
        do it; return true;
    }   
}

任何一种喊法都是可以放弃不要牌的,但是喊吃不能丢,喊筷不能吃和硬对,
func on_player_x_turn(current, surplus){
    status  = ask_player_status(current);
    if status == logic_diu {
                return true;
    }else if status == logic_hard_couple {  // A 硬(无听用)对牌 或者硬水牌(只带一个听用)
        return true;
    }else if status == logic_shui_with2xcard {  //A 水牌+带2个听用
        return true;
    }else if status == logic_kuai_with1xcard {  //筷牌
        return true;    
    }else if status == logic_chi{  
        return true;
    }else{  //status == logic_ignore
        return on_player_x_turn(surplus->next, surplus-1);
    }   
}

客户端配合逻辑:
客户端玩家要牌,需要收到服务器的轮询结论后,才能知道自己的牌是不是可以成功的获得喊出来的机会。
最终的拦截玩家获得放牌的机会,如果获得放牌机会的玩家放弃机会,则把放牌机会留给后面一家。


func call_in_desktop_card(c, others){
  bool did_other_called = false
  int call_priority = 0
  
  others.foreach{
    if ($0.did_call_this_card){
      did_other_called = true;
      call_priority = max($0.call_priority, call_priority)
    }
  }
  higher_logic_call(c, call_priority);
}

while(no_one_did_diu){
  card = waite_to_new_card();  //
  if card.is_from_outside {
    if card.is_from_desktop{
      bool diu = call_in_desktop_card();  //
      if (diu){
        no_one_did_diu = false;
        break;
      }
    }else{  //is from other users
      call_in_other_users_none_desktop_card(card);
    }
  }else{  //is from my turn, got it from desktop
    bool diu = call_in_desktop_card();
    if(diu){
      no_one_did_diu = false;
      break;
    }
  }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容