UPM Package
add package from git url
https://github.com/makisin/Three_Mahjong.git?path=Assets/Package
3人麻雀のルール部分を実装したライブラリです。
卓上にある牌を管理して、鳴いたりロンしたりといったAPIを提供します。
あるのはルール部分の実装のみなので、「牌を画面に表示する」「ユーザー操作を受け付ける」「AIが打つ」といった部分は別途開発する必要があります。
GameをCreateしてルールを定める。
var afterDraw = Game.Create((PlayerIndex)Random.Range(0, 3),
new RuleSetting()
{
end = new Mahjongs.Rules.EndRule()
{
extraRoundScoreThreshold = 40000,
lengthType = Mahjongs.Rules.LengthType.東風戦,
suddenDeathInExtraRound = true,
},
payment = new Mahjongs.Rules.PaymentRule()
{
返し = 40000,
ウマ = new[] { 20, 0, -20 },
},
initialScore = 35000,
redTile = Mahjongs.Rules.RedTile.赤ドラ3}); APIを呼ぶと戻り値としてIControllerが返ってくるので、これを使ってゲームを進行していく。
プレイヤーがとれる行動はCommandクラスで表現されている。
プレイヤー操作なりAIなりで希望する行動を決め、Commandを生成する。
// 例えば牌を切る行動はDiscardクラスで表現される。
if (afterDraw.CanDiscard(tile, out var discardCommand))
{
}
// 実行可能な全行動はExecutableCommandsで取得できる
var allExecutableCommands = afterDraw.ExecutableCommands; IController.ExecuteCommandsで実行する。
// 切った牌に対してポン
var commandResult = afterDiscard.ExecuteCommands(out var executeds, pon);// ポンとチーが両方かかる場合。優先順位によりポンのみが実行される。
// executedsには{pon}が返される
var commandResult = afterDiscard.ExecuteCommands(out var executeds, pon, chi);// ロンが複数希望されている場合は複数同時に処理されダブロンになる。
// executedsには{ron1, ron2}が返される
var commandResult = afterDiscard.ExecuteCommands(out var executeds, ron1, ron2);// 特にすることがない(切ったあと誰も鳴かないなど)場合はcommandを渡さずに実行する。
var commandResult = afterDiscard.ExecuteCommands(out _);- 上りや流局などで局が終わった場合、
commandResult.roundResultにデータが入っているのでそれに応じた画面を表示する - ゲームが終了した場合は
CommandResult.roundResult.gameResultが入っている。
commandResult.nextControllerを取得して2へ戻る。
状態をjson文字列にシリアライズできる。
var jsonString = controller.SerializeSession().ToJson();
var controller = Serializable.Session.FromJson(jsonString);ローカルルールは設定で切り替えられたらいいなあ
- 花牌、季節牌(赤牌は実装済み)
- トリロン時の頭ハネ設定
- 食いタン禁止(アリ固定)
- 焼き鳥(なし固定)
- 八連荘(何も起こりません)
- 二翻縛り(常に一翻縛り固定)
- 青天井ルール