From 70e35c8afcba9fc1895164a69a2335cb3e0dc522 Mon Sep 17 00:00:00 2001 From: Timess <1250164276@qq.com> Date: Sat, 16 Jan 2021 18:15:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8D=A2=E4=B8=89=E5=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持换三张 --- README.md | 4 ++ analysis.go | 0 analysis_cache.go | 0 analysis_test.go | 0 cli.go | 2 +- config.go | 0 console.go | 0 core.go | 40 ++++++++++++++- core_helper.go | 0 core_test.go | 0 go.mod | 0 go.sum | 0 interact.go | 0 main.go | 52 ++------------------ majsoul.go | 47 ++++++++++++++++++ majsoul_game_config.go | 0 majsoul_live.go | 0 majsoul_record.go | 0 server.go | 108 +++++++++++++++++++++-------------------- server_test.go | 0 tenhou.go | 8 +++ tenhou_test.go | 0 utils.go | 0 version.go | 0 version_test.go | 0 25 files changed, 160 insertions(+), 101 deletions(-) mode change 100644 => 100755 analysis.go mode change 100644 => 100755 analysis_cache.go mode change 100644 => 100755 analysis_test.go mode change 100644 => 100755 cli.go mode change 100644 => 100755 config.go mode change 100644 => 100755 console.go mode change 100644 => 100755 core.go mode change 100644 => 100755 core_helper.go mode change 100644 => 100755 core_test.go mode change 100644 => 100755 go.mod mode change 100644 => 100755 go.sum mode change 100644 => 100755 interact.go mode change 100644 => 100755 main.go mode change 100644 => 100755 majsoul.go mode change 100644 => 100755 majsoul_game_config.go mode change 100644 => 100755 majsoul_live.go mode change 100644 => 100755 majsoul_record.go mode change 100644 => 100755 server.go mode change 100644 => 100755 server_test.go mode change 100644 => 100755 tenhou.go mode change 100644 => 100755 tenhou_test.go mode change 100644 => 100755 utils.go mode change 100644 => 100755 version.go mode change 100644 => 100755 version_test.go diff --git a/README.md b/README.md index 044f913..ca28e5c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +魔改自:https://github.com/EndlessCheng/mahjong-helper +支持换三张 + + # 日本麻将助手 diff --git a/analysis.go b/analysis.go old mode 100644 new mode 100755 diff --git a/analysis_cache.go b/analysis_cache.go old mode 100644 new mode 100755 diff --git a/analysis_test.go b/analysis_test.go old mode 100644 new mode 100755 diff --git a/cli.go b/cli.go old mode 100644 new mode 100755 index e334dc6..4cf274a --- a/cli.go +++ b/cli.go @@ -318,7 +318,7 @@ func alertBackwardToShanten2(results util.Hand14AnalysisResultList, incShantenRe // 需要提醒的役种 var yakuTypesToAlert = []int{ - //util.YakuKokushi, + util.YakuKokushi, //util.YakuKokushi13, util.YakuSuuAnkou, util.YakuSuuAnkouTanki, diff --git a/config.go b/config.go old mode 100644 new mode 100755 diff --git a/console.go b/console.go old mode 100644 new mode 100755 diff --git a/core.go b/core.go old mode 100644 new mode 100755 index 3ec5f60..0fb8a35 --- a/core.go +++ b/core.go @@ -82,6 +82,8 @@ type DataParser interface { // kanDoraIndicator: 0-33 IsNewDora() bool ParseNewDora() (kanDoraIndicator int) + IsHuanSanZhang() bool + ParseHuanSanZhang() (doraIndicators []int, InhandTiles []int, OuthandTiles []int, numRedFives []int) } type playerInfo struct { @@ -277,6 +279,18 @@ func (d *roundData) descLeftCounts(tile int) { } } +func (d *roundData) inscLeftCounts(tile int) { + d.leftCounts[tile]++ + if d.leftCounts[tile] < 0 { + info := fmt.Sprintf("数据异常: %s 数量为 %d", util.MahjongZH[tile], d.leftCounts[tile]) + if debugMode { + panic(info) + } else { + fmt.Println(info) + } + } +} + // 杠! func (d *roundData) newDora(kanDoraIndicator int) { d.doraIndicators = append(d.doraIndicators, kanDoraIndicator) @@ -500,7 +514,7 @@ func (d *roundData) analysis() error { // 若自家立直,则进入看戏模式 // TODO: 见逃判断 if !d.parser.IsInit() && !d.parser.IsRoundWin() && !d.parser.IsRyuukyoku() && d.players[0].isReached { - return nil + //return nil } if debugMode { @@ -513,6 +527,30 @@ func (d *roundData) analysis() error { } switch { + case d.parser.IsHuanSanZhang(): + fmt.Println("换三张成功!") + doraIndicators, inhands, outhands, numRedFives := d.parser.ParseHuanSanZhang() + d.doraIndicators = doraIndicators + for _, dora := range doraIndicators { + d.descLeftCounts(dora) + } + d.numRedFives = numRedFives + for _, tile := range inhands { + d.counts[tile]++ + d.descLeftCounts(tile) + } + + for _, tile := range outhands { + d.counts[tile]-- + d.inscLeftCounts(tile) + } + playerInfo := d.newModelPlayerInfo() + fmt.Println() + info := fmt.Sprintln(util.TilesToMahjongZHInterface(d.doraIndicators)...) + info = info[:len(info)-1] + color.HiYellow("宝牌指示牌是 " + info) + fmt.Println() + return analysisPlayerWithRisk(playerInfo, nil) case d.parser.IsInit(): // round 开始/重连 if !debugMode && !d.skipOutput { diff --git a/core_helper.go b/core_helper.go old mode 100644 new mode 100755 diff --git a/core_test.go b/core_test.go old mode 100644 new mode 100755 diff --git a/go.mod b/go.mod old mode 100644 new mode 100755 diff --git a/go.sum b/go.sum old mode 100644 new mode 100755 diff --git a/interact.go b/interact.go old mode 100644 new mode 100755 diff --git a/main.go b/main.go old mode 100644 new mode 100755 index 548a055..54f5147 --- a/main.go +++ b/main.go @@ -1,14 +1,12 @@ package main import ( - "strings" - "fmt" - "github.com/fatih/color" - "github.com/EndlessCheng/mahjong-helper/util/model" + "flag" "github.com/EndlessCheng/mahjong-helper/util" + "github.com/EndlessCheng/mahjong-helper/util/model" "math/rand" + "strings" "time" - "flag" ) var ( @@ -55,7 +53,7 @@ const ( platformTenhou = 0 platformMajsoul = 1 - defaultPlatform = platformMajsoul + defaultPlatform = platformTenhou ) var platforms = map[int]string{ @@ -63,53 +61,13 @@ var platforms = map[int]string{ platformMajsoul: "雀魂", } -const readmeURL = "https://github.com/EndlessCheng/mahjong-helper/blob/master/README.md" func welcome() int { - fmt.Println("使用说明:" + readmeURL) - fmt.Println("问题反馈:https://github.com/EndlessCheng/mahjong-helper/issues") - fmt.Println("吐槽群:375865038") - fmt.Println() - - fmt.Println("请输入数字,以选择对应的平台:") - for i, cnt := 0, 0; cnt < len(platforms); i++ { - if platformName, ok := platforms[i]; ok { - fmt.Printf("%d - %s\n", i, platformName) - cnt++ - } - } - - choose := defaultPlatform - fmt.Scanf("%d", &choose) - platformName, ok := platforms[choose] - if !ok { - choose = defaultPlatform - platformName = platforms[choose] - } - - clearConsole() - if choose == platformMajsoul { - platformName += "(水晶杠杠版)" - } - color.HiGreen("已选择 - %s", platformName) - - if choose == platformMajsoul { - if len(gameConf.MajsoulAccountIDs) == 0 { - color.HiYellow(`提醒:若您是第一次使用助手,请重新登录游戏,或者开启一局人机对战 -该步骤用于获取您的账号 ID,便于在游戏开始时获取自风,否则程序将无法解析后续数据 - -若助手无响应,请确认您已按步骤安装完成 -安装及使用说明:` + readmeURL) - } - } - - return choose + return 0 } func main() { flag.Parse() - - color.HiGreen("日本麻将助手 %s (by EndlessCheng)", version) if version != versionDev { go checkNewVersion(version) } diff --git a/majsoul.go b/majsoul.go old mode 100644 new mode 100755 index ba9158a..f2bd932 --- a/majsoul.go +++ b/majsoul.go @@ -116,6 +116,13 @@ type majsoulMessage struct { //Gameend *bool `json:"gameend"` // ActionBabei + + //ActionChangeTile + // {"in_tiles":["9p","3s","2z"],"in_tile_states":[0,0,0],"out_tiles":["1s","2p","1p"],"out_tile_states":[0,0,0],"doras":["7s"],"change_type":2} + InTiles interface{} `json:"in_tiles"` + OutTiles interface{} `json:"out_tiles"` + + //{"hules":[{"seat":2,"hand_count":13,"hu_tile":"4s","zimo":false,"yiman":false,"count":6,"fans":[],"fu":40,"title_id":2},{"seat":3,"hand_count":10,"zimo":false,"yiman":false,"count":1],"old_scores":[24900,18100,27900,28100],"delta_scores":[-13300,0,13000,1300],"scores":[11600,18100,40900,29400],"zhenting":false} } const ( @@ -288,6 +295,46 @@ func (d *majsoulRoundData) IsInit() bool { return msg.IsGameStart != nil || msg.MD5 != "" } +func (d *majsoulRoundData) IsHuanSanZhang() bool { + msg := d.msg + // ResAuthGame || ActionNewRound RecordNewRound + return msg.InTiles != nil +} +func (d *majsoulRoundData) ParseHuanSanZhang() (doraIndicators []int, InhandTiles []int, OuthandTiles []int, numRedFives []int) { + msg := d.msg + + for _, dora := range msg.Doras { + doraIndicator, _ := d.mustParseMajsoulTile(dora) + doraIndicators = append(doraIndicators, doraIndicator) + } + + numRedFives = make([]int, 3) + + var majsoulInTiles []string + var majsoulOutTiles []string + + majsoulInTiles = d.normalTiles(msg.InTiles) + majsoulOutTiles = d.normalTiles(msg.OutTiles) + + for _, majsoulInTile := range majsoulInTiles { + tile, isRedFive := d.mustParseMajsoulTile(majsoulInTile) + InhandTiles = append(InhandTiles, tile) + if isRedFive { + numRedFives[tile/9]++ + } + } + + for _, majsoulOutTile := range majsoulOutTiles { + tile, isRedFive := d.mustParseMajsoulTile(majsoulOutTile) + OuthandTiles = append(OuthandTiles, tile) + if isRedFive { + numRedFives[tile/9]-- + } + } + + return +} + func (d *majsoulRoundData) ParseInit() (roundNumber int, benNumber int, dealer int, doraIndicators []int, handTiles []int, numRedFives []int) { msg := d.msg diff --git a/majsoul_game_config.go b/majsoul_game_config.go old mode 100644 new mode 100755 diff --git a/majsoul_live.go b/majsoul_live.go old mode 100644 new mode 100755 diff --git a/majsoul_record.go b/majsoul_record.go old mode 100644 new mode 100755 diff --git a/server.go b/server.go old mode 100644 new mode 100755 index 432d113..bf9289e --- a/server.go +++ b/server.go @@ -512,10 +512,10 @@ func runServer(isHTTPS bool, port int) (err error) { majsoulRoundData: &majsoulRoundData{selfSeat: -1}, majsoulRecordMap: map[string]*majsoulRecordBaseInfo{}, } - h.tenhouRoundData.roundData = newGame(h.tenhouRoundData) + h.majsoulRoundData.roundData = newGame(h.majsoulRoundData) - go h.runAnalysisTenhouMessageTask() + go h.runAnalysisMajsoulMessageTask() e.Use(middleware.Recover()) @@ -531,13 +531,10 @@ func runServer(isHTTPS bool, port int) (err error) { port = defaultPort } addr := ":" + strconv.Itoa(port) - if !isHTTPS { - e.POST("/", h.analysisTenhou) - err = e.Start(addr) - } else { - e.POST("/", h.analysisMajsoul) - err = startTLS(e, addr) - } + + e.POST("/", h.analysisMajsoul) + err = startTLS(e, addr) + if err != nil { // 检查是否为端口占用错误 if opErr, ok := err.(*net.OpError); ok && opErr.Op == "listen" { @@ -552,53 +549,60 @@ func runServer(isHTTPS bool, port int) (err error) { const ( certText = `-----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- ` keyText = `-----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCx68qh0A4To8Hx -IcwJu7H4jGxYywGNd/qMkPu3UxVXvYdjjWFUN8L3dH/53GK1HPfJ+ivl/XNOv2rh -7NA/67mWvl4s0isrwf9r4Zm7rPJnJvDSmQQtiRIuWCOKCKA/Gn/ZAPnJ0NXYsFpe -tInOeB8UpS6QvwJv6gF2urVFo4Pgj7Ricjbkn7gvG3FPQGFPL9C/9P6vX+T1U4WS -rEJZ7rfiBPBHfUTeXSLR3GQNkwWgMnssXgcqUZ+LyCWwtghex5SlQyItNSaM6d3N -DClTCfTMpsqgse4eeZIhSG9ULacbz2SqNIDfSBdBKDn0HXr/l0xwdmyEjmCktfeI -Qevpe7YlAgMBAAECggEALmQMsaROB1DrgLQPP3pxLR1wIrbL8NcXvQ8QkvxW1EnW -w15ZwlvHuj3mIIAWPKMQ+NkCGTW8mwvOEppssj4EZgm9BHLITuCGeNqZ+xVdHwhI -QqEjNbxHwU259oPJRKrkKvDWMIkDOTzCU28/f1ZSxE9NlPA48nVRbGPCYCYCfMqM -LotYF9HwGcDomqW8ZnXNMpxY5WvDQa807s0rmpKQWQy3PTXdVzOwcQJxozG5mCCa -r+NUXtgybL2e6fE1BL+O9qxiEJ9n3f2odyATbw435IBg5jIjh2TPeIggPdNP0N7n -hRoeLeFcWtjQEubp9KqUxBDhEBhz+7xVvydp69/xAQKBgQDZEma3dltP5l/6Oxw0 -IvSMAqjfCK5a6bXoT5cqQq4Pk/uoaVxQoXppiTGB9SqIAptnvojcmQk+xDriC5dB -vs6GeDFPafnxKxZZHd2OWX/1aE3ZXaWPAUvelIh2xBc38xECH1M8D2f/TggS3mti -rjkDUMCkv0NfH1knR3qG5iCH+wKBgQDR1AHPcXkF1PEfajf3TBQkflpVUUpWjExB -ufE5DbEnLAr0TaH+lsICj9C3WB47T4jkM2Ag8mmtaN6Wd9CmLRZ7oDINS1vrl+pu -zMbliNrpidtCLqDXD6FfscoliY//ZWg08H0GXr5h1ZCl81BYJPStGWSvTn+tzYHx -4PD3a7fAXwKBgBeThhB7DGPbM6Vr8h4/hawHRewjdzxskdNPga2XXGxYuEaMWvhu -8Wqw+e2RgTMQhWx5J0g+XuCwU2zlsWH0pV25hDGJ4xmsglrfgYbKdbljwMDRCQBF -NcZQ/5lWpubuwXQnjtTBH5x9DydtfOBU5+BSTvoVw+167CX1/3rTV8ktAoGBAKGn -DcX9i9lcVm93a6qP6Cy9U2bLe9P1voIceKUV0Vd2bPIOJTF4f/ttRMUblB7phXMZ -yYNYfuXkFyghIpQDxIB1yFnJpwV4QloeVVVc/BpT5KG2Pp+xIQgSdsQ4mMGQJJo0 -dH3F3DKPUCMpsspVnlMFbzZH6cHCw8vPGpXjXOtNAoGBANNvhQieQ2c4EfT86Twz -tHu/dx9TySipj7v7n9USM95fk3rTs4LkAcPs3Ka9BhhGflfLwZN9hKznaszwvIKW -l9sui7jMl8cJ4XxH95j4umsklisJAwBkp6J7OSd8eOX2F8gidKk3HdwLX/xFFx/9 -Y5quoWDnJFfyYohaUAC7OAKR +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYt+9dS8GF98+A +YOEmFYk1rCsIAYCdoj7fpXqqoB6L8Se7Bp63Qn/VhdyY2FF7wZP7GbU2G0htFIyX +5cl1avxg5CdorZTErDm1RoGgkLrFSPU0CB7tu2uO2vTqh6DZrNLzUNHxocDUVj57 +rd15dWuZn+qRbQUyH+u7unL6bdjxMHtCm+RrSZapHwOtxcbS+kM28RAvTTti6UBe +08TYZMv6XbvD1pos/uq+LGfwIaUq7Kt3o1nnnG+PXEAINsZJ+L5ipL8TtJHsVwM4 +roN+N5CfbMV2zHGT/rjAXHcLNR+35zJmpAZdizF8fBD60hsw43h5JpSsofxHvbQp +xV84mAhnAgMBAAECggEAUvUXgYZ1SWCjxwjZRObN8enkNiUayIYpwTMSvzzbWwlU +m7Os47+r0UE145EeMiulRvFgDlQjs51GAf1AwheroLZO8f3Yoj0r29zA7Yew7RoE +mI8QvfLhKmimQgAK0DOhI6rzYF6NcMqohmabuC6glILZ2MVv3RqZ4xAVBRRGlDz6 +5ORPOUP6ASSYFAyPks674rQYRsJxGiO6z2jfMPHUwp05u2c2uMceAL98Yr32tcN7 +IRSo52ELAKt6Hi8sgtfZ8Cqx1U/Cs9u1d6QeA/9eF4QL9GAj9Ay2PItHG+YB7bT1 +tCGnn0mGUlcUvnAMvkQYF8ll9WYnLYzsZskMHMCIgQKBgQDHgMMRW4NKXZCGT6AM +vub1AOXkowj9gHG73H31+HWFkqcqNMNh4otJt8Fw4sbZdBlQwclAVpqtenXGO0th +tmkBPOXznhkHff5SD7VpG9FQaMhRfFxFJggjPhz4e5z4tfwGJ5+YyvD64GVvSqEe +Ogdh1XoG5PfM6zIqZL3xvW3fawKBgQDD93gIWZ4esjJg4wD/djsCYPWw0enduOWX +PZ7Dh1WE2UJjW/u7r18ZqZXm0C93d1s6sSLbz0u43WWJCJEcptwLU/bthBfb3WMY +V2MHdPE5QrU57ezVpaVHx4A+pzOb4LuhTteWLkPhf3VFmoa9Wa/cc1b33tGshBhL +nNXRTuRl9QKBgQDDa7mokv+0JJqhNfYNBiKt88c9gwYXa239Gyq3ej2ELfdZPH32 +sDbIaxstPLaT40m49Vnxj+PL8pzTJNneSRPqhoCpdkAGOsCYGZMV9o2+OiWezDaF +9Y8bFojCTjOg3IKWdNG8lW4gERbLQUs5lJYOm1IA1uB09h4ZsLzuwyORKQKBgQCZ +X+1NM77irXtqgyC70HA822BQBOryQw1Ggs7on9paAKTKGSr76TUYY7dUECqmaP84 +/3yV5zePt5AJYXAZqardHtlLajA2P56YZYS3SFqoA0LN1R6g1GV4uXbxEnH9FTYk ++Q0YmJs+OUCyuk+skS5n7snpdDZMvJI7U8OxbvqppQKBgEYBZfDEBGUdE84iRnyV +fjQFj2D1Ei/cuI9nm51l34gVrKui7xVlIALZvNEv3lCv4b0D7VTcfaNeIr0tweW/ +a6wJEKtvtWth68cNkxQudHdrELMKRY67ee4CXLz37VCzxFGtlj0Q2WpXqHsby7IZ +RPKiFQUw+KrQVyxQ0OusrzWj -----END PRIVATE KEY----- ` ) diff --git a/server_test.go b/server_test.go old mode 100644 new mode 100755 diff --git a/tenhou.go b/tenhou.go old mode 100644 new mode 100755 index 1b87fc2..0e48383 --- a/tenhou.go +++ b/tenhou.go @@ -234,6 +234,14 @@ type tenhouRoundData struct { isRoundEnd bool // 某人和牌或流局。初始值为 true } +func (d *tenhouRoundData) ParseHuanSanZhang() (doraIndicators []int) { + panic("implement me") +} + +func (d *tenhouRoundData) IsHuanSanZhang() bool { + panic("implement me") +} + func (*tenhouRoundData) _tenhouTileToTile34(tenhouTile int) int { return tenhouTile / 4 } diff --git a/tenhou_test.go b/tenhou_test.go old mode 100644 new mode 100755 diff --git a/utils.go b/utils.go old mode 100644 new mode 100755 diff --git a/version.go b/version.go old mode 100644 new mode 100755 diff --git a/version_test.go b/version_test.go old mode 100644 new mode 100755