add
This commit is contained in:
@@ -0,0 +1,277 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\services\scan;
|
||||
|
||||
use app\models\process\NumberTab;
|
||||
use freedom\utils\CardPosition;
|
||||
use freedom\utils\CardPositionNn;
|
||||
use freedom\utils\RedisUtil;
|
||||
|
||||
/**
|
||||
* TODO NN扫描
|
||||
* Class ScanNnService
|
||||
* @package app\services\scan
|
||||
*/
|
||||
class ChangeNnService
|
||||
{
|
||||
/**
|
||||
* TODO NN扫描处理
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function doScanNnChange(array $event, array $tableInfo): array
|
||||
{
|
||||
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
||||
if ($checkScanRes['status'] == false){
|
||||
return $checkScanRes;
|
||||
}else{
|
||||
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
||||
$cardInfo = $checkScanRes['cardInfo'];
|
||||
}
|
||||
// 判断牌是否符合规格
|
||||
if (!isset($event['card']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$card = intval($event['card']);
|
||||
$round = [
|
||||
'card' => $card,
|
||||
'number' => CardPosition::interchangeCard($card),
|
||||
'boot_id' => intval($numberTabInfo['boot_id']),
|
||||
'boot_num' => intval($numberTabInfo['boot_num']),
|
||||
'number_tab_id' => intval($numberTabInfo['id']),
|
||||
'number_tab_number' => intval($numberTabInfo['number'])
|
||||
];
|
||||
if (!$cardInfo){
|
||||
// 没有牌数据,创建并保存
|
||||
$cardInfo = ['card_first' => $card];
|
||||
$cardInfo['player_1_card_1'] = 0;
|
||||
$cardInfo['player_1_card_2'] = 0;
|
||||
$cardInfo['player_1_card_3'] = 0;
|
||||
$cardInfo['player_1_card_4'] = 0;
|
||||
$cardInfo['player_1_card_5'] = 0;
|
||||
$cardInfo['player_2_card_1'] = 0;
|
||||
$cardInfo['player_2_card_2'] = 0;
|
||||
$cardInfo['player_2_card_3'] = 0;
|
||||
$cardInfo['player_2_card_4'] = 0;
|
||||
$cardInfo['player_2_card_5'] = 0;
|
||||
$cardInfo['player_3_card_1'] = 0;
|
||||
$cardInfo['player_3_card_2'] = 0;
|
||||
$cardInfo['player_3_card_3'] = 0;
|
||||
$cardInfo['player_3_card_4'] = 0;
|
||||
$cardInfo['player_3_card_5'] = 0;
|
||||
$cardInfo['banker_card_1'] = 0;
|
||||
$cardInfo['banker_card_2'] = 0;
|
||||
$cardInfo['banker_card_3'] = 0;
|
||||
$cardInfo['banker_card_4'] = 0;
|
||||
$cardInfo['banker_card_5'] = 0;
|
||||
$positionFirst = CardPositionNn::nnPosition($card);
|
||||
$cardInfo['position_first'] = $positionFirst;
|
||||
NumberTab::where(['id' => $numberTabInfo['id']])->update(['position_first' => $positionFirst]);
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = 0;
|
||||
$round['order_num'] = 0;
|
||||
$round['result'] = '';
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
// 判断是否已经存在过相同牌
|
||||
$beforeCard = $cardInfo;
|
||||
//unset($beforeCard['card_first']);
|
||||
unset($beforeCard['position_first']);
|
||||
if(in_array($card,$beforeCard)) return ['status' => false, 'msg' => 'Card Exists'];
|
||||
$cardCountValues = array_count_values($beforeCard);
|
||||
// 获取当前定位
|
||||
if (isset($cardCountValues[0])){
|
||||
$positionNum = 20 - intval($cardCountValues[0]) + 1;
|
||||
} else {
|
||||
$positionNum = 20;
|
||||
}
|
||||
$player1Card[0] = $cardInfo['player_1_card_1'];
|
||||
$player1Card[1] = $cardInfo['player_1_card_2'];
|
||||
$player1Card[2] = $cardInfo['player_1_card_3'];
|
||||
$player1Card[3] = $cardInfo['player_1_card_4'];
|
||||
$player2Card[0] = $cardInfo['player_2_card_1'];
|
||||
$player2Card[1] = $cardInfo['player_2_card_2'];
|
||||
$player2Card[2] = $cardInfo['player_2_card_3'];
|
||||
$player2Card[3] = $cardInfo['player_2_card_4'];
|
||||
$player3Card[0] = $cardInfo['player_3_card_1'];
|
||||
$player3Card[1] = $cardInfo['player_3_card_2'];
|
||||
$player3Card[2] = $cardInfo['player_3_card_3'];
|
||||
$player3Card[3] = $cardInfo['player_3_card_4'];
|
||||
$bankerCard[0] = $cardInfo['banker_card_1'];
|
||||
$bankerCard[1] = $cardInfo['banker_card_2'];
|
||||
$bankerCard[2] = $cardInfo['banker_card_3'];
|
||||
$bankerCard[3] = $cardInfo['banker_card_4'];
|
||||
$resultWord = '';
|
||||
|
||||
$order = CardPositionNn::nnOrder($cardInfo['position_first']);
|
||||
$orderPosition = $positionNum - 1;
|
||||
$position = $order[$orderPosition];
|
||||
$orderNumArr = CardPositionNn::nnOrderNum($cardInfo['position_first']);
|
||||
$orderNum = $orderNumArr[$orderPosition];
|
||||
$cardInfo[$position] = $card;
|
||||
if($positionNum >= 17 && $positionNum <= 20){
|
||||
if($orderNum > 10 && $orderNum < 20){
|
||||
$player1Card[4] = $card;
|
||||
$player1Result = CardPositionNn::JudgeCowCow($player1Card);
|
||||
$resultWord = $player1Result['word'];
|
||||
}
|
||||
if($orderNum > 20 && $orderNum < 30){
|
||||
$player2Card[4] = $card;
|
||||
$player2Result = CardPositionNn::JudgeCowCow($player2Card);
|
||||
$resultWord = $player2Result['word'];
|
||||
}
|
||||
if($orderNum > 30 && $orderNum < 40){
|
||||
$player3Card[4] = $card;
|
||||
$player3Result = CardPositionNn::JudgeCowCow($player3Card);
|
||||
$resultWord = $player3Result['word'];
|
||||
}
|
||||
if($orderNum > 40){
|
||||
$bankerCard[4] = $card;
|
||||
$bankerResult = CardPositionNn::JudgeCowCow($bankerCard);
|
||||
$resultWord = $bankerResult['word'];
|
||||
}
|
||||
}
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = $positionNum;
|
||||
$round['order_num'] = $orderNum;
|
||||
$round['result'] = $resultWord;
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO NN识别处理
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function doScanNnSbChange(array $event, array $tableInfo): array
|
||||
{
|
||||
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
||||
if ($checkScanRes['status'] == false){
|
||||
return $checkScanRes;
|
||||
}else{
|
||||
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
||||
$cardInfo = $checkScanRes['cardInfo'];
|
||||
}
|
||||
// 判断牌是否符合规格
|
||||
if (!isset($event['card']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$card = intval($event['card']);
|
||||
$round = [
|
||||
'card' => $card,
|
||||
'number' => CardPosition::interchangeCard($card),
|
||||
'boot_id' => intval($numberTabInfo['boot_id']),
|
||||
'boot_num' => intval($numberTabInfo['boot_num']),
|
||||
'number_tab_id' => intval($numberTabInfo['id']),
|
||||
'number_tab_number' => intval($numberTabInfo['number'])
|
||||
];
|
||||
|
||||
// 判断是否已经存在过相同牌
|
||||
$beforeCard = $cardInfo;
|
||||
//unset($beforeCard['card_first']);
|
||||
unset($beforeCard['position_first']);
|
||||
if(in_array($card,$beforeCard)) return ['status' => false, 'msg' => 'Card Exists'];
|
||||
$cardCountValues = array_count_values($beforeCard);
|
||||
// 获取当前定位
|
||||
|
||||
$positionNum = $event['position_num'];
|
||||
$orderNum = 0;
|
||||
$resultWord = '';
|
||||
/*
|
||||
if (isset($cardCountValues[0])){
|
||||
$positionNum = 20 - intval($cardCountValues[0]) + 1;
|
||||
} else {
|
||||
$positionNum = 20;
|
||||
}
|
||||
*/
|
||||
if ($positionNum > 0) {
|
||||
|
||||
$player1Card[0] = $cardInfo['player_1_card_1'];
|
||||
$player1Card[1] = $cardInfo['player_1_card_2'];
|
||||
$player1Card[2] = $cardInfo['player_1_card_3'];
|
||||
$player1Card[3] = $cardInfo['player_1_card_4'];
|
||||
$player1Card[4] = $cardInfo['player_1_card_5'];
|
||||
$player2Card[0] = $cardInfo['player_2_card_1'];
|
||||
$player2Card[1] = $cardInfo['player_2_card_2'];
|
||||
$player2Card[2] = $cardInfo['player_2_card_3'];
|
||||
$player2Card[3] = $cardInfo['player_2_card_4'];
|
||||
$player2Card[4] = $cardInfo['player_2_card_5'];
|
||||
$player3Card[0] = $cardInfo['player_3_card_1'];
|
||||
$player3Card[1] = $cardInfo['player_3_card_2'];
|
||||
$player3Card[2] = $cardInfo['player_3_card_3'];
|
||||
$player3Card[3] = $cardInfo['player_3_card_4'];
|
||||
$player3Card[4] = $cardInfo['player_3_card_5'];
|
||||
$bankerCard[0] = $cardInfo['banker_card_1'];
|
||||
$bankerCard[1] = $cardInfo['banker_card_2'];
|
||||
$bankerCard[2] = $cardInfo['banker_card_3'];
|
||||
$bankerCard[3] = $cardInfo['banker_card_4'];
|
||||
$bankerCard[4] = $cardInfo['banker_card_5'];
|
||||
|
||||
$order = CardPositionNn::nnOrderSb($cardInfo['position_first']);
|
||||
$orderPosition = $positionNum - 1;
|
||||
$position = $order[$orderPosition];
|
||||
$orderNumArr = CardPositionNn::nnOrderNumSb($cardInfo['position_first']);
|
||||
$orderNum = $orderNumArr[$orderPosition];
|
||||
$cardInfo[$position] = $card;
|
||||
|
||||
$indexOfCardToBeChanged = $positionNum % 5 - 1;
|
||||
if ($indexOfCardToBeChanged == -1) $indexOfCardToBeChanged = 4;
|
||||
|
||||
if($orderNum > 10 && $orderNum < 20){
|
||||
$player1Card[$indexOfCardToBeChanged] = $card;
|
||||
$player1Result = CardPositionNn::JudgeCowCow($player1Card);
|
||||
$resultWord = $player1Result['word'];
|
||||
}
|
||||
if($orderNum > 20 && $orderNum < 30){
|
||||
$player2Card[$indexOfCardToBeChanged] = $card;
|
||||
$player2Result = CardPositionNn::JudgeCowCow($player2Card);
|
||||
$resultWord = $player2Result['word'];
|
||||
}
|
||||
if($orderNum > 30 && $orderNum < 40){
|
||||
$player3Card[$indexOfCardToBeChanged] = $card;
|
||||
$player3Result = CardPositionNn::JudgeCowCow($player3Card);
|
||||
$resultWord = $player3Result['word'];
|
||||
}
|
||||
if($orderNum > 40){
|
||||
$bankerCard[$indexOfCardToBeChanged] = $card;
|
||||
$bankerResult = CardPositionNn::JudgeCowCow($bankerCard);
|
||||
$resultWord = $bankerResult['word'];
|
||||
}
|
||||
|
||||
} else {
|
||||
$positionFirst = CardPositionNn::nnPosition($card);
|
||||
$cardInfo['card_first'] = $card;
|
||||
$cardInfo['position_first'] = $positionFirst;
|
||||
}
|
||||
|
||||
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = $positionNum;
|
||||
$round['order_num'] = $orderNum;
|
||||
$round['result'] = $resultWord;
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\services\scan;
|
||||
|
||||
use freedom\utils\CardPosition;
|
||||
use freedom\utils\RedisUtil;
|
||||
|
||||
/**
|
||||
* TODO Baccarat扫描
|
||||
* Class ScanBaccaratService
|
||||
* @package app\services\scan
|
||||
*/
|
||||
class ScanBaccaratService
|
||||
{
|
||||
/**
|
||||
* TODO Baccarat扫描处理
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function doScanBaccarat(array $event, array $tableInfo): array{
|
||||
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
||||
if ($checkScanRes['status'] == false){
|
||||
return $checkScanRes;
|
||||
}else{
|
||||
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
||||
$cardInfo = $checkScanRes['cardInfo'];
|
||||
}
|
||||
if (!isset($event['card']) || !isset($event['position'])) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$card = CardPosition::interchangeCard($event['card']);
|
||||
if (!$card) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$position = CardPosition::interchangePosition($event['position']);
|
||||
if (!$position) return ['status' => false, 'msg' => 'Position Error'];
|
||||
if (isset($cardInfo[$position]) && $cardInfo[$position] > 0 && $cardInfo[$position] != $event['card']) {
|
||||
if (!(isset($event['change']) && $event['change'] == 1)) {
|
||||
return ['status' => false, 'msg' => 'Already Exists'];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//判断接受牌的先后顺序
|
||||
if($event['position'] == 11 || $event['position'] == 12 || $event['position'] == 21 || $event['position'] == 22){
|
||||
$returnPosition = intval($event['position']);
|
||||
$cardInfo[$position] = intval($event['card']);
|
||||
$res = RedisUtil::saveCardPosition($numberTabInfo['id'],$returnPosition,intval($event['card']));
|
||||
if (!$res) return ['status' => false, 'msg' => 'Redis Cache Save Error'];
|
||||
}else if($event['position'] == 13){
|
||||
$change = (isset($event['change']) && $event['change'] == 1)? 1 : 0;
|
||||
$returnData = self::baccaratReplenish($cardInfo,$event['position'], $change);
|
||||
if($returnData['status'] == true){
|
||||
if($returnData['position'] == 'banker_3'){
|
||||
$returnPosition = 23;
|
||||
}else{
|
||||
$returnPosition = 13;
|
||||
}
|
||||
$cardInfo[$returnData['position']] = intval($event['card']);
|
||||
$res = RedisUtil::saveCardPosition($numberTabInfo['id'],$returnPosition,intval($event['card']));
|
||||
if (!$res) return ['status' => false, 'msg' => 'Redis Cache Save Error'];
|
||||
}else{
|
||||
return ['status' => false, 'msg' => $returnData['msg']];
|
||||
}
|
||||
}else if($event['position'] == 23){
|
||||
$returnPosition = 23;
|
||||
if(isset($cardInfo['player_3']) && $cardInfo['player_3'] > 0){
|
||||
$change = (isset($event['change']) && $event['change'] == 1)? 1 : 0;
|
||||
$returnData = self::baccaratReplenish($cardInfo,$event['position'], $change);
|
||||
if($returnData['status'] == true){
|
||||
$cardInfo[$returnData['position']] = intval($event['card']);
|
||||
$res = RedisUtil::saveCardPosition($numberTabInfo['id'],$returnPosition,intval($event['card']));
|
||||
if (!$res) return ['status' => false, 'msg' => 'Redis Cache Save Error'];
|
||||
}else{
|
||||
return ['status' => false, 'msg' => $returnData['msg']];
|
||||
}
|
||||
}else{
|
||||
return ['status' => false, 'msg' => 'player3_is_not_cannot_scan_banker3'];
|
||||
}
|
||||
}else{
|
||||
return ['status' => false, 'msg' => 'position_error'];
|
||||
}
|
||||
$round = array(
|
||||
'tid' => intval($tableInfo['id']),
|
||||
'number_tab_id' => $numberTabInfo['id'],
|
||||
'card' => intval($event['card']),
|
||||
'number' => intval($card),
|
||||
'position' => $returnPosition,
|
||||
'boot_id' => intval($numberTabInfo['boot_id']),
|
||||
'boot_num' => intval($numberTabInfo['boot_num']),
|
||||
'number_tab_number' => intval($numberTabInfo['number']),
|
||||
'card_info' => $cardInfo
|
||||
);
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'data' => $round];
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO Baccarat开牌条件计算方法
|
||||
* @param array $cardInfo
|
||||
* @param int $position
|
||||
* @return array
|
||||
*/
|
||||
public static function baccaratReplenish(array $cardInfo, int $position, int $change = 0): array
|
||||
{
|
||||
if (!isset($cardInfo['banker_1']) || !isset($cardInfo['banker_2']) || !isset($cardInfo['player_1']) || !isset($cardInfo['player_2'])){
|
||||
return array('status' => false, 'msg' => 'player_banker_not_full');
|
||||
}
|
||||
if($cardInfo['banker_1'] > 0 && $cardInfo['banker_2'] > 0 && $cardInfo['player_1'] > 0 && $cardInfo['player_2'] > 0){
|
||||
$player_count = (CardPosition::interchangeNumber(CardPosition::interchangeCard($cardInfo['player_1'])) + CardPosition::interchangeNumber(CardPosition::interchangeCard($cardInfo['player_2']))) % 10;
|
||||
$banker_count = (CardPosition::interchangeNumber(CardPosition::interchangeCard($cardInfo['banker_1'])) + CardPosition::interchangeNumber(CardPosition::interchangeCard($cardInfo['banker_2']))) % 10;
|
||||
if($position == 13){
|
||||
if(isset($cardInfo['player_3']) && $cardInfo['player_3'] > 0 && $change != 1){
|
||||
//第1张增牌已经存在,不允许更改
|
||||
return array('status' => false, 'msg' => 'fail_already_exists');
|
||||
}
|
||||
if($player_count == 8 || $player_count == 9){
|
||||
//闲家8,9点,不允许增牌
|
||||
return array('status' => false, 'msg' => 'fail_player_8_9');
|
||||
}
|
||||
if($banker_count == 8 || $banker_count == 9){
|
||||
//庄家8,9点,不允许增牌
|
||||
return array('status' => false, 'msg' => 'fail_banker_8_9');
|
||||
}
|
||||
if($player_count == 6 || $player_count == 7){
|
||||
return self::baccaratReplenish($cardInfo,23);
|
||||
}
|
||||
return array('status' => true, 'position' => 'player_3', 'msg' => 'Success');
|
||||
}else if($position == 23){
|
||||
if(isset($cardInfo['banker_3']) && $cardInfo['banker_3'] > 0 && $change != 1){
|
||||
//第2张增牌已经存在,不允许更改
|
||||
return array('status' => false, 'msg' => 'fail_already_exists');
|
||||
}
|
||||
if($player_count == 8 || $player_count == 9){
|
||||
//闲家8,9点,不允许增牌
|
||||
return array('status' => false, 'msg' => 'fail_player_8_9');
|
||||
}
|
||||
if($banker_count == 8 || $banker_count == 9){
|
||||
//庄家8,9点,不允许增牌
|
||||
return array('status' => false, 'msg' => 'fail_banker_8_9');
|
||||
}
|
||||
if(isset($cardInfo['player_3']) && $cardInfo['player_3'] > 0){
|
||||
//闲已经补牌
|
||||
$player_3_count = (CardPosition::interchangeNumber(CardPosition::interchangeCard($cardInfo['player_3']))) % 10;
|
||||
if($banker_count < 3 || ($banker_count == 3 && in_array($player_3_count,array(1,2,3,4,5,6,7,9,0))) || ($banker_count == 4 && in_array($player_3_count,array(2,3,4,5,6,7))) || ($banker_count == 5 && in_array($player_3_count,array(4,5,6,7))) || ($banker_count == 6 && in_array($player_3_count,array(6,7)))){
|
||||
return array('status' => true, 'position' => 'banker_3', 'msg' => 'Success');
|
||||
}else{
|
||||
//庄家不符合补牌条件,不接受补牌数据
|
||||
return array('status' => false, 'msg' => 'banker_lby_lfx');
|
||||
}
|
||||
}else{
|
||||
//闲不需要补牌
|
||||
if($banker_count < 6){
|
||||
return array('status' => true, 'position' => 'banker_3', 'msg' => 'Success');
|
||||
}else{
|
||||
//闲家不补牌,庄家点数>=6点,不接受补牌数据
|
||||
return array('status' => false, 'msg' => 'player3_is_not_banker_num_egt_6');
|
||||
}
|
||||
}
|
||||
}else{
|
||||
//定位错误
|
||||
return array('status' => false, 'msg' => 'position_error');
|
||||
}
|
||||
}else{
|
||||
//前面牌数据未全,不接受补牌数据
|
||||
return array('status' => false, 'msg' => 'player_banker_not_full');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\services\scan;
|
||||
|
||||
|
||||
use app\models\process\NumberTab;
|
||||
use freedom\utils\RedisUtil;
|
||||
|
||||
/**
|
||||
* TODO 扫描登录公共处理类
|
||||
* Class ScanDtService
|
||||
* @package app\services\scan
|
||||
*/
|
||||
class ScanCommonService
|
||||
{
|
||||
/**
|
||||
* TODO 扫描公共验证方法
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function checkScan(array $event, array $tableInfo): array
|
||||
{
|
||||
if ($tableInfo['is_scavenging'] != 1) return ['status' => false, 'msg' => 'This Table Is Not Scan'];
|
||||
if (!isset($event['number_tab_id'])) return ['status' => false, 'msg' => 'Not NumberTabId'];
|
||||
$numberTabInfo = NumberTab::getByTableIdOrderByIdDesc($tableInfo);
|
||||
if (!$numberTabInfo) return ['status' => false, 'msg' => 'NumberTabId Error'];
|
||||
if ($numberTabInfo['bet_status'] != 2) return ['status' => false, 'msg' => 'BetStatus No 2'];
|
||||
//判断redis是否存在Card数据,如果不存在则创建
|
||||
if ($tableInfo['game_id'] == 1 || $tableInfo['game_id'] == 2){
|
||||
$cardInfo = RedisUtil::getCardPosition($numberTabInfo['id']);
|
||||
} else {
|
||||
$cardInfo = RedisUtil::getCard($numberTabInfo['id']);
|
||||
}
|
||||
return ['status' => true, 'numberTabInfo' => $numberTabInfo, 'cardInfo' => $cardInfo];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\services\scan;
|
||||
|
||||
|
||||
use freedom\utils\CardPosition;
|
||||
use freedom\utils\RedisUtil;
|
||||
|
||||
/**
|
||||
* TODO Dt扫描
|
||||
* Class ScanDtService
|
||||
* @package app\services\scan
|
||||
*/
|
||||
class ScanDtService
|
||||
{
|
||||
/**
|
||||
* TODO Dt扫描处理
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function doScanDt(array $event, array $tableInfo): array{
|
||||
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
||||
if ($checkScanRes['status'] == false){
|
||||
return $checkScanRes;
|
||||
}else{
|
||||
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
||||
$cardInfo = $checkScanRes['cardInfo'];
|
||||
}
|
||||
if (!isset($event['card']) || !isset($event['position'])) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$card = CardPosition::interchangeCard($event['card']);
|
||||
if (!$card) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$position = CardPosition::interchangePosition($event['position']);
|
||||
if (!$position) return ['status' => false, 'msg' => 'Position Error'];
|
||||
|
||||
$cardInfo[$position] = intval($event['card']);
|
||||
RedisUtil::saveCardPosition($numberTabInfo['id'],intval($event['position']),intval($event['card']));
|
||||
$round = array(
|
||||
'tid' => intval($tableInfo['id']),
|
||||
'number_tab_id' => $numberTabInfo['id'],
|
||||
'card' => intval($event['card']),
|
||||
'number' => $card,
|
||||
'position' => intval($event['position']),
|
||||
'boot_id' => intval($numberTabInfo['boot_id']),
|
||||
'boot_num' => intval($numberTabInfo['boot_num']),
|
||||
'number_tab_number' => intval($numberTabInfo['number']),
|
||||
'card_info' => $cardInfo
|
||||
);
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'data' => $round];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,329 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\services\scan;
|
||||
|
||||
use app\models\process\NumberTab;
|
||||
use freedom\utils\CardPosition;
|
||||
use freedom\utils\CardPositionNn;
|
||||
use freedom\utils\RedisUtil;
|
||||
|
||||
/**
|
||||
* TODO NN扫描
|
||||
* Class ScanNnService
|
||||
* @package app\services\scan
|
||||
*/
|
||||
class ScanNnService
|
||||
{
|
||||
/**
|
||||
* TODO NN扫描处理
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function doScanNn(array $event, array $tableInfo): array
|
||||
{
|
||||
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
||||
if ($checkScanRes['status'] == false){
|
||||
return $checkScanRes;
|
||||
}else{
|
||||
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
||||
$cardInfo = $checkScanRes['cardInfo'];
|
||||
}
|
||||
// 判断牌是否符合规格
|
||||
if (!isset($event['card']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$card = intval($event['card']);
|
||||
$round = [
|
||||
'card' => $card,
|
||||
'number' => CardPosition::interchangeCard($card),
|
||||
'boot_id' => intval($numberTabInfo['boot_id']),
|
||||
'boot_num' => intval($numberTabInfo['boot_num']),
|
||||
'number_tab_id' => intval($numberTabInfo['id']),
|
||||
'number_tab_number' => intval($numberTabInfo['number'])
|
||||
];
|
||||
if (!$cardInfo){
|
||||
// 没有牌数据,创建并保存
|
||||
$cardInfo = ['card_first' => $card];
|
||||
$cardInfo['player_1_card_1'] = 0;
|
||||
$cardInfo['player_1_card_2'] = 0;
|
||||
$cardInfo['player_1_card_3'] = 0;
|
||||
$cardInfo['player_1_card_4'] = 0;
|
||||
$cardInfo['player_1_card_5'] = 0;
|
||||
$cardInfo['player_2_card_1'] = 0;
|
||||
$cardInfo['player_2_card_2'] = 0;
|
||||
$cardInfo['player_2_card_3'] = 0;
|
||||
$cardInfo['player_2_card_4'] = 0;
|
||||
$cardInfo['player_2_card_5'] = 0;
|
||||
$cardInfo['player_3_card_1'] = 0;
|
||||
$cardInfo['player_3_card_2'] = 0;
|
||||
$cardInfo['player_3_card_3'] = 0;
|
||||
$cardInfo['player_3_card_4'] = 0;
|
||||
$cardInfo['player_3_card_5'] = 0;
|
||||
$cardInfo['banker_card_1'] = 0;
|
||||
$cardInfo['banker_card_2'] = 0;
|
||||
$cardInfo['banker_card_3'] = 0;
|
||||
$cardInfo['banker_card_4'] = 0;
|
||||
$cardInfo['banker_card_5'] = 0;
|
||||
$positionFirst = CardPositionNn::nnPosition($card);
|
||||
$cardInfo['position_first'] = $positionFirst;
|
||||
NumberTab::where(['id' => $numberTabInfo['id']])->update(['position_first' => $positionFirst]);
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = 0;
|
||||
$round['order_num'] = 0;
|
||||
$round['result'] = '';
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
// 判断是否已经存在过相同牌
|
||||
$beforeCard = $cardInfo;
|
||||
//unset($beforeCard['card_first']);
|
||||
unset($beforeCard['position_first']);
|
||||
if(in_array($card,$beforeCard)) return ['status' => false, 'msg' => 'Card Exists'];
|
||||
$cardCountValues = array_count_values($beforeCard);
|
||||
// 获取当前定位
|
||||
if (isset($cardCountValues[0])){
|
||||
$positionNum = 20 - intval($cardCountValues[0]) + 1;
|
||||
} else {
|
||||
$positionNum = 20;
|
||||
}
|
||||
$player1Card[0] = $cardInfo['player_1_card_1'];
|
||||
$player1Card[1] = $cardInfo['player_1_card_2'];
|
||||
$player1Card[2] = $cardInfo['player_1_card_3'];
|
||||
$player1Card[3] = $cardInfo['player_1_card_4'];
|
||||
$player2Card[0] = $cardInfo['player_2_card_1'];
|
||||
$player2Card[1] = $cardInfo['player_2_card_2'];
|
||||
$player2Card[2] = $cardInfo['player_2_card_3'];
|
||||
$player2Card[3] = $cardInfo['player_2_card_4'];
|
||||
$player3Card[0] = $cardInfo['player_3_card_1'];
|
||||
$player3Card[1] = $cardInfo['player_3_card_2'];
|
||||
$player3Card[2] = $cardInfo['player_3_card_3'];
|
||||
$player3Card[3] = $cardInfo['player_3_card_4'];
|
||||
$bankerCard[0] = $cardInfo['banker_card_1'];
|
||||
$bankerCard[1] = $cardInfo['banker_card_2'];
|
||||
$bankerCard[2] = $cardInfo['banker_card_3'];
|
||||
$bankerCard[3] = $cardInfo['banker_card_4'];
|
||||
$resultWord = '';
|
||||
|
||||
$order = CardPositionNn::nnOrder($cardInfo['position_first']);
|
||||
$orderPosition = $positionNum - 1;
|
||||
$position = $order[$orderPosition];
|
||||
$orderNumArr = CardPositionNn::nnOrderNum($cardInfo['position_first']);
|
||||
$orderNum = $orderNumArr[$orderPosition];
|
||||
$cardInfo[$position] = $card;
|
||||
if($positionNum >= 17 && $positionNum <= 20){
|
||||
if($orderNum > 10 && $orderNum < 20){
|
||||
$player1Card[4] = $card;
|
||||
$player1Result = CardPositionNn::JudgeCowCow($player1Card);
|
||||
$resultWord = $player1Result['word'];
|
||||
}
|
||||
if($orderNum > 20 && $orderNum < 30){
|
||||
$player2Card[4] = $card;
|
||||
$player2Result = CardPositionNn::JudgeCowCow($player2Card);
|
||||
$resultWord = $player2Result['word'];
|
||||
}
|
||||
if($orderNum > 30 && $orderNum < 40){
|
||||
$player3Card[4] = $card;
|
||||
$player3Result = CardPositionNn::JudgeCowCow($player3Card);
|
||||
$resultWord = $player3Result['word'];
|
||||
}
|
||||
if($orderNum > 40){
|
||||
$bankerCard[4] = $card;
|
||||
$bankerResult = CardPositionNn::JudgeCowCow($bankerCard);
|
||||
$resultWord = $bankerResult['word'];
|
||||
}
|
||||
}
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = $positionNum;
|
||||
$round['order_num'] = $orderNum;
|
||||
$round['result'] = $resultWord;
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO NN识别处理
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function doScanNnSb(array $event, array $tableInfo): array
|
||||
{
|
||||
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
||||
if ($checkScanRes['status'] == false){
|
||||
return $checkScanRes;
|
||||
}else{
|
||||
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
||||
$cardInfo = $checkScanRes['cardInfo'];
|
||||
}
|
||||
|
||||
// 所有牌须带上位置 (与扫描不同,识别的牌,位置是固定的)
|
||||
if (!isset($event['position']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'Card Position Miss. No Good.'];
|
||||
|
||||
$staticPosition = intval($event['position']);
|
||||
|
||||
// 判断牌是否符合规格
|
||||
if (!isset($event['card']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
|
||||
|
||||
$card = intval($event['card']);
|
||||
|
||||
$round = [
|
||||
'card' => $card,
|
||||
'number' => CardPosition::interchangeCard($card),
|
||||
'boot_id' => intval($numberTabInfo['boot_id']),
|
||||
'boot_num' => intval($numberTabInfo['boot_num']),
|
||||
'number_tab_id' => intval($numberTabInfo['id']),
|
||||
'number_tab_number' => intval($numberTabInfo['number'])
|
||||
];
|
||||
if (!$cardInfo){
|
||||
if ($staticPosition != 0) {
|
||||
return ['status' => false, 'msg' => 'First Card Position Should be 0. No Good.'];
|
||||
}
|
||||
// 没有牌数据,创建并保存
|
||||
$cardInfo = ['card_first' => $card];
|
||||
$cardInfo['player_1_card_1'] = 0;
|
||||
$cardInfo['player_1_card_2'] = 0;
|
||||
$cardInfo['player_1_card_3'] = 0;
|
||||
$cardInfo['player_1_card_4'] = 0;
|
||||
$cardInfo['player_1_card_5'] = 0;
|
||||
$cardInfo['player_2_card_1'] = 0;
|
||||
$cardInfo['player_2_card_2'] = 0;
|
||||
$cardInfo['player_2_card_3'] = 0;
|
||||
$cardInfo['player_2_card_4'] = 0;
|
||||
$cardInfo['player_2_card_5'] = 0;
|
||||
$cardInfo['player_3_card_1'] = 0;
|
||||
$cardInfo['player_3_card_2'] = 0;
|
||||
$cardInfo['player_3_card_3'] = 0;
|
||||
$cardInfo['player_3_card_4'] = 0;
|
||||
$cardInfo['player_3_card_5'] = 0;
|
||||
$cardInfo['banker_card_1'] = 0;
|
||||
$cardInfo['banker_card_2'] = 0;
|
||||
$cardInfo['banker_card_3'] = 0;
|
||||
$cardInfo['banker_card_4'] = 0;
|
||||
$cardInfo['banker_card_5'] = 0;
|
||||
$positionFirst = CardPositionNn::nnPosition($card);
|
||||
$cardInfo['position_first'] = $positionFirst;
|
||||
NumberTab::where(['id' => $numberTabInfo['id']])->update(['position_first' => $positionFirst]);
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = 0;
|
||||
$round['order_num'] = 0;
|
||||
$round['result'] = '';
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
// 判断是否已经存在过相同牌
|
||||
$beforeCard = $cardInfo;
|
||||
//unset($beforeCard['card_first']);
|
||||
unset($beforeCard['position_first']);
|
||||
|
||||
// 识别的允许先提交重复牌,再修改 2024/4/9
|
||||
// if(in_array($card,$beforeCard)) return ['status' => false, 'msg' => 'Card Exists'];
|
||||
|
||||
|
||||
$cardCountValues = array_count_values($beforeCard);
|
||||
// 获取当前定位
|
||||
if (isset($cardCountValues[0])){
|
||||
$positionNum = 20 - intval($cardCountValues[0]) + 1;
|
||||
} else {
|
||||
$positionNum = 20;
|
||||
}
|
||||
$player1Card[0] = $cardInfo['player_1_card_1'];
|
||||
$player1Card[1] = $cardInfo['player_1_card_2'];
|
||||
$player1Card[2] = $cardInfo['player_1_card_3'];
|
||||
$player1Card[3] = $cardInfo['player_1_card_4'];
|
||||
$player2Card[0] = $cardInfo['player_2_card_1'];
|
||||
$player2Card[1] = $cardInfo['player_2_card_2'];
|
||||
$player2Card[2] = $cardInfo['player_2_card_3'];
|
||||
$player2Card[3] = $cardInfo['player_2_card_4'];
|
||||
$player3Card[0] = $cardInfo['player_3_card_1'];
|
||||
$player3Card[1] = $cardInfo['player_3_card_2'];
|
||||
$player3Card[2] = $cardInfo['player_3_card_3'];
|
||||
$player3Card[3] = $cardInfo['player_3_card_4'];
|
||||
$bankerCard[0] = $cardInfo['banker_card_1'];
|
||||
$bankerCard[1] = $cardInfo['banker_card_2'];
|
||||
$bankerCard[2] = $cardInfo['banker_card_3'];
|
||||
$bankerCard[3] = $cardInfo['banker_card_4'];
|
||||
$resultWord = '';
|
||||
|
||||
|
||||
$order = CardPositionNn::nnOrderSb($cardInfo['position_first']);
|
||||
$orderPosition = $positionNum - 1;
|
||||
$position = $order[$orderPosition];
|
||||
$orderNumArr = CardPositionNn::nnOrderNumSb($cardInfo['position_first']);
|
||||
$orderNum = $orderNumArr[$orderPosition];
|
||||
|
||||
if (isset($event['position'])) {
|
||||
if ($staticPosition != 0) {
|
||||
$sbStaticPostion = CardPositionNn::sbStaticCardPosition($staticPosition);
|
||||
if ($position != $sbStaticPostion) {
|
||||
return ['status' => false, 'msg' => 'Card Postion Error. No Good.'];
|
||||
}
|
||||
} else {
|
||||
if ($cardInfo['position_first'] != 0) {
|
||||
return ['status' => false, 'msg' => 'First Card Exist. No Good.'];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$cardInfo[$position] = $card;
|
||||
if($positionNum == 5 || $positionNum == 10 || $positionNum == 15 || $positionNum == 20){
|
||||
if($orderNum > 10 && $orderNum < 20){
|
||||
$player1Card[4] = $card;
|
||||
$player1Result = CardPositionNn::JudgeCowCow($player1Card);
|
||||
$resultWord = $player1Result['word'];
|
||||
}
|
||||
if($orderNum > 20 && $orderNum < 30){
|
||||
$player2Card[4] = $card;
|
||||
$player2Result = CardPositionNn::JudgeCowCow($player2Card);
|
||||
$resultWord = $player2Result['word'];
|
||||
}
|
||||
if($orderNum > 30 && $orderNum < 40){
|
||||
$player3Card[4] = $card;
|
||||
$player3Result = CardPositionNn::JudgeCowCow($player3Card);
|
||||
$resultWord = $player3Result['word'];
|
||||
}
|
||||
if($orderNum > 40){
|
||||
$bankerCard[4] = $card;
|
||||
$bankerResult = CardPositionNn::JudgeCowCow($bankerCard);
|
||||
$resultWord = $bankerResult['word'];
|
||||
}
|
||||
}
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = $positionNum;
|
||||
$round['order_num'] = $orderNum;
|
||||
$round['result'] = $resultWord;
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace app\services\scan;
|
||||
|
||||
use app\models\process\NumberTab;
|
||||
use freedom\utils\CardPosition;
|
||||
use freedom\utils\CardPositionNn;
|
||||
use freedom\utils\CardPositionTc;
|
||||
use freedom\utils\RedisUtil;
|
||||
|
||||
/**
|
||||
* TODO TC扫描
|
||||
* Class ScanTcService
|
||||
* @package app\services\scan
|
||||
*/
|
||||
class ScanTcService
|
||||
{
|
||||
/**
|
||||
* TODO Tc扫描处理
|
||||
* @param array $event
|
||||
* @param array $tableInfo
|
||||
* @return array
|
||||
*/
|
||||
public static function doScanTc(array $event, array $tableInfo): array
|
||||
{
|
||||
$checkScanRes = ScanCommonService::checkScan($event,$tableInfo);
|
||||
if ($checkScanRes['status'] == false){
|
||||
return $checkScanRes;
|
||||
}else{
|
||||
$numberTabInfo = $checkScanRes['numberTabInfo'];
|
||||
$cardInfo = $checkScanRes['cardInfo'];
|
||||
}
|
||||
// 判断牌是否符合规格
|
||||
if (!isset($event['card']) || empty(intval($event['card']))) return ['status' => false, 'msg' => 'CardPosition Unable Distinguish'];
|
||||
$card = intval($event['card']);
|
||||
$round = [
|
||||
'card' => $card,
|
||||
'number' => CardPosition::interchangeCard($card),
|
||||
'boot_id' => intval($numberTabInfo['boot_id']),
|
||||
'boot_num' => intval($numberTabInfo['boot_num']),
|
||||
'number_tab_id' => intval($numberTabInfo['id']),
|
||||
'number_tab_number' => intval($numberTabInfo['number'])
|
||||
];
|
||||
if (!$cardInfo){
|
||||
// 没有牌数据,创建并保存
|
||||
$cardInfo = ['card_first' => $card];
|
||||
$cardInfo['player_1_card_1'] = 0;
|
||||
$cardInfo['player_1_card_2'] = 0;
|
||||
$cardInfo['player_1_card_3'] = 0;
|
||||
$cardInfo['player_2_card_1'] = 0;
|
||||
$cardInfo['player_2_card_2'] = 0;
|
||||
$cardInfo['player_2_card_3'] = 0;
|
||||
$cardInfo['player_3_card_1'] = 0;
|
||||
$cardInfo['player_3_card_2'] = 0;
|
||||
$cardInfo['player_3_card_3'] = 0;
|
||||
$cardInfo['banker_card_1'] = 0;
|
||||
$cardInfo['banker_card_2'] = 0;
|
||||
$cardInfo['banker_card_3'] = 0;
|
||||
$positionFirst = CardPositionNn::nnPosition($card);
|
||||
$cardInfo['position_first'] = $positionFirst;
|
||||
NumberTab::where(['id' => $numberTabInfo['id']])->update(['position_first' => $positionFirst]);
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = 0;
|
||||
$round['order_num'] = 0;
|
||||
$round['result'] = '';
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
// 判断是否已经存在过相同牌
|
||||
$beforeCard = $cardInfo;
|
||||
//unset($beforeCard['card_first']);
|
||||
unset($beforeCard['position_first']);
|
||||
if(in_array($card,$beforeCard)) return ['status' => false, 'msg' => 'Card Exists'];
|
||||
$cardCountValues = array_count_values($beforeCard);
|
||||
// 获取当前定位
|
||||
if (isset($cardCountValues[0])){
|
||||
$positionNum = 12 - intval($cardCountValues[0]) + 1;
|
||||
} else {
|
||||
$positionNum = 12;
|
||||
}
|
||||
$player1Card[0] = $cardInfo['player_1_card_1'];
|
||||
$player1Card[1] = $cardInfo['player_1_card_2'];
|
||||
$player2Card[0] = $cardInfo['player_2_card_1'];
|
||||
$player2Card[1] = $cardInfo['player_2_card_2'];
|
||||
$player3Card[0] = $cardInfo['player_3_card_1'];
|
||||
$player3Card[1] = $cardInfo['player_3_card_2'];
|
||||
$bankerCard[0] = $cardInfo['banker_card_1'];
|
||||
$bankerCard[1] = $cardInfo['banker_card_2'];
|
||||
$resultWord = '';
|
||||
|
||||
$order = CardPositionTc::tcOrder($cardInfo['position_first']);
|
||||
$orderPosition = $positionNum - 1;
|
||||
$position = $order[$orderPosition];
|
||||
$orderNumArr = CardPositionTc::tcOrderNum($cardInfo['position_first']);
|
||||
$orderNum = $orderNumArr[$orderPosition];
|
||||
$cardInfo[$position] = $card;
|
||||
if($positionNum >= 9){
|
||||
if($orderNum > 10 && $orderNum < 20){
|
||||
$player1Card[2] = $card;
|
||||
$player1Result = CardPositionTc::ThredCardCowCow($player1Card);
|
||||
$resultWord = $player1Result['word'];
|
||||
}
|
||||
if($orderNum > 20 && $orderNum < 30){
|
||||
$player2Card[2] = $card;
|
||||
$player2Result = CardPositionTc::ThredCardCowCow($player2Card);
|
||||
$resultWord = $player2Result['word'];
|
||||
}
|
||||
if($orderNum > 30 && $orderNum < 40){
|
||||
$player3Card[2] = $card;
|
||||
$player3Result = CardPositionTc::ThredCardCowCow($player3Card);
|
||||
$resultWord = $player3Result['word'];
|
||||
}
|
||||
if($orderNum > 40){
|
||||
$bankerCard[2] = $card;
|
||||
$bankerResult = CardPositionTc::ThredCardCowCow($bankerCard);
|
||||
$resultWord = $bankerResult['word'];
|
||||
}
|
||||
}
|
||||
RedisUtil::saveCard($numberTabInfo['id'],$cardInfo);
|
||||
$round['tid'] = $tableInfo['id'];
|
||||
$round['number_tab_id'] = $numberTabInfo['id'];
|
||||
$round['position'] = $positionNum;
|
||||
$round['order_num'] = $orderNum;
|
||||
$round['result'] = $resultWord;
|
||||
$round['card_info'] = $cardInfo;
|
||||
if ($numberTabInfo['bet_status'] == 2) {
|
||||
$round['is_scan'] = true;
|
||||
} else {
|
||||
$round['is_scan'] = false;
|
||||
}
|
||||
return ['status' => true, 'msg' => 'Scan Success', 'data' => $round];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user