`
595959
  • 浏览: 63651 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

80分记牌器,不是自动的。

 
阅读更多
# 80分记牌器,不是自动的。
#
# a 2 3 4 5 6 7 8 9 0 j q k
# 大怪 Red Joker r
# 小怪 Black Joker b
#
# ♠ / 
# ♥ * 
# ♣ - 
# ♦ +
# NT ?
#
#   北 
# 西  东 
#   南 
#   n
# w   e
#   s
#
# 1.敲入庄家、王的花色和数字
#
# 东庄家,打黑桃2
# e/2
#
# 显示:
# Dealer: E ♠2
# 
#   N    
# W      
#     E  
#   S    
#
# 2.敲入第一个出牌者位置,此圈出掉的牌
#
# 北先出,北红桃A方块A,西红桃2方块2,南红桃5方块10,东红桃3方块4
# n *a+a *2+2 *5+0 *3+4
#
# 前面敲错了!是东家先出的
# ! e *a+a *2+2 *5+0 *3+4
#
# 记到最后显示:
# Dealer: E ♠2
# 
#   N    ♠2♥2  ♠AKQJ0987654  ♥AKQJ  ♣AKQJ ♦AKQJ
# W      ♠2♥2  ♠AKQJ0987654  ♥AKQJ  ♣AKQJ ♦AKQJ
#     E  RR♣2♦2  ♠3  ♥09876543  ♣09876543  ♦0987
#   S    BB♣2♦2  ♠3  ♥09876543  ♣09876543  ♦6543

module ShengjiNerd
  class Game

    def initialize
      welcome()
      loop do
        shorthand(gets())
      end
    end

    def shorthand(input)
      args = input.split(' ')
      case args.size
      when 1 # a new game 庄家花色数字
        new_game(args.first)
      when 5 # a turn 第一个出牌位,p1,p2,p3,p4出的牌
        take_turn(*args)
      when 6 # redo last turn
        # TODO
      else
        welcome()
      end

      show_memory()
    end

    def new_game(input)
      mdealer = match_player(input)
      raise 'dealer required: [NWES]' unless mdealer
      mrank = match_rank(input)
      raise 'rank required: [234567890JQKA]' unless mrank
      msuit = match_suit(input)
      raise 'suit required: [/*-+?]' unless msuit

      @dealer_idx = index_player(mdealer[0]) # 庄家下标
      @rank = mrank[0].upcase # 数字
      @suits = %w[ / * - + ].unshift(msuit[0]).uniq.unshift('?') # 花色 5个:无,主色,3副色(黑桃>红桃>草花>方块)
      table_n = Array.new(9, Array.new) # 北家数字 9堆:怪,主王,3副王,主色,3副色
      table_w = Array.new(9, Array.new)
      table_e = Array.new(9, Array.new)
      table_s = Array.new(9, Array.new)
      @tables = [ table_n, table_w, table_e, table_s ] # 出牌堆:北家,西家,东家,南家
    end

    def take_turn(ps, p1, p2, p3, p4)
      mplayer = match_player(ps)
      raise 'who is the first? [NWES]' unless mplayer
      player_idx = index_player(mplayer[0]) # 出牌人的位置

      [p1, p2, p3, p4].each do |trick|
        suit = nil
        trick.each_char do |ch|
          mfrench = match_french(ch)
          if mfrench # 标花色
            suit = mfrench[0] 
          elsif %w[RB].include?(ch.upcase) # 记大小怪
            @tables[player_idx][0] << ch
          else # 记花色牌
            mrank = match_rank(ch)
            raise 'rank required: [234567890JQKA]' unless mrank
            rank = mrank[0].upcase
            raise "which is the suit of #{rank}? [/*-+]" unless suit
            
            if suit == @suits[1]  # 主王 或 主
              suit_idx = (rank == @rank ? 1 : 5)
            else # 副王 或 副
              suit_idx = (rank == @rank ? 2 : 6) + plus_suit(suit)
            end
            @tables[player_idx][suit_idx] << rank
          end
        end
        player_idx += 1
        player_idx %= 4
      end
    end

    def show_memory
      s = %Q{
Dearler: #{ print_player(@dealer_idx) } #{ print_suit(@suits[1]) }#{ @rank }

  N    #{ print_table(@tables[0]) }
W      #{ print_table(@tables[1]) }
    E  #{ print_table(@tables[2]) }
  S    #{ print_table(@tables[3]) }
}
    end

    # RRBB♠2♥2  ♠AKQ  ♥J09  ♣876  ♦543
    def print_table(table)
      # TODO
    end

    def print_player(player_idx)
      case player_idx
      when 0
        'N'
      when 1
        'W'
      when 2
        'E'
      when 3
        'S'
      end
    end

    def print_suit(suit)
      case suit
      when '?'
        'NT'
      when '/'
        '♠'
      when '*'
        '♥'
      when '-'
        '♣'
      when '+'
        '♦'
      end
    end

    def index_player(player_symbol)
      case dealer_symbol
      when 'N'
        0
      when 'W'
        1
      when 'E'
        2
      when 'S' 
        3
      end
    end

    def plus_suit(suit_symbol)
      case suit_symbol
      when '/'
        0
      when '*'
        1
      when '-'
        2
      when '+' 
        3
      end
    end

    def match_player(str)
      str.upcase.match(/[NWES]/)
    end

    def match_french(str)
      str.match(/[\/\*\-\+]/)
    end

    def match_suit(str)
      str.match(/[\/\*\-\+\?]/)
    end

    def match_rank(str)
      str.upcase.match(/[234567890JQKA]/)
    end

    def welcome
      puts "type 'h' show help"
    end

    def gets
      STDIN.gets
    end
  end
end
分享到:
评论

相关推荐

    HOOK欢乐斗地主内置自动记牌器-易语言

    HOOK欢乐斗地主内置自动记牌器 使用一个注入器即可 注入器我就不开源了 论坛大把的 CE注入也行!

    QQCardRecorder:QQ游戏 欢乐升级 记牌器

    QQ游戏“升级”的自动记牌器。 应用场景1:一边玩QQ游戏的升级,一边在python的运行环境里运行 recorder/SHENGJI.py。 该脚本可: 实时自动记录每局出牌,并推演剩下什么牌。(记牌器功能) 每局游戏结束时自动保存...

    Sanguokill-Card-Recorder:三国杀记牌器

    三国杀记牌器嗯。用来练习开发chrome插件的使用说明把app.crx拖到chrome上安装就好了已完成:UIJavascript移植到chrome上目前正在做:自动化记牌靠 Flash 要怎么抓包啊坑

    易语言-乐玩图色脚本源码 记牌器

    很早之前写的。。写了两种方法。都是图色。。w10电脑玩的。。换系统要重新做字库。。 最近自己租了个TX云搭建游戏在玩雷霆。全套完整游戏图色脚本写的差不多了。...在调试bug 写的没问题....其实图色写起来很简单.....

    Python实现LOL英雄联盟 云顶之弈 24h自动化挂机刷代币 超简单代码实现

    代码所需图片

    VB 编写的透明无提示挂机锁

    透明无提示挂机锁是一种特殊类型的程序,它的主要功能是在用户不进行任何操作时自动锁定计算机,但与常规的屏幕保护程序或登录密码不同,它在锁定过程中不会显示任何提示或警告,使得用户在不知不觉中被锁定。...

    autoTagger:JavaScript文字自动标记器

    简单JavaScript文字自动标记器 用法 在浏览器中包含javascript: &lt;!-- recommended --&gt; &lt; script type =" text/javascript " src =" autotagger.min.js " &gt; &lt;/ script &gt; &lt;!-- Using cdn ...

    GT6069-2002 滚子链联轴器

    ### GT6069-2002 滚子链联轴器标准解析 ...随着工业自动化水平的不断提高,对于滚子链联轴器的要求也将越来越高,未来的发展趋势将更加注重产品的轻量化、智能化以及使用寿命的延长等方面的研究与开发。

    欢乐斗地主python项目游戏源码下载

    通过Python编程语言,我们可以实现斗地主游戏的自动化运行,并且借助强大的AI算法优化出牌策略,从而提高游戏的趣味性和挑战性。 在这个项目中,游戏的核心逻辑是至关重要的。这包括牌局的初始化、发牌、出牌、牌型...

    2021最全autojs脚本实例接近三千个实例脚本,史上最强

    AutoJS是一种基于JavaScript语言的Android自动化工具,它允许用户编写脚本来执行各种任务,如点击、滑动、输入、读取数据等,极大地提升了手机操作的自动化程度。2021年的AutoJS脚本集合提供了接近三千个实例脚本,...

    AI 斗地主辅助 欢乐斗地主无限连胜 Python

    这个辅助工具通过图像智能识别技术,能够分析游戏窗口中的牌面信息,并自动判断出最佳的出牌策略。 描述中提到的“python图像智能识别”,是指利用Python中的图像处理库,如OpenCV或PIL等,来捕捉并解析游戏画面。...

    OCR建立模板,培训,识别(基于opencv)

    OCR(Optical Character Recognition,光学字符识别)技术是一种将图像中的文字转换为可编辑...通过实际操作,开发者可以更深刻地理解OCR技术,并将其应用于更广泛的场景,如自动表单填写、文档数字化、车牌识别等。

    blackjack-app:使用JavaScript原型进行体验的21点应用程序

    通过`addEventListener`添加事件监听器,然后在事件处理函数中更新游戏状态并显示结果。 6. UI设计与交互: 虽然描述中没有明确提及UI,但一个完整的21点应用通常会有用户界面,展示牌面、点数和玩家/庄家的状态。...

    HSTracker:macOS上的炉石传说的套牌追踪器和套牌管理器

    HSTracker HSTracker是macOS上炉石传说的自动甲板追踪器和甲板管理器。安装要求: macOS 10.10或更高版本对于Windows支持,请查看下载最新版本提取档案将HSTracker.app移至“ Applications目录在炉石传说之前启动...

    DouZeroBid_For_HLDDZ_H5:一个未完成的关于DouZero叫牌版的测试

    在浏览器console里搜索 记牌器 就可以看到实时叫牌出牌胜率 说明 边逆向边写js水平也一般,所以代码质量很差 wss协议那面看着头疼,所以自动出牌功能没写,有能力的可以自己完成 本项目仅供学习以及技术交流,请勿...

Global site tag (gtag.js) - Google Analytics