Skip to content

Commit

Permalink
0.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
zyr17 committed Apr 19, 2019
1 parent db2d5a5 commit 5214939
Show file tree
Hide file tree
Showing 32 changed files with 4,140 additions and 1,721 deletions.
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ project(PaipuAnalyzer)

set (CMAKE_C_COMPILER g++)

aux_source_directory(. DIR_MAIN)
aux_source_directory(./lib DIR_LIB)
aux_source_directory(./src DIR_MAIN)
aux_source_directory(./src/lib DIR_LIB)
add_executable(PaipuAnalyzer ${DIR_MAIN} ${DIR_LIB})
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb -D DEBUG")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -static")
32 changes: 20 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
# MajsoulPaipuAnalyzer

自制雀魂牌谱分析工具,拥有:体积庞大,使用复杂,功能单一,界面垃圾,懒癌发作,代码混乱的特点。
自制雀魂牌谱分析工具,

目前仅支持四人麻将牌谱分析,分析项目从天鳳の牌譜解析プログラム中选了很少量感兴趣+好实现的。出于各种原因,目前分析项目名称使用幼儿园英语+拼音+罗马音混合的模式,更加正常的分析项目名称将在之后完成
目前仅支持四人麻将牌谱分析,分析项目参考天鳳の牌譜解析プログラム的项目实现。目前实现了和牌、放铳、立直、其他、终盘大类中的大部分数据,其他有待实现

## 安装

### 编译/测试环境

Windows: Windows 10, nodejs v10.13.0, MinGW-W64 8.1.0
Windows: Windows 10, nodejs v10.13.0, MinGW-w64 8.1.0

Linux: Ubuntu 18.04 x64, nodejs v8.1.0, g++ 7.4.0

