修改判断吃和胡根据配表

This commit is contained in:
zhl 2020-12-23 17:23:03 +08:00
parent 95a71b7082
commit 54e3d589c1
6 changed files with 44 additions and 21 deletions

View File

@ -50,6 +50,12 @@ export class GameEnv {
public robotActTimeMax: number;
// 队友死亡后,补牌数量
public teamDeadAddNum: number;
// 胡牌张数(自摸)
public selfEatCount: number;
// 胡牌张数(吃牌)
public otherEatCount: number;
// 轮空轮的间隔时间
public emptyRoundTime: number;
public init(data: Map<number, BaseCfg>) {
this.initCardNum = data.get(BaseConst.INIT_CARD_NUM).value;
@ -75,5 +81,8 @@ export class GameEnv {
this.robotActTimeMin = data.get(BaseConst.ROBOT_ACTTIME_MIN).value;
this.robotActTimeMax = data.get(BaseConst.ROBOT_ACTTIME_MAX).value;
this.teamDeadAddNum = data.get(BaseConst.TEAM_DEAD_ADDNUM).value;
this.selfEatCount = data.get(BaseConst.SELF_EAT_COUNT).value;
this.otherEatCount = data.get(BaseConst.OTHER_EAT_COUNT).value;
this.emptyRoundTime = data.get(BaseConst.EMPTY_ROUND_TIME).value;
}
}

View File

@ -45,6 +45,14 @@ export class BaseConst {
public static readonly ROBOT_ACTTIME_MAX = 99022;
// 队友死亡后,补牌数量
public static readonly TEAM_DEAD_ADDNUM = 99023
// 胡牌张数(自摸)
public static readonly SELF_EAT_COUNT = 99024
// 胡牌张数(吃牌)
public static readonly OTHER_EAT_COUNT = 99025
// 轮空轮的间隔时间
public static readonly EMPTY_ROUND_TIME = 99026

View File

@ -8,6 +8,8 @@ import {GameEnv} from "../../cfg/GameEnv";
import {debugRoom} from "../../common/Debug";
import {TurnEndCommand} from "./TurnEndCommand";
import {Card} from "../schema/Card";
import {Wait} from "./Wait";
import {CardType} from "../../cfg/enums/CardType";
/**
*
@ -38,7 +40,7 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
for (let id of cards) {
tmpCards.push(player.cards.get(id + ''));
}
if (!gameUtil.checkDiscard(tmpCards)) {
if (!gameUtil.checkDiscard(tmpCards, new GameEnv().selfEatCount)) {
this.room.send(client,'discard_card_s2c', {errcode: 4, errmsg: '出牌不符合规则'});
return;
}
@ -68,12 +70,12 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
if (cards.length === 1) {
let cardArr: Card[] = [...this.state.cards.values()];
this.room.battleMan.onCardDiscarded(player, cardArr[0])
return [new NextSubCommand()];
// if (cardArr[0].type == 1) {
// return [new NextSubCommand()];
// } else {
// return [new Wait().setPayload(3000), new TurnEndCommand()];
// }
// return [new NextSubCommand()];
if (cardArr[0].type == CardType.general || cardArr[0].type == CardType.variable_unit) {
return [new NextSubCommand()];
} else {
return [new Wait().setPayload(new GameEnv().emptyRoundTime), new TurnEndCommand()];
}
} else {
let cardArr: Card[] = [...this.state.cards.values()];
this.room.battleMan.onCardLinkOver(player, cardArr);

View File

@ -4,6 +4,7 @@ import {Client} from "colyseus";
import gameUtil from "../../utils/game.util";
import {GameStateConst} from "../../constants/GameStateConst";
import {EatConfirmCommand} from "./EatConfirmCommand";
import {GameEnv} from "../../cfg/GameEnv";
/**
*
@ -32,7 +33,7 @@ export class EatCardCommand extends Command<CardGameState, { client: Client, car
tmpCards.push(player.cards.get(id + ''));
}
tmpCards.push(this.state.cards.get(target + ''));
if (!gameUtil.checkDiscard(tmpCards)) {
if (!gameUtil.checkDiscard(tmpCards, new GameEnv().otherEatCount)) {
this.room.send(client,'discard_card_s2c', {errcode: 5, errmsg: '不符合吃牌规则'});
return;
}

View File

@ -20,6 +20,7 @@ let assistantUtil = {
*/
checkTriple(cardArr: Card[], card?: Card): Card[] {
if (card) cardArr.push(card);
let maxCount = card ? new GameEnv().otherEatCount : new GameEnv().selfEatCount;
let pointMap: Map<number, Card[]> = new Map();
let cardIdSet: Set<number> = new Set();
for (let c of cardArr) {
@ -40,13 +41,13 @@ let assistantUtil = {
// 优先出对子
for (let [point, arr] of pointMap) {
if (card) {
if (point == card.number && arr.length >= 3) {
if (point == card.number && arr.length >= maxCount) {
fetched = true;
result = arr;
break;
}
} else {
if (arr.length >= 3) {
if (arr.length >= maxCount) {
fetched = true;
result = arr;
break;
@ -71,17 +72,17 @@ let assistantUtil = {
tmp.push(cur);
}
if (card) {
if (tmp.indexOf(card.number) >= 0 && tmp.length >= 3) {
if (tmp.indexOf(card.number) >= 0 && tmp.length >= maxCount) {
break;
}
} else {
if (tmp.length >= 3) {
if (tmp.length >= maxCount) {
break;
}
}
}
if (tmp.length >= 3) {
if (tmp.length >= maxCount) {
let subTmp = [];
for (let i = tmp[0] - 1; i > 0; i--) {
if (cardIdSet.has(i)) {

View File

@ -8,8 +8,9 @@ import {error} from "../common/Debug";
import {Room} from "colyseus";
import {PlayerStateConst} from "../constants/PlayerStateConst";
import {GameEnv} from "../cfg/GameEnv";
import {GameResultCommand} from "../rooms/commands/GameResultCommand";
import {CardGameState} from "../rooms/schema/CardGameState";
import {CardType} from "../cfg/enums/CardType";
import {EffectType} from "../cfg/enums/EffectType";
let gameUtil = {
/**
@ -27,8 +28,8 @@ let gameUtil = {
let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
let type = cfg.type_id;
// 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11
if (effType == 11) {
type = 11;
if (effType == EffectType.variable_unit) {
type = CardType.variable_unit;
}
let card = new Card(localId++, cfg.point, type, effid);
cards.push(card);
@ -202,7 +203,7 @@ let gameUtil = {
addCardToPlayer(room: Room, player: Player, cards: Card[], fromplayer?: Player) {
for (let card of cards) {
// 如果card的type == 11, 说明是自选随从卡, 则替换成玩家牌组中的卡
if (card.type == 11) {
if (card.type == CardType.variable_unit) {
card.effect = this.getRandomServant(player);
}
player.cards.set(card.id + '', card);
@ -227,7 +228,7 @@ let gameUtil = {
let count = targetCards.length;
for (let i = 0; i < count; i++) {
let card = cardArr.pop();
if (card.type == 11) {
if (card.type == CardType.variable_unit) {
card.effect = this.getRandomServant(player);
}
cards.push(card);
@ -239,8 +240,9 @@ let gameUtil = {
/**
*
* @param cardsLst
* @param maxCount
*/
checkDiscard(cardsLst: Card[]) {
checkDiscard(cardsLst: Card[], maxCount: number) {
if (cardsLst.length == 0 || cardsLst.length == 2) {
return false
} else if (cardsLst.length == 1) {
@ -248,14 +250,14 @@ let gameUtil = {
}
let numSet: number[] = [];
cardsLst.forEach(function (value) {
if (value.number < 11) {
if (value.type == CardType.general || value.type == CardType.variable_unit) {
numSet.push(value.number);
}
});
if (numSet.length === 1) {
return true;
}
if (numSet.length < 3) {
if (numSet.length < maxCount) {
return false;
}
numSet.sort((a, b) => {