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]; } }