# 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欢乐斗地主内置自动记牌器 使用一个注入器即可 注入器我就不开源了 论坛大把的 CE注入也行!
QQ游戏“升级”的自动记牌器。 应用场景1:一边玩QQ游戏的升级,一边在python的运行环境里运行 recorder/SHENGJI.py。 该脚本可: 实时自动记录每局出牌,并推演剩下什么牌。(记牌器功能) 每局游戏结束时自动保存...
三国杀记牌器嗯。用来练习开发chrome插件的使用说明把app.crx拖到chrome上安装就好了已完成:UIJavascript移植到chrome上目前正在做:自动化记牌靠 Flash 要怎么抓包啊坑
很早之前写的。。写了两种方法。都是图色。。w10电脑玩的。。换系统要重新做字库。。 最近自己租了个TX云搭建游戏在玩雷霆。全套完整游戏图色脚本写的差不多了。...在调试bug 写的没问题....其实图色写起来很简单.....
代码所需图片
透明无提示挂机锁是一种特殊类型的程序,它的主要功能是在用户不进行任何操作时自动锁定计算机,但与常规的屏幕保护程序或登录密码不同,它在锁定过程中不会显示任何提示或警告,使得用户在不知不觉中被锁定。...
简单JavaScript文字自动标记器 用法 在浏览器中包含javascript: <!-- recommended --> < script type =" text/javascript " src =" autotagger.min.js " > </ script > <!-- Using cdn ...
### GT6069-2002 滚子链联轴器标准解析 ...随着工业自动化水平的不断提高,对于滚子链联轴器的要求也将越来越高,未来的发展趋势将更加注重产品的轻量化、智能化以及使用寿命的延长等方面的研究与开发。
通过Python编程语言,我们可以实现斗地主游戏的自动化运行,并且借助强大的AI算法优化出牌策略,从而提高游戏的趣味性和挑战性。 在这个项目中,游戏的核心逻辑是至关重要的。这包括牌局的初始化、发牌、出牌、牌型...
AutoJS是一种基于JavaScript语言的Android自动化工具,它允许用户编写脚本来执行各种任务,如点击、滑动、输入、读取数据等,极大地提升了手机操作的自动化程度。2021年的AutoJS脚本集合提供了接近三千个实例脚本,...
这个辅助工具通过图像智能识别技术,能够分析游戏窗口中的牌面信息,并自动判断出最佳的出牌策略。 描述中提到的“python图像智能识别”,是指利用Python中的图像处理库,如OpenCV或PIL等,来捕捉并解析游戏画面。...
OCR(Optical Character Recognition,光学字符识别)技术是一种将图像中的文字转换为可编辑...通过实际操作,开发者可以更深刻地理解OCR技术,并将其应用于更广泛的场景,如自动表单填写、文档数字化、车牌识别等。
通过`addEventListener`添加事件监听器,然后在事件处理函数中更新游戏状态并显示结果。 6. UI设计与交互: 虽然描述中没有明确提及UI,但一个完整的21点应用通常会有用户界面,展示牌面、点数和玩家/庄家的状态。...
HSTracker HSTracker是macOS上炉石传说的自动甲板追踪器和甲板管理器。安装要求: macOS 10.10或更高版本对于Windows支持,请查看下载最新版本提取档案将HSTracker.app移至“ Applications目录在炉石传说之前启动...
在浏览器console里搜索 记牌器 就可以看到实时叫牌出牌胜率 说明 边逆向边写js水平也一般,所以代码质量很差 wss协议那面看着头疼,所以自动出牌功能没写,有能力的可以自己完成 本项目仅供学习以及技术交流,请勿...