php斗地主

news/2024/11/17 4:59:22/

php斗地主判断大小,地主规则引入

<?php  //是不是单
function isDan($temp) {if (count($temp) != 1) {return false;} else {return '{"type":"dan","value":"'.$temp[0].'"}';}
}//是不是对
function isDui($temp) {if (count($temp) != 2 || $temp[0] != $temp[1]) {return false;} else {return '{"type":"dui","value":"'.$temp[0]*$temp[1].'"}';}
}//是不是火箭
function isHuojian($temp) {if (count($temp) == 2 && (($temp[0] == 100 && $temp[1] == 99) || ($temp[0] == 99 || $temp[1] == 100))) {return '{"type":"huojian","value":"99999999"}';} else {return false;}
}//是不是三个一样的
function isSan($temp) {if (count($temp) != 3 || ($temp[0] != $temp[1] || $temp[1] != $temp[2])) {return false;} else {return '{"type":"san","value":"'.$temp[0] * $temp[1] * $temp[2].'"}';}
}//是不是炸弹
function isZha($temp) {if (count($temp) != 4 || ($temp[0] != $temp[1] || $temp[1] != $temp[2] || $temp[2] != $temp[3])) {return false;} else {return '{"type":"zhadan","value":"'.$temp[0] * $temp[1] * $temp[2] * $temp[3].'"}';}
}//是不是三带一
function isSandaiyi($temp) {sort($temp);if (count($temp) == 4) {if ($temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] != $temp[3]) {$value = $temp[0] * $temp[1] * $temp[2];return '{"type":"sandaiyi","value":"'.$value.'"}';} else if ($temp[0] != $temp[1] && $temp[1] == $temp[2] && $temp[2] == $temp[3]) {$value = $temp[1] * $temp[2] * $temp[3];return '{"type":"sandaiyi","value":"'.$value.'"}';} else {return false;}} else {return false;}
}//是不是三带二
function isSandaiEr($temp) {sort($temp);if (count($temp) == 5) {if ($temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] != $temp[3] && $temp[3] == $temp[4]) {$value = $temp[0] * $temp[1] * $temp[2];return '{"type":"sandaier","value":"'.$value.'"}';} else if ($temp[0] == $temp[1] && $temp[1] != $temp[2] && $temp[2] == $temp[3] && $temp[3] == $temp[4]) {$value = $temp[2] * $temp[3] * $temp[4];return '{"type":"sandaier","value":"'.$value.'"}';} else {return false;}} else {return false;}
}//是不是顺子
function isShunzi($temp) {if (count($temp) < 5) {return false;}sort($temp);$value = 0;for ($i = 0; $i < count($temp) - 1; $i++) {if ($temp[$i+1] - $temp[$i] != 1) {return false;}$value = $value + $temp[$i];}return '{"type":"shunzi","value":"'.$value.'"}';
}//是不是连对
function isLiandui($temp) {sort($temp);if (count($temp) < 6 || count($temp) % 2 != 0) {return false;}for ($i = 0; $i < count($temp) - 1; $i = $i + 2) {if ($temp[$i] != $temp[$i+1]) {return false;}if ($i < count($temp) - 2) {if ($temp[$i] - $temp[$i+2] != -1) {return false;}}}$value = 0;for ($i = count($temp) - 1; $i >= 0; $i--) {$value = $temp[$i] + $value;}return '{"type":"liandui","value":"'.$value.'"}';
}//是不是飞机带单
function isFeijiDaiDan($temp) {if (count($temp) < 8) {return false;}$arrs = array_count_values($temp);$list = [];foreach ($arrs as $k => $v) {if ($v == 3) {$list[] = $k;}}sort($list);$value = array_product($list);for ($i=0; $i < count($list) - 1; $i++) { if ($list[$i] - $list[$i + 1] != -1) {return false;}}$pokers = count($list) * 3 + count($list);if ($pokers != count($temp)) {return false;}return '{"type":"feijidaidan","value":"'.$value.'"}';
}//是不是飞机带双
function isFeijiDaiShuang($temp) {if (count($temp) < 8) {return false;}$arrs = array_count_values($temp);$list = [];foreach ($arrs as $k => $v) {if ($v == 3) {$list[] = $k;}}sort($list);$value = array_product($list);for ($i=0; $i < count($list) - 1; $i++) { if ($list[$i] - $list[$i + 1] != -1) {return false;}}$pokers = count($list) * 3 + count($list) * 2;if ($pokers != count($temp)) {return false;}$list = [];foreach ($arrs as $k => $v) {if ($v == 2) {$list[] = $k;}}$pokers = count($list);if (count($list) != $pokers) {return false;}return '{"type":"feijidaishuang","value":"'.$value.'"}';
}//是不是飞机不带
function isFeijiBuDai($temp) {sort($temp);if (count($temp) % 3 != 0 || count($temp) < 3) {return false;} else {$value = 0;$index = [];for ($i = 0; $i + 2 < count($temp); $i = $i + 3) {if ($i != count($temp)) {if (!isSan([$temp[$i],$temp[$i+1],$temp[$i+2]])) {return false;}$value = $value + $temp[$i] + $temp[$i + 1] + $temp[$i+2];$index[] = $temp[$i];}}sort($index);for ($i=0; $i < count($index) - 1; $i++) { if ($index[$i] - $index[$i + 1] != -1) {return false;}}return '{"type":"feijibudai","value":"'.$value.'"}';}
}//是不是四带一
function isSiDaiYi($temp) {sort($temp);if (count($temp) == 5 && $temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] == $temp[3]) {$value = $temp[0] + $temp[1] + $temp[2] + $temp[3];return '{"type":"sidaiyi","value":"'.$value.'"}';} else if (count($temp) == 5 && $temp[1] == $temp[2] && $temp[2] == $temp[3] && $temp[3] == $temp[4]) {$value = $temp[1] + $temp[2] + $temp[3] + $temp[4];return '{"type":"sidaiyi","value":"'.$value.'"}';} else {return false;}}//是不是四带二
function isSiDaiEr($temp) {sort($temp);if (count($temp) == 6 && $temp[0] == $temp[1] && $temp[1] == $temp[2] && $temp[2] == $temp[3]) {$value = $temp[0] + $temp[1] + $temp[2] + $temp[3];return '{"type":"sidaier","value":"'.$value.'"}';} else if (count($temp) == 6 && $temp[1] == $temp[2] && $temp[2] == $temp[3] && $temp[3] == $temp[4]) {$value = $temp[2] + $temp[3] + $temp[4] + $temp[5];return '{"type":"sidaier","value":"'.$value.'"}';} else {return false;}
}//检测牌型
function checkpokers($temp) {if (empty($temp)) {return false;}if (isDan($temp)) {return isDan($temp);} else if (isDui($temp)) {return isDui($temp);} else if (isHuojian($temp)) {return isHuojian($temp);} else if (isSan($temp)) {return isSan($temp);} else if (isZha($temp)) {return isZha($temp);} else if (isSandaiyi($temp)) {return isSandaiyi($temp);} else if (isShunzi($temp)) {return isShunzi($temp);} else if (isLiandui($temp)) {return isLiandui($temp);} else if (isFeijiBuDai($temp)) {return isFeijiBuDai($temp);} else if (isSiDaiYi($temp)) {return isSiDaiYi($temp);} else if (isSiDaiEr($temp)) {return isSiDaiEr($temp);} else if (isSandaiEr($temp)) {return isSandaiEr($temp);} else if (isFeijiDaiDan($temp)) {return isFeijiDaiDan($temp);} else if (isFeijiDaiShuang($temp)){return isFeijiDaiShuang($temp);} else {return false;}}//检测牌的大小
function checkdaxiao($round_type, $res)
{if ($round_type->type == 'huojian') {return true;}if ($res->type == 'zhadan') {if ($round_type->type == 'huojian') {return false;} else {return true;}}if ($round_type->type == $res->type && $res->value > $round_type->value) {return true;}return false;
}

