generate random initial hands & three landlord cards
This commit is contained in:
parent
9e2e8dccf9
commit
bee26bb741
|
@ -239,3 +239,14 @@ export function isDoudizhuBomb(cards) {
|
||||||
return cards[0][1] === cards[1][1] && cards[0][1] === cards[2][1] && cards[0][1] === cards[3][1];
|
return cards[0][1] === cards[1][1] && cards[0][1] === cards[2][1] && cards[0][1] === cards[3][1];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function shuffleArray(inputArray) {
|
||||||
|
let array = inputArray.slice();
|
||||||
|
for (let i = array.length - 1; i > 0; i--) {
|
||||||
|
const j = Math.floor(Math.random() * (i + 1));
|
||||||
|
const temp = array[i];
|
||||||
|
array[i] = array[j];
|
||||||
|
array[j] = temp;
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
|
@ -4,14 +4,19 @@ import { Layout, Message } from 'element-react';
|
||||||
import qs from 'query-string';
|
import qs from 'query-string';
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { DoudizhuGameBoard } from '../../components/GameBoard';
|
import { DoudizhuGameBoard } from '../../components/GameBoard';
|
||||||
import { card2SuiteAndRank, deepCopy, isDoudizhuBomb, sortDoudizhuCards } from '../../utils';
|
import {
|
||||||
|
card2SuiteAndRank,
|
||||||
|
deepCopy,
|
||||||
|
fullDoudizhuDeck,
|
||||||
|
isDoudizhuBomb,
|
||||||
|
shuffleArray,
|
||||||
|
sortDoudizhuCards,
|
||||||
|
} from '../../utils';
|
||||||
import { douzeroDemoUrl } from '../../utils/config';
|
import { douzeroDemoUrl } from '../../utils/config';
|
||||||
|
|
||||||
const initHands = [
|
const shuffledDoudizhuDeck = shuffleArray(fullDoudizhuDeck.slice());
|
||||||
'S2 H2 HK DK HQ CQ DQ CJ S9 H9 D9 C7 S6 H6 C4 D4 S3',
|
|
||||||
'C2 HA CA DA SQ ST HT D8 S7 H7 C6 D6 S5 H5 C5 S4 H4',
|
const threeLandlordCards = shuffleArray(sortDoudizhuCards(shuffledDoudizhuDeck.slice(0, 3)));
|
||||||
'RJ BJ D2 SA SK CK SJ HJ DJ CT DT C9 S8 H8 C8 D7 D5 H3 S3 D3',
|
|
||||||
];
|
|
||||||
|
|
||||||
const initConsiderationTime = 30000;
|
const initConsiderationTime = 30000;
|
||||||
const considerationTimeDeduction = 1000;
|
const considerationTimeDeduction = 1000;
|
||||||
|
@ -37,7 +42,15 @@ const playerInfo = [
|
||||||
douzeroPlayerPosition: 0,
|
douzeroPlayerPosition: 0,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const threeLandlordCards = ['RJ', 'BJ', 'D2'];
|
|
||||||
|
let initHands = [
|
||||||
|
shuffledDoudizhuDeck.slice(3, 20),
|
||||||
|
shuffledDoudizhuDeck.slice(20, 37),
|
||||||
|
shuffledDoudizhuDeck.slice(37, 54),
|
||||||
|
];
|
||||||
|
console.log(initHands);
|
||||||
|
const landlordIdx = playerInfo.find((player) => player.role === 'landlord').index;
|
||||||
|
initHands[landlordIdx] = initHands[landlordIdx].concat(threeLandlordCards.slice());
|
||||||
|
|
||||||
let gameStateTimeout = null;
|
let gameStateTimeout = null;
|
||||||
|
|
||||||
|
@ -154,7 +167,7 @@ function PvEDoudizhuDemoView() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// update value records for douzero
|
// update value records for douzero
|
||||||
const newHistoryRecord = newLatestAction === 'pass' ? [] : newLatestAction;
|
const newHistoryRecord = sortDoudizhuCards(newLatestAction === 'pass' ? [] : newLatestAction, true);
|
||||||
switch (playerInfo[gameState.currentPlayer].douzeroPlayerPosition) {
|
switch (playerInfo[gameState.currentPlayer].douzeroPlayerPosition) {
|
||||||
case 0:
|
case 0:
|
||||||
lastMoveLandlord = newHistoryRecord;
|
lastMoveLandlord = newHistoryRecord;
|
||||||
|
@ -253,7 +266,7 @@ function PvEDoudizhuDemoView() {
|
||||||
rival_move = cardArr2DouzeroFormat(
|
rival_move = cardArr2DouzeroFormat(
|
||||||
sortDoudizhuCards(gameHistory[gameHistory.length - 1], true),
|
sortDoudizhuCards(gameHistory[gameHistory.length - 1], true),
|
||||||
);
|
);
|
||||||
} else if (gameHistory.length > 2 && gameHistory[gameHistory.length - 2].length > 0) {
|
} else if (gameHistory.length >= 2 && gameHistory[gameHistory.length - 2].length > 0) {
|
||||||
rival_move = cardArr2DouzeroFormat(
|
rival_move = cardArr2DouzeroFormat(
|
||||||
sortDoudizhuCards(gameHistory[gameHistory.length - 2], true),
|
sortDoudizhuCards(gameHistory[gameHistory.length - 2], true),
|
||||||
);
|
);
|
||||||
|
@ -340,7 +353,7 @@ function PvEDoudizhuDemoView() {
|
||||||
const newGameState = deepCopy(gameState);
|
const newGameState = deepCopy(gameState);
|
||||||
// find landord to be the first player
|
// find landord to be the first player
|
||||||
newGameState.currentPlayer = playerInfo.find((element) => element.role === 'landlord').index;
|
newGameState.currentPlayer = playerInfo.find((element) => element.role === 'landlord').index;
|
||||||
newGameState.hands = initHands.map((element) => sortDoudizhuCards(cardStr2Arr(element)));
|
newGameState.hands = initHands.map((element) => sortDoudizhuCards(element));
|
||||||
setGameState(newGameState);
|
setGameState(newGameState);
|
||||||
gameStateTimer();
|
gameStateTimer();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
Loading…
Reference in New Issue