更新记录
1.2.1(2026-01-25)
增加麻将模板,麻将更有肉感!
1.2(2026-01-22)
1.不再使用uniCloud服务器调度云函数,开发者直接不用开通uniCloud服务,直接减少一半运营费用,营收利润空间更大。 2.试用版和普通授权版均可以修改优化AI调用的提示词,无形中普通授权版提高了权限。
1.1.02(2026-01-11)
优化麻将桌面样式
查看更多平台兼容性
云端兼容性
| 阿里云 | 腾讯云 | 支付宝云 |
|---|---|---|
| √ | √ | √ |
uni-app(3.6.15)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | 5.0 | 12 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(3.6.16)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | 5.0 | 12 | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
云函数类插件通用教程
使用云函数类插件的前提是:使用HBuilderX 2.9+
功能简介
该游戏为人机对战麻将游戏,AI为玩家提供出牌策略指导,提升玩家麻将水平,实现百战百胜。
1.本人作为其中一个玩家,其他玩家为程序出牌。
2.已有胡牌规则有:平胡、龙七对、七对、大对子、清一色。
3.抓鸡规则有:幺鸡、八筒以及胡牌后翻的鸡,没叫牌时已出的鸡被扣分。
4.AI在线思考出牌决策:在线连接Deepseek现场指导出牌决策,提升玩家麻将水平,实现百战百胜。
5.配备完备的广告体系:视频激励+信息流广告,多重立体广告收益。
基本使用方法
1.修改广告adpid为自己的:插件wj-mjaigame/common/constants.js第40行
//视频奖励广告位adpid
export const adpid = '1507000689';
//游戏界面信息流广告位adpid
export const adXXLpid = '1111111111';
2.修改deepseek的key:插件wj-mjaigame/common/constants.js第38行
//定义deepseek接口地址
export const AI_Url = 'https://api.deepseek.com/chat/completions';
//定义deepseek接口的key,修改为自己申请的(申请地址:([https://platform.deepseek.com]https://platform.deepseek.com))
export const AI_Api_Key = 'sk-您自己在deepseek上申请的Key';
3.修改deepseek的提示词:插件wj-mjaigame/common/constants.js第63行
const AI_chat = '你是一个专业的中国麻将AI决策助手,需要根据当前牌局状态给出最优出牌建议。
我的手牌:bottom_tiles,jiaopaiHint;弃牌bottom_discarded;碰杠牌bottom_special。
下家弃牌right_discarded碰杠牌right_special。对家弃牌top_discarded;碰杠牌top_special。
上家弃牌left_discarded;碰杠牌left_special。当前还剩remainingTiles张。
以自己手牌叫牌为最终目标(如果已叫牌尽量保持叫牌),其次再考虑其他3家手上可能捉炮的大牌,防止点炮。
请推荐2张出牌建议,并给出60字以内的理由。';
通过以上三步即可实现:发行推广使用、坐等广告收益。
二开基本思路
在pages/game.vue修改胡牌规则,实现本地特色麻将规则,更受本地人喜欢。
修改胡牌逻辑
// 检查七对/杠七对
if (tempHand.length === 14 & this.checkSevenPairs(tempHand)) {
paixingfen = paixingfen + 3;
//如果七对中有4张牌相同,则说明是杠七对
if (this.findFourthDuplicate(tempHand)) {
paixing.push('杠七对');
paixingfen = paixingfen + 20;
} else {
paixing.push('七对');
paixingfen = paixingfen + 10;
}
// 检查是否是同一色(即清一色牌型的基础)
const special = this.players[player].special;
if (this.checkQingYiSe(tempHand, special)) {
paixing.push('清一色');
paixingfen = paixingfen + 10;
}
this.paixingfen = paixingfen;
return paixing.map(t => t).join(' ');
}
// 检查大对子
if (this.checkDaDuizi(tempHand)) {
paixingfen = paixingfen + 3;
paixing.push('大对子');
paixingfen = paixingfen + 5;
// 检查是否是同一色(即清一色牌型的基础)
const special = this.players[player].special;
if (this.checkQingYiSe(tempHand, special)) {
paixing.push('清一色');
paixingfen = paixingfen + 10;
}
this.paixingfen = paixingfen;
return paixing.map(t => t).join(' ');
}
// 检查平胡
if (this.checkPingHu(tempHand)) {
paixingfen = paixingfen + 3;
//检查自己是否有杠
const gangCombos = this.players[player].special.filter(combo => combo.type === 'gang');
// 如果是自摸或者有杠,平胡可以胡
if (isZimo || this.gang || gangCombos.length > 0) {
paixing.push('平胡');
paixingfen = paixingfen;
if (this.gang) {
paixingfen = paixingfen + 2;
}
}
// 检查是否是同一色(即清一色牌型的基础)
const special = this.players[player].special;
if (this.checkQingYiSe(tempHand, special)) {
paixing.push('清一色');
paixingfen = paixingfen + 10;
}
this.paixingfen = paixingfen;
return paixing.map(t => t).join(' ');
}
新建具体规则函数
// 大对子检查
checkDaDuizi(tiles) {
// 碰碰胡牌数要求: 2,5,8,11,14
const validLengths = [2, 5, 8, 11, 14];
if (!validLengths.includes(tiles.length) || tiles[0] != tiles[1]) return false;
if (tiles.length === 2 & tiles[0] === tiles[1]) return true;
// 提取所有name值
const names = tiles.map(item => item);
// 统计数字出现频率
const freq = {};
for (const num of names) {
freq[num] = (freq[num] || 0) + 1;
}
const counts = Object.values(freq);
// 检查频率模式:一个数字出现2次,其余数字每个出现3次
return counts.includes(2) && counts.filter(c => c === 3).length === counts.length - 1;
}
// 清一色检查
checkQingYiSe(tiles, special) {
if (tiles.length === 0) return false;
const firstTileType = tiles[0].charAt(1);
// 检查手牌
for (const tile of tiles) {
if (tile.charAt(1) !== firstTileType) {
return false;
}
}
// 检查特殊牌组
if (special && special.length > 0) {
for (const group of special) {
for (const tile of group.tiles) {
if (tile.name.charAt(1) !== firstTileType) {
return false;
}
}
}
}
return true;
}

收藏人数:
购买源码授权版(
导入插件并试用
赞赏(0)
下载 10
赞赏 0
下载 34332
赞赏 155
赞赏
京公网安备:11010802035340号