AppVeyor环境请参考[其网站](https://www.appveyor.com/docs/build-environment/)

### 二进制文件

APPVeyor下载最新版本:

Windows: [![Build status](https://ci.appveyor.com/api/projects/status/fyirnuhsunq73brc?svg=true)](https://ci.appveyor.com/project/zyr17/majsoulpaipuanalyzer) Linux: [![Build status](https://ci.appveyor.com/api/projects/status/i22ex7a644qasmxx?svg=true)](https://ci.appveyor.com/project/zyr17/majsoulpaipuanalyzer-ko5wy)

也可在[releases](https://github.com/zyr17/MajsoulPaipuAnalyzer/releases)中下载已经编译好的文件。提供的可执行文件在Windows 10和Ubuntu18.04编译及测试
也可在[releases](https://github.com/zyr17/MajsoulPaipuAnalyzer/releases)中下载已经编译好的文件。一般较大更新会在此上载文件包

### 依赖

Expand All @@ -41,7 +45,9 @@ Windows脚本使用PowerShell。路径不能出现中文。
cp -r dist/MajsoulPaipuCrawler-win32-x64 result
cp bin/release/PaipuAnalyzer.exe result/
mkdir result/data
cp config.json result/data
cp config.json result/
cp doc/README.txt result/
cp -r i18n/ result/

#### Linux:

Expand All @@ -58,19 +64,23 @@ Windows脚本使用PowerShell。路径不能出现中文。
cp -r dist/MajsoulPaipuCrawler-linux-x64 result
cp bin/release/PaipuAnalyzer result/
mkdir result/data
cp config.json result/data/
cp config.json result/
cp doc/README.txt result/
cp -r i18n/ result/

result中即为结果。

## 使用

[这里](doc/README.txt)提供了简易使用说明。

### 牌谱获取及转换

首先运行Electron应用MajsoulPaipuCrawler。程序会显示雀魂窗口和SimpleMahjong窗口。为了能够分析bug,默认两个页面会打开开发者工具。由于 ~~~~ 技术原因,首次登陆雀魂以后需要刷新界面(杂项-刷新)才能正常解析牌谱。
首先运行Electron应用MajsoulPaipuCrawler。程序会显示雀魂窗口和SimpleMahjong窗口。为了能够分析bug,默认两个页面会打开开发者工具。由于技术原因,首次登陆雀魂以后需要刷新界面(杂项-刷新)才能正常解析牌谱。

在成功登陆后,可以选择牌谱-查看已有牌谱情报。如果没有出现错误那么说明已经可以开始获取牌谱。然后进入牌谱界面,此时再次查看牌谱情报应该会成功获取到约10个牌谱情报。由于雀魂牌谱采用每次加载约10个且滚到牌谱页面底部才触发加载的方式,为了获取全部牌谱需要将滚动条滚到最底部。可以采用鼠标拖动滚动条并在底部抽搐的方式。

在确认所有牌谱已被加载出来后,点击牌谱-下载&转换牌谱来对获取到的牌谱进行下载和格式转换。转换会跳过三麻牌谱。转换进度显示在SimpleMahjong窗口的左上角。需要注意的是,由于 ~~真的是~~ 技术原因,最近几天打完的牌谱目前并不能成功获取,请过几天再次尝试。
在确认所有牌谱已被加载出来后,点击牌谱-下载&转换牌谱来对获取到的牌谱进行下载和格式转换。转换会跳过三麻牌谱。转换进度显示在SimpleMahjong窗口的左上角。需要注意的是,由于技术原因,最近几天打完的牌谱目前并不能成功获取,请过几天再次尝试。

每个账户会有自己的独立ID,这个ID和加好友时候的那个ID是不一样的,游戏里大概不能直接看到?如果登陆多个账户,会将每个账户的资料按照ID分别存储,不会混在一起。牌谱下载及转换内容存储于data文件夹,避免重复下载和转换,每次进行下载仅会尝试下载转换未下载的牌谱。存储方式不再赘述,感兴趣的人翻一翻大概就能明白了。

Expand All @@ -80,17 +90,15 @@ result中即为结果。

在进行分析前,请确认data/config.json文件。在该文件中存储了牌谱分析的各种配置。关于配置文件各项内容的含义请参照[这里](doc/config.md)

确认配置无误后,运行PaipuAnalyzer即可得到结果。结果由三部分组成,每部分由横线隔开。第一部分是确认牌谱来源和用户ID。目前只能解析雀魂的牌谱。第二部分是一些内置统计结果,用来计算分析数据。这些内容为调试使用,用来确认统计项是否出错如果有想计算但是没有在分析结果中列出来的数据(如不同副露数下的结果)可以自行计算。第三部分是分析结果,名称使用英语+拼音+罗马音混合而成。由于 ~~~~ 为了简便,一些统计规则和雀魂官方有所出入(我不知道官方是怎么算的,反正结果和官方差了一点)。每一项的意义及特殊说明请参照[这里](doc/result.md)
确认配置无误后,运行PaipuAnalyzer即可得到结果。部分统计规则和雀魂官方有所出入(我不知道官方是怎么算的,反正结果和官方差了一点)。一些项目的计算方式和特殊说明请参照[这里](doc/result.md)

## 已知问题

Ubuntu高版本中可能会出现GUI将可执行文件当做动态链接库的情况。目前没有找到解决方法,请使用Terminal执行。

如果运行Electron时出现游戏界面黑屏、白屏、崩溃等问题,有可能是显卡对WebGL的支持问题,可以尝试将resources/app/main.js文件第21行的双斜杠删去,关闭硬件加速运行。

由于计算向听数 ~~懒得实现~~ 实现较为复杂,目前放铳向听数永远为3。将在之后修复。

由于本人较菜没有上圣没法打王座(虽然好像上了也没人打),同时没有参加过任何比赛场,所以这两块数据有所缺失,可能会出现bug。如果有大佬能够提供比赛场或者王座场的牌谱链接的话非常感谢。
由于本人较菜没有上圣没法打王座,同时没有参加过任何比赛场,所以这两块数据有所缺失,这些牌谱可能会出现bug。

## 联系

Expand Down
21 changes: 21 additions & 0 deletions SimpleMahjong/algorithm.js
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,27 @@ class Algo{
return shanten;
}

static testshanten(arr){
var cc = [
0, 1, 2, 3, 4, 6, 7, 8, 9,
10, 11, 12, 13, 14, 16, 17, 18, 19,
20, 21, 22, 23, 24, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36
];
var data = this.emptycalcdata();
for (var i = 0; i < arr.length; i ++ ){
var res = arr[i].slice(14, 17);
data.hai = '';
for (var j = 0; j < 14; j ++ )
data.hai += num2tile[cc[arr[i][j]]];
console.log(data.hai);
var rr = [this.calcshanten(data, false), this.kokushishanten(data), this.chitoishanten(data)];
//console.log(rr, res);
for (var j = 0; j < 3; j ++ )
console.assert(rr[j] == res[j]);
}
}

static calcyaku(data){
var result = { 'yaku': 0, 'yakuname': [] };
function getshun(str){
Expand Down
8 changes: 6 additions & 2 deletions appveyor-linux.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: 0.1.{build}
version: 0.1.1.{build}
image: Ubuntu1804
branches:
only:
Expand Down Expand Up @@ -31,7 +31,11 @@ build_script:
mkdir result/data
cp config.json result/data/
cp config.json result/
cp doc/README.txt result/
cp -r i18n/ result/
mv result MajsoulPaipuAnalyzer-linux-x64
Expand Down
8 changes: 6 additions & 2 deletions appveyor-win.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version: 0.1.{build}
version: 0.1.1.{build}
branches:
only:
- master
Expand Down Expand Up @@ -32,7 +32,11 @@ build_script:
mkdir result/data
cp config.json result/data
cp config.json result/
cp doc/README.txt result/
cp -r i18n/ result/
mv result MajsoulPaipuAnalyzer-win-x64
Expand Down
1 change: 1 addition & 0 deletions config.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"language": "zh-CN",
"source": "majsoul",
"id": "",
"filter":{
Expand Down
33 changes: 33 additions & 0 deletions doc/README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
MajsoulPaipuAnalyzer简易使用说明
这里给出简易使用说明(虽然也很麻烦),详细的说明和设置请前往https://github.com/zyr17/MajsoulPaipuAnalyzer


操作流程
1. 运行MajsoulPaipuCrawler。会出现两个窗口,雀魂网页窗口和数据分析窗口。
2. 已经自动登陆雀魂则跳过该步。未登陆则登陆雀魂,并在成功进入主界面后选择 杂项-刷新 来刷新页面重新进入。
3. 点击牌谱,选择 牌谱-查看已有牌谱情报, 确认成功获取到了用户ID,以及部分牌谱信息。对于已经获取过的牌谱信息会缓存。
4. 由于雀魂不会一次性将所有牌谱信息发送,请将滚动条往下拖以加载更早的牌谱,直到想要分析的牌谱全部出现在了牌谱列表中。
5. 转到数据分析窗口,选择 牌谱-下载&转换牌谱。会弹窗展示下载牌谱数量,然后窗口左上角会给出进度。全部完成会弹窗提示。
6. 由于技术原因,较新的牌谱(约3天内)无法下载,请以后重试。
7. 关闭两个窗口,编辑config.json设置分析牌谱类型。常用设置在下文给出。
8. 运行PaipuAnalyzer.exe查看结果。


config.json常用设置

0. 啥都不改默认分析全部牌谱

1. 分析特定房间:第10行方括号中填入房间编号(友人0 铜场1 银场2 金场3 玉场4 王座5 比赛场? 王座比赛场待确认)
例 "room": [3] 分析金场;"room": [0, 1] 分析友人场+铜场

2. 分析东/南风场:第12行方括号中填入数字。4:东风 8:南风
例 "round": [8] 分析南风对局

3. 分析某段时间:第14 15行改成时间区间。注意before为最晚时间after为最早时间。
例 "timebefore": "2020-02-02 23:59:59","timeafter": "2019-02-02 00:00:00" 分析19年2月2日到20年2月2日的所有牌谱

4. 不分析特定XXX:内容和上面一样,填到17-17行的exclude对应位置
例 略

5. 如果有多个条件,请分别填上
例 "room": [3, 4],"round": [8],"timeafter": "2019-02-02 00:00:00" 分析在19年2月2日以后打的金场南风及玉场南风
3 changes: 3 additions & 0 deletions doc/config.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{
指牌谱分析使用的语言。目前仅对应中文和基本不能读的英文
"language": "zh-CN",

指牌谱来源。目前来源均为雀魂
"source": "majsoul",
Expand Down
65 changes: 15 additions & 50 deletions doc/result.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,16 @@
#分析结果说明
#统计方式、名称意义、特殊情况的部分说明

对于每项分析结果的意义如下

#1: 一位率
#2: 二位率
#3: 三位率
#4: 四位率
AL keep #1: 进入AL时为一位,并且保持一位结束[5][10]
AL reach #1: 进入AL时不是一位,最后成功逆一
AL prevent from #4: 进入AL是四位,最后成功避四
AL more than 2 times: AL持续了超过1局
hule rate: 和了率
tsumo rate: 和了时自摸率
fangchong rate: 铳率[1]
reach rate: 立直率
fulu rate: 副露率[6]
dama hule rate: 默听和了占和了比率
fangchong dama rate: 别人默听然后铳了别人占放铳的比率
fulu hule rate: 和了时有副露率[9]
fulu fangchong rate: 放铳时有副露率
hule point: 和了点数[3]
fangchong point: 放铳失点
hule sudian: 和了素点[4]
fangchong sudian: 放铳素点
dama hule point: 默听和了点数[7][8]
fangchong dama point: 别人默听铳了失点
hule 3900+ rate: 和了3900+ 但是不到7700+的比例
hule 7700+ rate: 和了7700+ 但是不到11600+的比例
hule 11600+ rate: 和了11600+的比例
fangchong 3900+ rate: 铳了3900+ 但是不到7700+的比例[2]
fangchong 7700+ rate: 铳了7700+ 但是不到11600+的比例
fangchong 11600+ rate: 铳了11600+的比例
hule circle: 和了巡数
fangchong my circle: 铳了的时候自己的巡数
fangchong his circle: 铳了的时候别人的巡数
fangchong shanten: 铳了的时候自己手牌的向听数。[11]

#统计方式、名称意义、特殊情况的说明

[1] 双响在铳了局数中算铳了两局;三响如果流局了不算铳(雀魂不存在)
[2] 双响铳了5200+7700,不把铳点相加仅分开计数
[3] 和了收入指包含本场供托;包括自己放上去的自己的立直棒
[4] 素点即扣了本场和供托
[5] AL相关以刚进入AL时的数据为基准;北起AL4位连庄+西入飞人是避四+逆一
[6] 统计时副露数相关均分为4档分别记录,分析时为了简便将结果累加,详情目前可参考内置统计结果
[7] 默听指门清未立听牌
[8] 暗杠算副露,不算门清;因此会形成立直+副露
[9] 副露和了指和了的局数中副露了的局数占比;非与总副露局数比
[10] 中途飞人视为AL位序不变
[11] 还未实现,目前恒为3
双响在铳了局数中算铳了两局;三响如果流局了不算铳(雀魂不存在)
双响铳了5200+7700,不把铳点相加仅分开计数
和了收入指包含本场供托;包括自己放上去的自己的立直棒
素点即扣了本场和供托
AL相关以刚进入AL时的数据为基准;北起AL4位连庄+西入飞人是避四+逆一
副露相关由于要分副露等级目前待实现
默听指门清未立听牌
暗杠不算副露
副露和了指和了的局数中副露了的局数占比;非与总副露局数比
中途飞人视为AL位序不变
炸庄指坐庄被自摸
里宝和一发率均考虑立直和牌下概率
流局局数不包括途中流局和流局满贯
流局点数收支不包括流局满贯收支
Loading

0 comments on commit 5214939

Please sign in to comment.