Flutter麻将计分插件mahjong_score的使用
Flutter麻将计分插件mahjong_score的使用
mahjong_score
是一个用于计算麻将分数的包。分数是基于“符”(Hu)和“番”(Fan)来计算的。需要注意的是,该包不会分配每个玩家的得分,因此你需要自己实现这部分功能。
使用方法
BasePoint 类
BasePoint
是一个处理由“符”和“番”计算得出的基础分数的类。
import 'package:mahjong_score/score.dart';
final basePoint = BasePoint(hu: 30, fan: 4);
参数 | 描述 |
---|---|
hu | 符点数 |
fan | 翻点数 |
FixedPoint 类
FixedPoint
处理不计算“符”和“番”的基础分数,例如“满贯”(Mangan)和“役满”(Yakuman)。你可以通过 FixedPointType
枚举定义的值获取实例。
import 'package:mahjong_score/score.dart';
final fixed = FixedPointType.value;
final mangan = FixedPointType.Mangan.detail;
Score 类
Score
类是从计算出的基础分数开始,考虑游戏结束的方式,最终处理要传递的分数。
import 'package:mahjong_score/score.dart';
final score = Score(
abstractPoint: basePoint,
isHost: false,
isPicked: false,
consecutivelyCount: 0,
);
参数 | 描述 |
---|---|
abstractPoint | 继承自 abstractPoint 的类 |
isHost | 胜者是否为庄家 |
isPicked | 胜者是否通过“自摸”(Tsumo)结束比赛 |
consecutivelyCount | 连续庄家的数量 |
完整示例 Demo
以下是一个完整的示例,展示如何使用 mahjong_score
包来计算麻将分数。
示例代码
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:mahjong_score/base.dart';
import 'package:mahjong_score/fixed.dart';
import 'package:mahjong_score/score.dart';
class PointSelector extends StatelessWidget {
final bool? isHost;
final bool? isPicked;
final int? consecutivelyCount;
final List<int> hus = [20, 25, 30, 40, 50, 60, 70];
final List<int> hons = [1, 2, 3, 4];
final List<int> specialHans = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
PointSelector({
this.isHost,
this.isPicked,
this.consecutivelyCount,
});
String get playerGrade => isHost! ? '亲' : '子';
String get finishMethod => isPicked! ? '自摸' : '荣和';
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('分数')),
body: Column(
children: [
Text('$playerGrade $finishMethod'),
MahjongPointTable(
isHost: isHost,
isPicked: isPicked,
noMoreReaderCount: consecutivelyCount,
),
Expanded(
child: ListView.builder(
itemCount: FixedPointType.values.length,
itemBuilder: (context, i) {
final score = Score(
basePoint: FixedPointType.values[i].detail,
isHost: isHost,
isPicked: isPicked,
consecutivelyCount: consecutivelyCount,
);
return ListTile(
title: Text(score.toString()),
onTap: () => Navigator.pop(context, score),
);
},
),
),
],
),
);
}
}
class MahjongPointTable extends StatelessWidget {
final bool? isHost;
final bool? isPicked;
final int? noMoreReaderCount;
final List<int> hus = [20, 25, 30, 40, 50, 60, 70];
final List<int> fans = [1, 2, 3, 4];
final List<int> specialHans = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
MahjongPointTable({
this.isHost,
this.isPicked,
this.noMoreReaderCount,
});
[@override](/user/override)
Widget build(BuildContext context) {
return Table(
border: TableBorder.all(),
children: [
TableRow(
children: [
_buildHeaderCell('符\\翻'),
...List.generate(
fans.length,
(i) => _buildHeaderCell('${fans[i].toString()}'),
),
],
),
...List.generate(hus.length, (index) {
final hu = hus[index];
return TableRow(
children: [
_buildBodyCell('$hu'),
...List.generate(fans.length, (index) {
final score = Score(
basePoint: BasePoint(hu: hu, fan: fans[index]),
isHost: isHost,
isPicked: isPicked,
consecutivelyCount: noMoreReaderCount,
);
if (score.isNotDisplay) {
return Container();
}
return GestureDetector(
child: _buildBodyCell(score.toString()),
onTap: () => Navigator.pop(context, score),
);
}),
],
);
}),
],
);
}
Widget _buildHeaderCell(String label) {
return Container(
padding: EdgeInsets.only(top: 2.0, bottom: 2.0),
child: Center(child: Text(label, textAlign: TextAlign.center)),
);
}
Widget _buildBodyCell(String label) {
return Container(
padding: EdgeInsets.only(top: 10.0, bottom: 10.0),
child: Center(child: Text(label, textAlign: TextAlign.center)),
);
}
}
更多关于Flutter麻将计分插件mahjong_score的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter麻将计分插件mahjong_score的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
mahjong_score
是一个用于 Flutter 的麻将计分插件,它可以帮助开发者轻松地在应用中实现麻将游戏的计分功能。以下是如何使用 mahjong_score
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 mahjong_score
插件的依赖:
dependencies:
flutter:
sdk: flutter
mahjong_score: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 mahjong_score
插件:
import 'package:mahjong_score/mahjong_score.dart';
3. 使用插件
mahjong_score
插件提供了多种方法来计算麻将的分数。以下是一些基本的使用示例:
3.1 计算基本分数
你可以使用 MahjongScore
类来计算基本的麻将分数。例如,计算一个玩家的得分:
void main() {
// 创建一个 MahjongScore 实例
MahjongScore score = MahjongScore();
// 设置玩家的手牌和和牌方式
score.setHandTiles(['1m', '2m', '3m', '4m', '5m', '6m', '7m', '8m', '9m', '1p', '2p', '3p', '4p', '5p']);
score.setWinningTile('6p');
score.setWinningType(WinningType.Ron);
// 计算分数
int playerScore = score.calculateScore();
print('玩家的得分是: $playerScore');
}
3.2 计算多个玩家的分数
如果你需要计算多个玩家的分数,可以创建多个 MahjongScore
实例,并分别计算每个玩家的得分。
void main() {
// 创建多个 MahjongScore 实例
MahjongScore player1Score = MahjongScore();
MahjongScore player2Score = MahjongScore();
// 设置玩家1的手牌和和牌方式
player1Score.setHandTiles(['1m', '2m', '3m', '4m', '5m', '6m', '7m', '8m', '9m', '1p', '2p', '3p', '4p', '5p']);
player1Score.setWinningTile('6p');
player1Score.setWinningType(WinningType.Ron);
// 设置玩家2的手牌和和牌方式
player2Score.setHandTiles(['1s', '2s', '3s', '4s', '5s', '6s', '7s', '8s', '9s', '1p', '2p', '3p', '4p', '5p']);
player2Score.setWinningTile('6p');
player2Score.setWinningType(WinningType.Tsumo);
// 计算分数
int player1FinalScore = player1Score.calculateScore();
int player2FinalScore = player2Score.calculateScore();
print('玩家1的得分是: $player1FinalScore');
print('玩家2的得分是: $player2FinalScore');
}
3.3 自定义规则
mahjong_score
插件允许你自定义一些规则,例如设置是否计算役满、是否计算宝牌等。
void main() {
MahjongScore score = MahjongScore();
// 设置自定义规则
score.setYakumanEnabled(true); // 启用役满计算
score.setDoraCount(3); // 设置宝牌数量
// 设置手牌和和牌方式
score.setHandTiles(['1m', '2m', '3m', '4m', '5m', '6m', '7m', '8m', '9m', '1p', '2p', '3p', '4p', '5p']);
score.setWinningTile('6p');
score.setWinningType(WinningType.Ron);
// 计算分数
int playerScore = score.calculateScore();
print('玩家的得分是: $playerScore');
}