斗地主数据结构, 大厅 & 房间 & 游戏 汇总信息

<?php/*** 大厅 & 房间 & 游戏汇总信息*///房间信息数组
$GLOBALS['rooms'] = [];//大厅座位详情数组 请不要在意这些细节
$GLOBALS['hall'] = ['DZ-1A'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-1B'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off', 'user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-1C'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-1D'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off', 'user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-1E'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-2A'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-2B'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-2C'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-2D'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-2E'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-3A'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-3B'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-3C'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-3D'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-3E'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-4A'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-4B'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-4C'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-4D'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],'DZ-4E'  =>  ['user_a'=>'off','user_b'=>'off','user_c'=>'off','status'=>'off','pokers'=>[],'whosturn'=>'','dizhu'=>'','whospoker' => 'off','game_double'=>1,'round_type'=>'off','user_a_id'=>'off','user_b_id'=>'off','user_c_id'=>'off','user_a_status'=>'空闲','user_b_status'=>'空闲','user_c_status'=>'空闲','user_a_pokers'=>'','user_b_pokers'=>'','user_c_pokers'=>'','user_a_nick'=>'off','user_b_nick'=>'off','user_c_nick'=>'off','user_a_identity'=>'off','user_b_identity'=>'off','user_c_identity'=>'off'],
];/*** 扑克牌数组 后缀:1代表黑桃 2代表红桃 3代表梅花 4代表方块*/
$GLOBALS['poker_list'] = ['Joker1'    =>     100,'Joker2'    =>     99,'TWO_1'     =>     20,'TWO_2'     =>     20,'TWO_3'     =>     20,'TWO_4'     =>     20,'A_1'       =>     14,'A_2'       =>     14,'A_3'       =>     14,'A_4'       =>     14,'K_1'       =>     13,'K_2'       =>     13,'K_3'       =>     13,'K_4'       =>     13,'Q_1'       =>     12,'Q_2'       =>     12,'Q_3'       =>     12,'Q_4'       =>     12,'J_1'       =>     11,'J_2'       =>     11,'J_3'       =>     11,'J_4'       =>     11,'TEN_1'     =>     10,'TEN_2'     =>     10,'TEN_3'     =>     10,'TEN_4'     =>     10,'NINE_1'    =>     9,'NINE_2'    =>     9,'NINE_3'    =>     9,'NINE_4'    =>     9,'EIGHT_1'   =>     8,'EIGHT_2'   =>     8,'EIGHT_3'   =>     8,'EIGHT_4'   =>     8,'SEVEN_1'   =>     7,'SEVEN_2'   =>     7,'SEVEN_3'   =>     7,'SEVEN_4'   =>     7,'SIX_1'     =>     6,'SIX_2'     =>     6,'SIX_3'     =>     6,'SIX_4'     =>     6,'FIVE_1'    =>     5,'FIVE_2'    =>     5,'FIVE_3'    =>     5,'FIVE_4'    =>     5,'FOUR_1'    =>     4,'FOUR_2'    =>     4,'FOUR_3'    =>     4,'FOUR_4'    =>     4,'THREE_1'   =>     3,'THREE_2'   =>     3,'THREE_3'   =>     3,'THREE_4'   =>     3,
];

分数结算 房间重置方法


