model

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 6, 2022 License: MIT Imports: 2 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SepMeld       = "#"
	SepTargetTile = "+"
)
View Source
const (
	MeldTypeChi    = iota // 吃
	MeldTypePon           // 碰
	MeldTypeAnkan         // 暗杠
	MeldTypeMinkan        // 大明杠
	MeldTypeKakan         // 加杠
)
View Source
const (
	TileTypeMan = 0
	TileTypePin = 1
	TileTypeSou = 2
)

Variables

This section is empty.

Functions

func DoraList

func DoraList(doraIndicators []int, isSannin bool) (doraList []int)

根据宝牌指示牌计算出宝牌 isSannin: 是否为三麻

func DoraTile

func DoraTile(doraIndicator int, isSannin bool) (dora int)

DoraTile 根据宝牌指示牌计算出宝牌 isSannin: 是否为三麻

func InitLeftTiles34WithTiles34

func InitLeftTiles34WithTiles34(tiles34 []int) []int

TODO: 其他的也移过来

Types

type HumanTilesInfo

type HumanTilesInfo struct {
	// 手牌 & 副露(暗杠用大写表示) + 要鸣的牌(可以吃)
	HumanTiles     string // 24688m 34s # 6666P 234p + 3m
	HumanDoraTiles string // 13m6p 不能有空格
	IsTsumo        bool

	HumanMelds      []string // 从 HumanTiles 解析出来的副露
	HumanTargetTile string   // 从 HumanTiles 解析出来的被鸣的牌
}

用于命令行分析

func NewSimpleHumanTilesInfo

func NewSimpleHumanTilesInfo(humanTiles string) *HumanTilesInfo

func (*HumanTilesInfo) SelfParse

func (i *HumanTilesInfo) SelfParse() error

简单地处理 HumanTiles,拆分成一些子字符串

type Meld

type Meld struct {
	MeldType int // 鸣牌类型(吃、碰、暗杠、大明杠、加杠)

	// Tiles == sort(SelfTiles + CalledTile)
	Tiles      []int // 副露的牌
	SelfTiles  []int // 手牌中组成副露的牌(用于鸣牌分析)
	CalledTile int   // 被鸣的牌

	// TODO: 重构 ContainRedFive RedFiveFromOthers
	ContainRedFive    bool // 是否包含赤5
	RedFiveFromOthers bool // 赤5是否来自他家(用于获取宝牌数)
}

func (*Meld) IsKan

func (m *Meld) IsKan() bool

是否为杠子

type PlayerInfo

type PlayerInfo struct {
	HandTiles34 []int  // 手牌,不含副露
	Melds       []Meld // 副露
	DoraTiles   []int  // 宝牌指示牌产生的宝牌,可以重复
	NumRedFives []int  // 按照 mps 的顺序,各个赤5的个数(手牌和副露中的)

	IsTsumo       bool // 是否自摸
	WinTile       int  // 自摸/荣和的牌
	RoundWindTile int  // 场风
	SelfWindTile  int  // 自风
	IsParent      bool // 是否为亲家
	IsDaburii     bool // 是否双立直
	IsRiichi      bool // 是否立直

	DiscardTiles []int // 自家舍牌,用于判断和率,是否振听等  *注意创建 PlayerInfo 的时候把负数调整成正的!
	LeftTiles34  []int // 剩余牌

	LeftDrawTilesCount int // 剩余可以摸的牌数

	NukiDoraNum int // 拔北宝牌数
}

func NewSimplePlayerInfo

func NewSimplePlayerInfo(tiles34 []int, melds []Meld) *PlayerInfo

func (*PlayerInfo) AddMeld

func (pi *PlayerInfo) AddMeld(meld Meld)

func (*PlayerInfo) CountDora

func (pi *PlayerInfo) CountDora() (count int)

根据手牌、副露、赤5,结合哪些是宝牌,计算出拥有的宝牌个数

func (*PlayerInfo) DiscardTile

func (pi *PlayerInfo) DiscardTile(tile int, isRedFive bool)

func (*PlayerInfo) FillLeftTiles34

func (pi *PlayerInfo) FillLeftTiles34()

func (*PlayerInfo) IsFuriten

func (pi *PlayerInfo) IsFuriten(waits map[int]int) bool

是否振听 仅限听牌时调用 TODO: Waits 移进来

func (*PlayerInfo) IsNaki

func (pi *PlayerInfo) IsNaki() bool

是否已鸣牌(暗杠不算) 可以用来判断该玩家能否立直,计算门清加符、役种番数等

func (*PlayerInfo) IsOnlyRedFive

func (pi *PlayerInfo) IsOnlyRedFive(tile int) bool

手上的这种牌只有赤5

func (*PlayerInfo) UndoAddMeld

func (pi *PlayerInfo) UndoAddMeld()

func (*PlayerInfo) UndoDiscardTile

func (pi *PlayerInfo) UndoDiscardTile(tile int, isRedFive bool)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL