/** * * 落子提交。 * str_split 分割坐标 */ public function actionMove() { if (!$this->_userinfo()) { $this->redirect('/?refer=' . urlencode(Yii::app()->request->getRequestUri())); } //如果没有参数,跳回play界面。 $id = intval(Yii::app()->request->getParam('id')); $swap = intval(Yii::app()->request->getParam('swap')); $move = trim(Yii::app()->request->getParam('move')); $a5pos = trim(Yii::app()->request->getParam('a5pos')); $a5number = intval(Yii::app()->request->getParam('a5number')); $game = Games::model()->findByPk($id); if (!$id || !$game) { $this->redirect('/games.html'); } $turn = $this->turn($game); $game_addr = '/game_' . $id . '.html?_rnd=' . time(); if ($game->status == '进行中' && $this->refresh_time($game) && $this->_userinfo()->id == ($turn ? $game->black_id : $game->white_id)) { $stones = strlen($game->game_record) / 2; if ($turn) { if ($game->game_record == '') { if (strlen($move) != 6) { $this->page_msg('请下开局前3手。', $game_addr); } if (!BoardTool::board_correct($move)) { $this->page_msg('您提交的数据不正确,请刷新页面重试。', $game_addr); } if ($game->free_opening == 0) { if (substr($move, 0, 2) != '88' || !in_array(substr($move, 2, 1), array('7', '8', '9')) || !in_array(substr($move, 3, 1), array('7', '8', '9')) || !in_array(substr($move, 4, 1), array('6', '7', '8', '9', 'a')) || !in_array(substr($move, 5, 1), array('6', '7', '8', '9', 'a'))) { $this->page_msg('非标准的开局,请重新开局。', $game_addr); } } if ($game->rule == 'Yamaguchi') { if (!$a5number) { $this->page_msg('请输入打点数量。', $game_addr); } $game->a5_numbers = $a5number > 20 ? 20 : $a5number; } $game->game_record = $move; } elseif ($stones == 4 && $game->a5_pos == '') { if (strlen($a5pos) / 2 != $game->a5_numbers) { $this->page_msg('请下' . $game->a5_numbers . '个打点。', $game_addr); } if (!BoardTool::board_correct($game->game_record . $a5pos)) { $this->page_msg('您提交的数据不正确,请刷新页面重试。', $game_addr); } if (BoardTool::a5_symmetry($game->game_record, $a5pos)) { $this->page_msg('五手打点不可以对称,请重新选择。', $game_addr); } $game->a5_pos = $a5pos; } else { $game->game_record .= $move; if (strlen($move) != 2 || !BoardTool::board_correct($game->game_record)) { $this->page_msg('您提交的数据不正确,请刷新页面重试。', $game_addr); } // 判断胜负 $this->checkwin($game); } } else { if ($stones == 3 && $swap && !$game->swap) { $temp = $game->black_id; $game->black_id = $game->white_id; $game->white_id = $temp; $temp = $game->black_time; $game->black_time = $game->white_time; $game->white_time = $temp; $game->swap = 1; } else { if ($stones == 4) { if (!in_array($a5pos, str_split($game->a5_pos, 2))) { $this->page_msg('请选择黑方的打点。', $game_addr); } $game->game_record .= $a5pos; } $game->game_record .= $move; if (strlen($move) != 2 || !BoardTool::board_correct($game->game_record)) { $this->page_msg('您提交的数据不正确,请刷新页面重试。', $game_addr); } // 判断胜负 $this->checkwin($game); } } $game->offer_draw = 0; $game->movetime = date('Y-m-d H:i:s'); $game->save(); } $this->redirect($game_addr); }