/*** 分数结算 房间重置方法*///用户赢了加场数
function updateuserwin($uid)
{$mysql = new mysqlDb();$mysql->query("update user_games set user_ddzwin = user_ddzwin + 1 where uid = $uid");
}//用户输了加场数
function updateuserlose($uid)
{$mysql = new mysqlDb();$mysql->query("update user_games set user_ddzlose = user_ddzlose + 1 where uid = $uid");
}//获取用户胜率
function getuserwinlose($uid)
{$mysql = new mysqlDb();$sql = "select * from user_games where uid = $uid";$res = $mysql->getRow($sql);if ($res['user_ddzwin'] + $res['user_ddzlose'] != 0) {$res = $res['user_ddzwin'] / ($res['user_ddzwin'] + $res['user_ddzlose']);$res = round($res, 2) * 100;} else {$res = 0;}return $res;
}/*** 房间重置方法* @param  [string] $roomid [传入房间ID]*/
function resetRoom($roomid)
{$GLOBALS['hall'][$roomid]['pokers'] = [];$GLOBALS['hall'][$roomid]['status'] = 'off';$GLOBALS['hall'][$roomid]['whosturn'] = '';$GLOBALS['hall'][$roomid]['game_double'] = 1;$GLOBALS['hall'][$roomid]['whospoker'] = '';$GLOBALS['hall'][$roomid]['round_type'] = 'off';$GLOBALS['hall'][$roomid]['user_a_pokers'] = [];$GLOBALS['hall'][$roomid]['user_b_pokers'] = [];$GLOBALS['hall'][$roomid]['user_c_pokers'] = [];$GLOBALS['hall'][$roomid]['user_a_status'] = '空闲';$GLOBALS['hall'][$roomid]['user_b_status'] = '空闲';$GLOBALS['hall'][$roomid]['user_c_status'] = '空闲';$GLOBALS['hall'][$roomid]['user_a_identity'] = 'off';$GLOBALS['hall'][$roomid]['user_b_identity'] = 'off';$GLOBALS['hall'][$roomid]['user_c_identity'] = 'off';
}/*** [游戏结束 结算方法]* @param  [string] $roomid     [房间的ID]* @param  [string] $identity   [传入出完牌玩家的身份 ]* @param  [string] $type       [可选参数 是否有人逃跑 ]* @return [array]              [返回输赢数组]*/
function gameOver($roomid, $identity, $type = [])
{   $win = [];  $lose = [];//如果是有人逃跑 直接返回结果if (isset($type['ranout'])) {resetRoom($roomid);return ['win'=>$win,'lose'=>[$GLOBALS['hall'][$roomid]['user_a_nick']], 'ranout'=>$type['ranout']];}if ($identity == '地主') {if ($GLOBALS['hall'][$roomid]['user_a_identity'] == '地主') {$win[] = $GLOBALS['hall'][$roomid]['user_a_nick'];updateuserwin($GLOBALS['hall'][$roomid]['user_a_id']);}if ($GLOBALS['hall'][$roomid]['user_b_identity'] == '地主') {$win[] = $GLOBALS['hall'][$roomid]['user_b_nick'];updateuserwin($GLOBALS['hall'][$roomid]['user_b_id']);}if ($GLOBALS['hall'][$roomid]['user_c_identity'] == '地主') {$win[] = $GLOBALS['hall'][$roomid]['user_c_nick'];updateuserwin($GLOBALS['hall'][$roomid]['user_c_id']);}if ($GLOBALS['hall'][$roomid]['user_a_identity'] == '农民') {$lose[] = [$GLOBALS['hall'][$roomid]['user_a_nick'], $GLOBALS['hall'][$roomid]['user_a_pokers']];updateuserlose($GLOBALS['hall'][$roomid]['user_a_id']);}if ($GLOBALS['hall'][$roomid]['user_b_identity'] == '农民') {$lose[] = [$GLOBALS['hall'][$roomid]['user_b_nick'], $GLOBALS['hall'][$roomid]['user_b_pokers']];updateuserlose($GLOBALS['hall'][$roomid]['user_b_id']);}if ($GLOBALS['hall'][$roomid]['user_c_identity'] == '农民') {$lose[] = [$GLOBALS['hall'][$roomid]['user_c_nick'], $GLOBALS['hall'][$roomid]['user_c_pokers']];updateuserlose($GLOBALS['hall'][$roomid]['user_c_id']);}} else if ($identity == '农民') {if ($GLOBALS['hall'][$roomid]['user_a_identity'] == '地主') {$lose[] = [$GLOBALS['hall'][$roomid]['user_a_nick'], $GLOBALS['hall'][$roomid]['user_a_pokers']];updateuserlose($GLOBALS['hall'][$roomid]['user_a_id']);}if ($GLOBALS['hall'][$roomid]['user_b_identity'] == '地主') {$lose[] = [$GLOBALS['hall'][$roomid]['user_b_nick'], $GLOBALS['hall'][$roomid]['user_b_pokers']];updateuserlose($GLOBALS['hall'][$roomid]['user_b_id']);}if ($GLOBALS['hall'][$roomid]['user_c_identity'] == '地主') {$lose[] = [$GLOBALS['hall'][$roomid]['user_c_nick'], $GLOBALS['hall'][$roomid]['user_c_pokers']];updateuserlose($GLOBALS['hall'][$roomid]['user_c_id']);}if ($GLOBALS['hall'][$roomid]['user_a_identity'] == '农民') {$win[] = $GLOBALS['hall'][$roomid]['user_a_nick'];updateuserwin($GLOBALS['hall'][$roomid]['user_a_id']);}if ($GLOBALS['hall'][$roomid]['user_b_identity'] == '农民') {$win[] = $GLOBALS['hall'][$roomid]['user_b_nick'];updateuserwin($GLOBALS['hall'][$roomid]['user_b_id']);}if ($GLOBALS['hall'][$roomid]['user_c_identity'] == '农民') {$win[] = $GLOBALS['hall'][$roomid]['user_c_nick'];updateuserwin($GLOBALS['hall'][$roomid]['user_c_id']);}}$pokers = ['user_a_pokers' => $GLOBALS['hall'][$roomid]['user_a_pokers'],'user_b_pokers' => $GLOBALS['hall'][$roomid]['user_b_pokers'],'user_c_pokers' => $GLOBALS['hall'][$roomid]['user_c_pokers'],];//重置房间所有属性resetRoom($roomid);//返回胜负数据给玩家return ['win'=>$win,'lose'=>$lose,'pokers'=>$pokers];
}

监听用户连接大厅事件

/*** 监听用户连接大厅事件*/
$serv->on('Open', function($server, $req) {$id = $req->fd;$GLOBALS['fds'][] = $id;
});

服务器监听用户动作

<?php/*** 服务器监听用户动作*/$serv->on('Message', function($server, $frame) {//推送用户在线列表if ($frame->data == 'getonlines') {foreach ($GLOBALS['fds'] as $v) {$server->push($v, 'pulllist'.json_encode($GLOBALS['userlist']));}//新进用户加入列表} else if (substr($frame->data, 0, 8) == 'mystatus') {$info = json_decode(substr($frame->data, 8));$GLOBALS['userlist'][$frame->fd] = $info;//推送大厅座位情况} else if (substr($frame->data, 0, 10) == 'tableinfos') {foreach ($GLOBALS['fds'] as $v) {$server->push($v, 'pulltables'.json_encode($GLOBALS['hall']));}//推送是否允许坐下} else if (substr($frame->data, 0, 8) == 'seatdown') {$info = json_decode(substr($frame->data, 8));if ($GLOBALS['hall'][$info->table][$info->seat] == 'off') {$server->push($frame->fd, 'seatdown'.'ok');} else {$server->push($frame->fd, 'seatdown'.'no');}//将加入房间的玩家信息更新到数组} else if (substr($frame->data, 0, 11) == 'getroominfo') {//写入用户状态信息$info = json_decode(substr($frame->data, 11));$GLOBALS['hall'][$info->roomid][$info->seatid] = $frame->fd;$GLOBALS['hall'][$info->roomid][$info->seatid.'_nick'] = $info->user_nick;$GLOBALS['hall'][$info->roomid][$info->seatid.'_status'] = $info->mystatus;$GLOBALS['hall'][$info->roomid][$info->seatid.'_id'] = $info->uid;$GLOBALS['hall'][$info->roomid][$info->seatid.'_point'] = getuserwinlose($info->uid);//如果房间数组不存在,初始化if (!isset($GLOBALS['rooms'][$info->roomid])) {$GLOBALS['rooms'][$info->roomid] = [];}//判断是重新开局还是新进玩家$isreopen = false;foreach ($GLOBALS['rooms'][$info->roomid] as $v) {if ($v['fd'] == $frame->fd) {$isreopen = true;break;}            }//判断加入房间的是第几个 并加入游戏顺序if ($isreopen == false) {if (count($GLOBALS['rooms'][$info->roomid]) == 0) {$GLOBALS['rooms'][$info->roomid][0] = ['fd'=>$frame->fd,'nick'=>$info->user_nick];} else if (count($GLOBALS['rooms'][$info->roomid]) == 1) {$GLOBALS['rooms'][$info->roomid][1] = ['fd'=>$frame->fd,'nick'=>$info->user_nick];} else if (count($GLOBALS['rooms'][$info->roomid]) == 2) {$GLOBALS['rooms'][$info->roomid][2] = ['fd'=>$frame->fd,'nick'=>$info->user_nick];}}//广播到该房间所有的用户 广播到全局$fd1 = $GLOBALS['hall'][$info->roomid]['user_a'];$fd2 = $GLOBALS['hall'][$info->roomid]['user_b'];$fd3 = $GLOBALS['hall'][$info->roomid]['user_c'];foreach ($GLOBALS['fds'] as $v) {$server->push($v, 'pulltables'.json_encode($GLOBALS['hall']));if ($v == $fd3 || $v == $fd1 || $v == $fd2) {$server->push($v, 'freshorder'.json_encode([$GLOBALS['rooms'][$info->roomid],$GLOBALS['hall'][$info->roomid]]));}}$server->push($frame->fd, 'roomchat'.'{"nick":"系统消息","msg":"欢迎来到世界上最Low的在线斗地主!"}');//改变准备状态} else if (substr($frame->data, 0, 15) == 'pushreadystatus') {// 等待 || 准备if (substr($frame->data, 15, 2) == 'ok') {$info = json_decode(substr($frame->data, 17));$GLOBALS['hall'][$info->roomid][$info->seatid.'_status'] = '准备';$GLOBALS['userlist'][$frame->fd]->status = '准备';} else if (substr($frame->data, 15, 2) == 'no') {$info = json_decode(substr($frame->data, 17));$GLOBALS['hall'][$info->roomid][$info->seatid.'_status'] = '等待';$GLOBALS['userlist'][$frame->fd]->status = '等待';$GLOBALS['hall'][$info->roomid]['status'] = 'off';}//刷新房间内信息变动if (isset($info)) {$fd1 = $GLOBALS['hall'][$info->roomid]['user_a'];$fd2 = $GLOBALS['hall'][$info->roomid]['user_b'];$fd3 = $GLOBALS['hall'][$info->roomid]['user_c'];//如果三个人状态都在准备中 推送开始游戏消息if ($GLOBALS['hall'][$info->roomid]['user_a_status'] == '准备' && $GLOBALS['hall'][$info->roomid]['user_b_status'] == '准备' &&$GLOBALS['hall'][$info->roomid]['user_c_status'] == '准备') {//初始化房间数据resetRoom($info->roomid);//修改游戏状态 并且推送$GLOBALS['hall'][$info->roomid]['user_a_status'] = '游戏中';$GLOBALS['hall'][$info->roomid]['user_b_status'] = '游戏中';$GLOBALS['hall'][$info->roomid]['user_c_status'] = '游戏中';//更新游戏胜率$GLOBALS['userlist'][$fd1]->point = getuserwinlose($GLOBALS['userlist'][$fd1]->uid);$GLOBALS['userlist'][$fd2]->point = getuserwinlose($GLOBALS['userlist'][$fd2]->uid);$GLOBALS['userlist'][$fd3]->point = getuserwinlose($GLOBALS['userlist'][$fd3]->uid);//更新游戏状态$GLOBALS['userlist'][$fd1]->status = '游戏中';$GLOBALS['userlist'][$fd2]->status = '游戏中';$GLOBALS['userlist'][$fd3]->status = '游戏中';$GLOBALS['hall'][$info->roomid]['status'] = 'on';$server->push($fd1, 'gostartgame'.json_encode([$GLOBALS['rooms'][$info->roomid],$GLOBALS['hall'][$info->roomid]]));$server->push($fd2, 'gostartgame'.json_encode([$GLOBALS['rooms'][$info->roomid],$GLOBALS['hall'][$info->roomid]]));$server->push($fd3, 'gostartgame'.json_encode([$GLOBALS['rooms'][$info->roomid],$GLOBALS['hall'][$info->roomid]]));}//大厅座位信息广播到全局 用户列表刷新foreach ($GLOBALS['rooms'][$info->roomid] as $v) {$server->push($v['fd'], 'freshorder'.json_encode([$GLOBALS['rooms'][$info->roomid],$GLOBALS['hall'][$info->roomid]]));}}//广播房间准备状态到全局foreach ($GLOBALS['fds'] as $v) {$server->push($v, 'pulllist'.json_encode($GLOBALS['userlist']));$server->push($v, 'pulltables'.json_encode($GLOBALS['hall']));}//广播房间内的消息} else if (substr($frame->data, 0, 8) == 'roomchat') {$info = json_decode(substr($frame->data, 8));foreach ($GLOBALS['rooms'][$info->roomid] as $v) {$server->push($v['fd'], 'roomchat'.substr($frame->data, 8));}//广播全局聊天} else if (substr($frame->data, 0, 9) == 'publicmsg') {foreach ($GLOBALS['fds'] as $v) {$server->push($v, $frame->data);}//接受确认游戏的信息并推送对局初始化    } else if (substr($frame->data, 0,8) == 'letsplay') {$info = json_decode(substr($frame->data, 8));if (count($GLOBALS['hall'][$info->roomid]['pokers']) == 0) {$GLOBALS['hall'][$info->roomid]['pokers'] = $GLOBALS['poker_list'];}//发牌$pokers = array_rand($GLOBALS['hall'][$info->roomid]['pokers'], 17);foreach ($pokers as $k => $v) {foreach ($GLOBALS['hall'][$info->roomid]['pokers'] as $a => $s) {if ($v == $a) {unset($GLOBALS['hall'][$info->roomid]['pokers'][$a]);}}}$GLOBALS['hall'][$info->roomid][$info->seatid.'_pokers'] = $pokers;$temp = [];foreach ($pokers as $a => $s) {$temp[] = ['poker'=>$s, 'value'=>$GLOBALS['poker_list'][$s]];}$server->push($GLOBALS['hall'][$info->roomid][$info->seatid], 'fapaile'.json_encode($temp));//第一顺位玩家初始化顺位if ($GLOBALS['rooms'][$info->roomid][0]['fd'] == $frame->fd) {//初始化顺位$GLOBALS['hall'][$info->roomid]['whosturn'] = 0;$waiting = 'waiting'.'{"nick":"'.$GLOBALS['rooms'][$info->roomid][0]['nick'].'"}';//让顺位0用户开始叫地主$server->push($GLOBALS['rooms'][$info->roomid][0]['fd'], 'jiaobujiao');//其它两个用户开始等待$server->push($GLOBALS['rooms'][$info->roomid][1]['fd'], $waiting);$server->push($GLOBALS['rooms'][$info->roomid][2]['fd'], $waiting);}//用户放弃叫地主事件} else if (substr($frame->data, 0,8) == 'wobujiao') {$info = json_decode(substr($frame->data, 8));$GLOBALS['hall'][$info->roomid][$info->seatid.'_identity'] = '不叫';//如果三个人都不叫 则重新发牌if ($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不叫' &&$GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不叫' &&$GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不叫') {//重置房间resetRoom($info->roomid);//循环广播重开游戏事件foreach ($GLOBALS['rooms'][$info->roomid] as $v) {$server->push($v['fd'], 'nobodystandup');}//否则开始下一位叫牌    } else {//刷新出牌次序if ($GLOBALS['hall'][$info->roomid]['whosturn'] == count($GLOBALS['rooms'][$info->roomid]) - 1) {$GLOBALS['hall'][$info->roomid]['whosturn'] = 0;} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $GLOBALS['hall'][$info->roomid]['whosturn'] + 1;}//拿到下一位$turn = $GLOBALS['hall'][$info->roomid]['whosturn'];$waiting = 'waiting'.'{"nick":"'.$GLOBALS['rooms'][$info->roomid][$turn]['nick'].'"}';//推送叫牌给下一位foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {if ($turn == $k) {$server->push($v['fd'], 'jiaobujiao');}$server->push($v['fd'], 'tabujiao'.$info->nick);$server->push($v['fd'], $waiting);}}//有人叫地主} else if (substr($frame->data, 0,6) == 'wojiao') {$info = json_decode(substr($frame->data, 6));$GLOBALS['hall'][$info->roomid][$info->seatid.'_identity'] = '叫地主';//如果已经有两个人不叫了 他叫他就是地主if ($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不叫' && $GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不叫') {$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$info->nick);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_c_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else if ($GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不叫' && $GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不叫') {$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$info->nick);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_a_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else if ($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不叫' && $GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不叫'){$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$info->nick);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_b_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}//开始抢地主} else {//刷新叫次序if ($GLOBALS['hall'][$info->roomid]['whosturn'] == count($GLOBALS['rooms'][$info->roomid]) - 1) {$GLOBALS['hall'][$info->roomid]['whosturn'] = 0;} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $GLOBALS['hall'][$info->roomid]['whosturn'] + 1;}//拿到下一位$turn = $GLOBALS['hall'][$info->roomid]['whosturn'];$waiting = 'waiting'.'{"nick":"'.$GLOBALS['rooms'][$info->roomid][$turn]['nick'].'"}';//推送抢地主给下一位foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {if ($turn == $k) {$server->push($v['fd'], 'qiangbuqiang');}//告诉所有人他叫了,等待下一位$server->push($v['fd'], 'tajiaole'.$info->nick);$server->push($v['fd'], $waiting);}}//不抢地主} else if (substr($frame->data, 0,9) == 'wobuqiang') {$info = json_decode(substr($frame->data, 9));//如果叫地主的人不抢了 第一个抢地主的人就是地主if ($GLOBALS['hall'][$info->roomid][$info->seatid.'_identity'] == '叫地主') {//找出第一个叫地主的人foreach ($GLOBALS['hall'][$info->roomid] as $k => $v) {if ($v === '抢地主') {//取得地主昵称$nick = $GLOBALS['hall'][$info->roomid][substr($k, 0, 6).'_nick'];//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$nick);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['nick'] != $nick) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$nick.'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}break;}}//继续判断} else {$GLOBALS['hall'][$info->roomid][$info->seatid.'_identity'] = '不抢';//如果已经有两个人不抢也不叫地主了 那么剩下一个人就是地主 if (($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不抢' || $GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_c_identity'] == '叫地主' ||$GLOBALS['hall'][$info->roomid]['user_c_identity'] == '抢地主')) {$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$GLOBALS['hall'][$info->roomid]['user_c_nick']);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_c_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else if (($GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不叫') && ($GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不抢' || $GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '叫地主' ||$GLOBALS['hall'][$info->roomid]['user_a_identity'] == '抢地主')) {$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$GLOBALS['hall'][$info->roomid]['user_a_nick']);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_a_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else if (($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_b_identity'] == '叫地主' ||$GLOBALS['hall'][$info->roomid]['user_b_identity'] == '抢地主')){$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$GLOBALS['hall'][$info->roomid]['user_b_nick']);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_b_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else {//刷新抢次序if ($GLOBALS['hall'][$info->roomid]['whosturn'] == count($GLOBALS['rooms'][$info->roomid]) - 1) {$GLOBALS['hall'][$info->roomid]['whosturn'] = 0;} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $GLOBALS['hall'][$info->roomid]['whosturn'] + 1;}$turn = $GLOBALS['hall'][$info->roomid]['whosturn'];$waiting = 'waiting'.'{"nick":"'.$GLOBALS['rooms'][$info->roomid][$turn]['nick'].'"}';//推送抢地主给下一位foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {if ($turn == $k) {$server->push($v['fd'], 'qiangbuqiang');}//告诉所有人他抢了,等待下一位$server->push($v['fd'], 'tabuqiang'.$info->nick);$server->push($v['fd'], $waiting);}}}//抢地主} else if (substr($frame->data, 0,7) == 'woqiang') {$info = json_decode(substr($frame->data, 7));$GLOBALS['hall'][$info->roomid]['game_double'] = $GLOBALS['hall'][$info->roomid]['game_double'] * 2;//如果叫地主的人在抢地主了 那么地主就是他if ($GLOBALS['hall'][$info->roomid][$info->seatid.'_identity'] == '叫地主') {$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '农民';$GLOBALS['hall'][$info->roomid][$info->seatid.'_identity'] = '地主';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$GLOBALS['hall'][$info->roomid][$info->seatid.'_nick']);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid][$info->seatid].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}//继续判断} else {$GLOBALS['hall'][$info->roomid][$info->seatid.'_identity'] = '抢地主';//如果已经有两个人不抢也不叫了 谁抢谁就是地主if (($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不抢' || $GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_c_identity'] == '叫地主' ||$GLOBALS['hall'][$info->roomid]['user_c_identity'] == '抢地主')) {$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$GLOBALS['hall'][$info->roomid]['user_c_nick']);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_c_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else if (($GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_b_identity'] == '不叫') && ($GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不抢' || $GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '叫地主' ||$GLOBALS['hall'][$info->roomid]['user_a_identity'] == '抢地主')) {$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$GLOBALS['hall'][$info->roomid]['user_a_nick']);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_a_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else if (($GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_a_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不抢' ||$GLOBALS['hall'][$info->roomid]['user_c_identity'] == '不叫') &&($GLOBALS['hall'][$info->roomid]['user_b_identity'] == '叫地主' ||$GLOBALS['hall'][$info->roomid]['user_b_identity'] == '抢地主')){$GLOBALS['hall'][$info->roomid]['user_b_identity'] = '地主';$GLOBALS['hall'][$info->roomid]['user_a_identity'] = '农民';$GLOBALS['hall'][$info->roomid]['user_c_identity'] = '农民';//通知地主他是地主 通知对手等待他出牌foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {$server->push($v['fd'], 'dizhuis'.$GLOBALS['hall'][$info->roomid]['user_b_nick']);$server->push($v['fd'], 'sanzhang'.json_encode($GLOBALS['hall'][$info->roomid]['pokers']));if ($v['fd'] != $frame->fd) {$server->push($v['fd'], 'waiting'.'{"nick":"'.$GLOBALS['hall'][$info->roomid]['user_b_nick'].'"}');} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $k;}}} else {//刷新抢次序if ($GLOBALS['hall'][$info->roomid]['whosturn'] == count($GLOBALS['rooms'][$info->roomid]) - 1) {$GLOBALS['hall'][$info->roomid]['whosturn'] = 0;} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $GLOBALS['hall'][$info->roomid]['whosturn'] + 1;}//拿到下一位次序$turn = $GLOBALS['hall'][$info->roomid]['whosturn'];//拿到下一位昵称$next_nick = $GLOBALS['rooms'][$info->roomid][$turn]['nick'];//拼接等待字符串$waiting = 'waiting'.'{"nick":"'.$next_nick.'"}';//推送抢地主给下一位foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {if ($turn == $k) {$server->push($v['fd'], 'qiangbuqiang');}//告诉所有人他抢了,等待下一位$server->push($v['fd'], 'taqiangle'.$info->nick);$server->push($v['fd'], $waiting);}}}//我出牌} else if (substr($frame->data, 0,8) == 'wochupai') {$info = json_decode(substr($frame->data, 8), true);//拿到扑克数组$pokers = $info['pokers'][0];//取得完整扑克键值对$temp = [];//取得值$numbers = [];foreach ($pokers as $k => $v) {$temp[] = ['poker'=>$v,'value'=>$GLOBALS['poker_list'][$v]];$numbers[] = $GLOBALS['poker_list'][$v];}//判断是什么牌型$res = checkpokers($numbers);//如果牌型正确 继续操作if ($res != false) {$res = json_decode($res);$round_type = $GLOBALS['hall'][$info['roomid']]['round_type'];if ($GLOBALS['hall'][$info['roomid']]['round_type'] == 'off' || checkdaxiao($round_type, $res) ||$GLOBALS['hall'][$info['roomid']]['whospoker'] == $info['nick'] || $res->type == 'huojian') {$server->push($frame->fd, 'chupaiok'.json_encode($pokers));//标记最后出牌的人是谁$GLOBALS['hall'][$info['roomid']]['whospoker'] = $info['nick'];//保存这一手的类型$GLOBALS['hall'][$info['roomid']]['round_type'] = $res;foreach ($pokers as $r) {foreach ($GLOBALS['hall'][$info['roomid']][$info['seatid'].'_pokers'] as $k => $v) {if ($v == $r) {array_splice($GLOBALS['hall'][$info['roomid']][$info['seatid'].'_pokers'], $k, 1);}}}//如果玩家还有牌 游戏继续if (count($GLOBALS['hall'][$info['roomid']][$info['seatid'].'_pokers']) > 0) {//刷新出牌次序if ($GLOBALS['hall'][$info['roomid']]['whosturn'] == count($GLOBALS['rooms'][$info['roomid']]) - 1) {$GLOBALS['hall'][$info['roomid']]['whosturn'] = 0;} else {$GLOBALS['hall'][$info['roomid']]['whosturn'] = $GLOBALS['hall'][$info['roomid']]['whosturn'] + 1;}//拿到下一位次序$turn = $GLOBALS['hall'][$info['roomid']]['whosturn'];//拿到下一位昵称$next_nick = $GLOBALS['rooms'][$info['roomid']][$turn]['nick'];//拼接等待字符串$waiting = 'waiting'.'{"nick":"'.$next_nick.'"}';foreach ($GLOBALS['rooms'][$info['roomid']] as $k => $v) {//广播是谁出的$server->push($v['fd'], 'lasthand'.$info['nick']);//告诉所有人他出了 广播牌队列$server->push($v['fd'], 'chulepai'.json_encode($temp));//等待下一位$server->push($v['fd'], $waiting);}//推送出牌给下一位foreach ($GLOBALS['rooms'][$info['roomid']] as $k => $v) {if ($turn == $k) {$server->push($v['fd'], 'chupaile');}}//如果玩家没有牌了 结束游戏} else {//调用计分结算方法 返回win和lose数组$res = gameOver($info['roomid'], $GLOBALS['hall'][$info['roomid']][$info['seatid'].'_identity']);//广播结算到整个房间 修改玩家状态foreach($GLOBALS['rooms'][$info['roomid']] as $v) {$GLOBALS['userlist'][$v['fd']]->status = '等待';$server->push($v['fd'], 'gameover'.json_encode($res));$server->push($v['fd'],'freshorder'.json_encode([$GLOBALS['rooms'][$info['roomid']],$GLOBALS['hall'][$info['roomid']]]));}//广播房间准备状态到全局foreach ($GLOBALS['fds'] as $v) {$server->push($v, 'pulllist'.json_encode($GLOBALS['userlist']));$server->push($v, 'pulltables'.json_encode($GLOBALS['hall']));}}}}//我不出牌} else if (substr($frame->data, 0, 7) == 'wobuchu') {$info = json_decode(substr($frame->data, 7));//刷新出次序if ($GLOBALS['hall'][$info->roomid]['whosturn'] == count($GLOBALS['rooms'][$info->roomid]) - 1) {$GLOBALS['hall'][$info->roomid]['whosturn'] = 0;} else {$GLOBALS['hall'][$info->roomid]['whosturn'] = $GLOBALS['hall'][$info->roomid]['whosturn'] + 1;}//拿到下一位次序$turn = $GLOBALS['hall'][$info->roomid]['whosturn'];//拿到下一位昵称$next_nick = $GLOBALS['rooms'][$info->roomid][$turn]['nick'];//拼接等待字符串$waiting = 'waiting'.'{"nick":"'.$next_nick.'"}';//推送不出牌给下一位foreach ($GLOBALS['rooms'][$info->roomid] as $k => $v) {if ($turn == $k) {$server->push($v['fd'], 'chupaile');}//告诉所有人他不出,等待下一位$server->push($v['fd'], 'tabuchu'.$info->nick);$server->push($v['fd'], $waiting);}} else if (substr($frame->data, 0, 7) == '') {$info = json_decode(substr($frame->data, 7));}});

监听用户断开连接事件

<?php/*** 监听用户断开连接事件*/
$serv->on('Close', function($server, $fd) {//将用户从在线列表移除unset($GLOBALS['userlist'][$fd]);//将用户从连接池移除foreach ($GLOBALS['fds'] as $k => $v) {if ($v == $fd) {unset($GLOBALS['fds'][$k]);shuffle($GLOBALS['fds']);}}//将用户从房间游戏顺序列表移除 顺便获取房间IDforeach ($GLOBALS['rooms'] as $k => $v) {foreach ($v as $u => $y) {if ($y['fd'] == $fd) {unset($GLOBALS['rooms'][$k][$u]);shuffle($GLOBALS['rooms'][$k]);//如果座位A是我if ($GLOBALS['hall'][$k]['user_a'] == $fd) {//如果在游戏时间逃跑 马上结算游戏if ($GLOBALS['hall'][$k]['status'] == 'on') {$res = gameOver($k, $GLOBALS['hall'][$k]['user_a_identity'], ['ranout'=>$GLOBALS['hall'][$k]['user_a_nick']]);//游戏结束消息广播到整个房间 更新用户状态foreach ($GLOBALS['rooms'][$k] as $q) {$GLOBALS['userlist'][$q['fd']]->status = '等待';$server->push($q['fd'], 'gameover'.json_encode($res));}}//座位信息初始化$GLOBALS['hall'][$k]['user_a'] = 'off';$GLOBALS['hall'][$k]['user_a_nick'] = 'off';$GLOBALS['hall'][$k]['user_a_status'] = 'off';$GLOBALS['hall'][$k]['user_a_identity'] = 'off';$GLOBALS['hall'][$k]['user_a_pokers'] = '';$GLOBALS['hall'][$k]['round_type'] = 'off';//更新座位信息到全局foreach ($GLOBALS['rooms'][$k] as $e) {$server->push($e['fd'], 'freshorder'.json_encode([$GLOBALS['rooms'][$k],$GLOBALS['hall'][$k]]));}//如果座位B是我} else if ($GLOBALS['hall'][$k]['user_b'] == $fd) {//如果在游戏时间逃跑 马上结算游戏if ($GLOBALS['hall'][$k]['status'] == 'on') {$res = gameOver($k, $GLOBALS['hall'][$k]['user_b_identity'], ['ranout'=>$GLOBALS['hall'][$k]['user_b_nick']]);//游戏结束消息广播到整个房间 更新用户状态foreach ($GLOBALS['rooms'][$k] as $q) {$GLOBALS['userlist'][$q['fd']]->status = '等待';$server->push($q['fd'], 'gameover'.json_encode($res));}}$GLOBALS['hall'][$k]['user_b'] = 'off';$GLOBALS['hall'][$k]['user_b_nick'] = 'off';$GLOBALS['hall'][$k]['user_b_status'] = 'off';$GLOBALS['hall'][$k]['user_b_identity'] = 'off';$GLOBALS['hall'][$k]['user_b_pokers'] = '';$GLOBALS['hall'][$k]['round_type'] = 'off';foreach ($GLOBALS['rooms'][$k] as $e) {$server->push($e['fd'], 'freshorder'.json_encode([$GLOBALS['rooms'][$k],$GLOBALS['hall'][$k]]));}//如果座位C是我} else if ($GLOBALS['hall'][$k]['user_c'] == $fd) {//如果在游戏时间逃跑 马上结算游戏if ($GLOBALS['hall'][$k]['status'] == 'on') {$res = gameOver($k, $GLOBALS['hall'][$k]['user_c_identity'], ['ranout'=>$GLOBALS['hall'][$k]['user_c_nick']]);//游戏结束消息广播到整个房间 更新用户状态foreach ($GLOBALS['rooms'][$k] as $q) {$GLOBALS['userlist'][$q['fd']]->status = '等待';$server->push($q['fd'], 'gameover'.json_encode($res));}}$GLOBALS['hall'][$k]['user_c'] = 'off';$GLOBALS['hall'][$k]['user_c_nick'] = 'off';$GLOBALS['hall'][$k]['user_c_status'] = 'off';$GLOBALS['hall'][$k]['user_c_identity'] = 'off';$GLOBALS['hall'][$k]['user_c_pokers'] = '';$GLOBALS['hall'][$k]['round_type'] = 'off';foreach ($GLOBALS['rooms'][$k] as $e) {$server->push($e['fd'], 'freshorder'.json_encode([$GLOBALS['rooms'][$k],$GLOBALS['hall'][$k]]));}}}}}//向大厅的所有用户推送最新的在线人数 和 大厅座位情况foreach ($GLOBALS['fds'] as $v) {//推送玩家列表更新$server->push($v, 'pulllist'.json_encode($GLOBALS['userlist']));//推送大厅信息更新$server->push($v, 'pulltables'.json_encode($GLOBALS['hall']));}});

http://www.ppmy.cn/news/583562.html

相关文章

java 记牌_(笔记)JAVA--集合实现斗地主洗牌、发牌、看牌(利用TreeSet排序)

创建HashMap&#xff0c;键是编号&#xff0c;值是牌 创建ArrayList&#xff0c;存储编号 创建花色数组和点数数组 从0开始往HashMap里面存储编号&#xff0c;并存储对应的牌。同时往ArrayList里面存储编号 洗牌(洗的是编号)&#xff0c;用Collections的shuffle()方法实现 发牌…

斗地主+三人+叫地主+作弊(可设置)+积分属性+记牌器(可设置)

斗地主+三人+叫地主+作弊(可设置)+积分属性+记牌器(可设置) 版权声明原作品版权声明本文版权声明一、相关文章二、新增功能记牌器 RecordCards类设置记牌 SetRecordCards类三、运行展示四、代码代码框架其余代码PlayWithLandlord_CallPoints_NoTip_HasBP_Record_V1RecordCa…

python 实现记牌器原理

python 实现记牌器原理 方案一&#xff08;减牌记牌&#xff09;方案二&#xff08;增牌记牌&#xff09;字典Update更新初学者常见报错问题 方案一&#xff08;减牌记牌&#xff09; 假设与这“333445667788QQJ”十五张牌&#xff0c;每人五张牌 a "333445667788QQJ&quo…

基于opencv2的斗地主记牌器(python)

一、开发该系统软件环境及使用的技术说明 开发环境&#xff1a;JetBrains PyCharm Community Edition 2019.2.5 x64远端仓库&#xff1a;GitHub语言版本&#xff1a;python3.7.0(Anaconda3)技术说明&#xff1a; OpenCV 4.2.0.32NumPy 1.16.5PyQt5 5.15.0PyWinMouse 1.0 &…

安卓基于图像识别和CNN做出一个通用的斗地主记牌器(一)

先放一个效果图&#xff0c;如下&#xff1a; 设计的主体思路&#xff1a; 1.图像的快速截取 2.图像的预处理 3.识别模型的设计和训练 4.图像匹配 5.业务逻辑的实现 其中&#xff0c;图像处理主要是基于安卓版opencv。识别模型是基于cnn神经网络。 难点 1.粘连图像的分…

因果推断阶段系列23[阶段2-5]----元学习器 meta-learners

因果推断阶段系列23[阶段2-5]----元学习器meta-learners 1. S-Learner(又名稳定学习器)2. T-Learner(T学习器)3. X-Learner(X学习器)小结参考文献简要回顾一下,前几节介绍了处理效应异质性,即确定不同个体对处理的反应方式。在这个框架中,估计对象是: τ ( x ) = E […

2023年第一届山东省职业技能大赛“网络安全”赛项B模块任务书

2023年第一届山东省职业技能大赛“网络安全”赛项B模块任务书 模块B-网络安全事件响应、数字取证调查和应用程序安全1竞赛项目简介:1.1 介绍:1.2 所需的设备、机械、装置和材料:1.3 评分方案:1.4 项目和任务的描述:2工作任务:2.1.1 数据包分析:2.1.2 Web 安全测试渗透测…