예제 #1
0
파일: GBApi.php 프로젝트: nirkbirk/site
 public static function searchForGames($query, $limit = 10)
 {
     self::validateApiKey();
     //Change these if we need to include more stuff.
     $fieldArr = ['id', 'name', 'original_release_date', 'image', 'api_detail_url', 'deck', 'image', 'platforms'];
     //sanitise query
     $query = trim(preg_replace('/ +/', ' ', preg_replace('/[^A-Za-z0-9 ]/', ' ', urldecode(html_entity_decode(strip_tags($query))))));
     //generate url
     $url = self::$gb . 'games?api_key=' . self::$apikey . '&format=json' . self::formatFieldList($fieldArr) . '&limit=' . $limit . '&filter=platforms:17|94|152,name:' . $query;
     //Limit to Mac, PC, Linux respectively.
     try {
         $json = self::makeApiCall($url);
     } catch (Exception $e) {
         throw new GBApiException('Error contacting Giantbomb. Please try again later.');
     }
     //QueryDb and try to find the object using the giantbomb unique id
     if ($json->results == null || count($json->results) < 1) {
         throw new GBApiException('No results found. Please try another search.');
     }
     $games = [];
     //initialise as empty array
     foreach ($json->results as $result) {
         $game = GamesQuery::create()->findOneByGbId($result->id);
         if ($game == null) {
             if (!isset($result->original_release_date) || $result->original_release_date == null) {
                 continue;
             }
             //skip if not out yet.
             $game = new Games();
             $game->setGbId($result->id);
             $game->setName(Games::generateUniqueName($result->name, $result->original_release_date));
             $game->setGbUrl($result->api_detail_url);
             $game->setTitle($result->name);
             $game->setDescription($result->deck);
             //We don't care if they don't have thumbs. Catch the exceptions and move on
             try {
                 $game->setGbThumb($result->image->screen_url);
             } catch (Exception $e) {
             }
             try {
                 $game->setGbImage($result->image->medium_url);
             } catch (Exception $e) {
             }
             $game->save();
         }
         //append result to list.
         array_push($games, $game);
     }
     return $games;
 }
예제 #2
0
 public function showUpdateGame()
 {
     $game = new Games();
     $game->name = 'Assassins Creed';
     $game->description = 'Assassins VS tamplars.';
     $game->save();
     $game = new Games();
     $game->name = 'Assassins Creed 2';
     $game->description = 'Assassins VS tamplars.';
     $game->save();
     $game = new Games();
     $game->name = 'Assassins Creed 3';
     $game->description = 'Assassins VS tamplars.';
     $game->save();
 }
예제 #3
0
 /**
  * 
  * 创建对局。
  */
 public function actionCreate()
 {
     $this->needlogin();
     if (Yii::app()->request->getParam('submit')) {
         $useblack = intval(Yii::app()->request->getParam('useblack'));
         $days = intval(Yii::app()->request->getParam('days'));
         $hours = intval(Yii::app()->request->getParam('hours'));
         $rule = Yii::app()->request->getParam('rule');
         $free_opening = intval(Yii::app()->request->getParam('free_open'));
         if (!in_array($rule, Yii::app()->params['rules'])) {
             $rule = Yii::app()->params['rules'][0];
         }
         $comment = trim(Yii::app()->request->getParam('comment'));
         $game_time = $days * 24 + $hours;
         if ($game_time < 1) {
             $game_time = 1;
         }
         if ($game_time > Yii::app()->params['max_hours']) {
             //如果设置了大于30天的时间,那么就直接设置为30天。
             $game_time = Yii::app()->params['max_hours'];
         }
         $game = new Games();
         $game->black_id = $useblack ? $this->_userinfo()->id : 0;
         $game->white_id = $useblack ? 0 : $this->_userinfo()->id;
         $game->status = '未开始';
         $game->rule = $rule;
         $game->free_opening = $free_opening;
         $game->game_record = '';
         $game->black_time = $game_time * 3600;
         //记录秒数
         $game->white_time = $game_time * 3600;
         $game->totaltime = $game_time;
         $game->swap = 0;
         $game->a5_pos = '';
         $game->a5_numbers = $rule == 'RIF' ? 2 : 0;
         $game->updtime = date('Y-m-d H:i:s');
         $game->comment = $comment;
         $game->create_time = date('Y-m-d H:i:s');
         if ($game->save()) {
             $this->redirect('/home.html');
         }
     }
     $waiting_games = Games::model()->findAll("black_id<>{$this->_userinfo()->id} and white_id<>{$this->_userinfo()->id} and status='未开始' order by id desc limit 10");
     $this->pageTitle = '新建棋局-' . Yii::app()->params['title'];
     $this->currmenu = 'creategame';
     $this->render('create', array('games' => $waiting_games));
 }
예제 #4
0
파일: name_test.php 프로젝트: nirkbirk/site
<pre>
<?php 
$start = "It's good to yell at people and tell people that you're from Tennesee, so that way you'll be safe. The best way to communicate is compatible. Compatible communication is listening with open ears and an open mind, and not being fearful or judgemental about what you're hearing.\t";
require_once "res/include.php";
echo "start";
echo "<br/>";
$name = Games::generateUniqueName($start, "2010");
echo $name;
$game = new Games();
$game->setName($name);
$game->save();
echo "<br/>";
$name = Games::generateUniqueName($start, "2010");
echo $name;
echo "<br/>";
echo "end";
?>
</pre>
예제 #5
0
 /**
  * Импортирует игры из xml фида партнерки в базу данных
  * @return страница с результатами
  */
 public function actionImport()
 {
     //получаем список всех жанров
     $types = Types::model()->findAll();
     //ищем все сохраненные игры (их id)
     $existingIds = Games::model()->getExistingIds();
     $errors = array();
     $results = '';
     //обработка команды
     if (isset($_POST['import'])) {
         libxml_use_internal_errors(true);
         //загружаем xml фид
         $xml = simplexml_load_file(Yii::app()->user->xml);
         if (!$xml) {
             $errors = libxml_get_errors();
         } else {
             $i = 0;
             //парсинг фида
             foreach ($xml->result->ITEM as $game) {
                 //если эта игра уже сохранена...
                 if (in_array($game->ID, $existingIds)) {
                     //...переходим к следующей
                     continue;
                 }
                 //создаем новую игру
                 $newGame = new Games();
                 //заполняем атрибуты
                 $newGame->g_id = $game->ID;
                 $newGame->g_rate = $game->RATE;
                 $newGame->g_name_url = $game->NAME_URL;
                 $newGame->g_type = $game->TYPE;
                 $newGame->g_added = $game->ADDED;
                 $newGame->g_size = $game->SIZE;
                 $newGame->g_name = $game->NAME;
                 $newGame->g_medium_pic = $game->MEDIUM_PIC;
                 $newGame->g_small_pic = $game->SMALL_PIC;
                 $newGame->g_download_link = $game->DOWNLOAD_LINK;
                 $newGame->g_shortdescr = $game->SHORTDESCR;
                 $newGame->g_fulldescr = $game->FULLDESCR;
                 $newGame->g_publish_date = date('Y-m-d', time());
                 $newGame->g_state = Games::PUBLISHED;
                 //записываем массив со скриншотами
                 foreach ($game->SCREENSHOT as $sh) {
                     $newGame->g_screenshots[] = $sh;
                 }
                 //разбираем поле с жанрами
                 foreach ($types as $type) {
                     if ($newGame->g_type & $type['t_id']) {
                         $newGame->g_types[] = $type['t_id'];
                     }
                 }
                 //сохраняем игру в БД
                 //сохранение скриншотов и жанров выполняетя в Games::afterSave()
                 if (!$newGame->save()) {
                     $errors[] = 'Не могу сохранить игру id = ' . $newGame->g_id;
                 } else {
                     $i++;
                 }
             }
             $results = 'Сохранено новых игр ' . $i;
         }
     }
     //показываем форму
     $this->render('import', array('xml' => Yii::app()->user->xml, 'errors' => $errors, 'results' => $results));
 }
예제 #6
0
 public static function setUpTournament($tournament)
 {
     Yii::app()->cache->delete(self::CACHE_PREFIX . $tournament->id);
     //start transaction
     $conn = Tournament_join::model()->getDbConnection();
     try {
         $transaction = $conn->beginTransaction();
         $joined = Tournament_join::model()->findAll("tid={$tournament->id}");
         $tournament->player_joined = count($joined);
         $uids = array();
         foreach ($joined as $v) {
             $uids[$v->t_sn] = $v->uid;
         }
         if ($tournament->player_joined >= $tournament->player_limit) {
             $tournament->status = 'playing';
             $games = self::generate_games($uids, $tournament->t_kind);
             foreach ($games as $oppo) {
                 $game = new Games();
                 $game->black_id = $oppo[0];
                 $game->white_id = $oppo[1];
                 $game->status = '进行中';
                 $game->rule = $tournament->rule;
                 $game->free_opening = $tournament->free_opening;
                 $game->game_record = '';
                 $game->black_time = $tournament->total_time * 3600;
                 //记录秒数
                 $game->white_time = $tournament->total_time * 3600;
                 $game->totaltime = $tournament->total_time;
                 $game->swap = 0;
                 $game->a5_pos = '';
                 $game->a5_numbers = $tournament->rule == 'RIF' ? 2 : 0;
                 $game->updtime = date('Y-m-d H:i:s');
                 $game->movetime = date('Y-m-d H:i:s');
                 $game->comment = '比赛:' . $tournament->title;
                 $game->tid = $tournament->id;
                 $game->create_time = date('Y-m-d H:i:s');
                 $game->save();
             }
         }
         $tournament->save();
         $transaction->commit();
     } catch (Exception $e) {
         echo $e->getMessage();
         $transaction->rollBack();
     }
 }
예제 #7
0
파일: BoardTool.php 프로젝트: xsir317/5zer
 /**
  * 
  * 结束棋局,设置棋局状态,结算分数。
  * @param Games $game
  * @param int $result  1黑胜  0.5和棋   0 白胜
  */
 public static function do_over($game, $result)
 {
     if ($game->status != '进行中') {
         return false;
     }
     $moves = strlen($game->game_record) / 2;
     switch ($result) {
         case 1:
             $game->bplayer->b_win++;
             $game->wplayer->w_lose++;
             $game->status = '黑胜';
             break;
         case 0:
             $game->bplayer->b_lose++;
             $game->wplayer->w_win++;
             $game->status = '白胜';
             break;
         case 0.5:
             $game->bplayer->draw++;
             $game->wplayer->draw++;
             $game->status = '和棋';
             break;
     }
     $game->bplayer->games++;
     $game->wplayer->games++;
     $game->movetime = date('Y-m-d H:i:s');
     $game->save();
     //对局量前50局,K值取30,然后,一般取20-15之间,等级分达到2400后K值取10 TODO
     //惩罚性规则:如果手数小于16,则变动系数K降为5,如果手数小于5,则降为1。
     $k_black = 30;
     $k_white = 30;
     if ($game->bplayer->games >= 50) {
         $k_black = 16;
     }
     if ($game->wplayer->games >= 50) {
         $k_white = 16;
     }
     if ($game->bplayer->score >= 2400) {
         $k_black = 10;
     }
     if ($game->wplayer->score >= 2400) {
         $k_white = 10;
     }
     if ($moves < 5) {
         $k_black = 1;
         $k_white = 1;
     }
     $before_black_score = $game->bplayer->score;
     $before_white_score = $game->wplayer->score;
     $we = 1 / (1 + pow(10, ($before_white_score - $before_black_score) / 400));
     $delta_black = $k_black * ($result - $we);
     /*记录积分变动log*/
     $log = new Score_log();
     $log->game_id = $game->id;
     $log->player_id = $game->black_id;
     $log->op_id = $game->white_id;
     $log->before_score = $before_black_score;
     $log->op_score = $before_white_score;
     $log->k_val = $k_black;
     $log->delta_score = $delta_black;
     $log->after_score = $before_black_score + $delta_black;
     $log->save();
     /*记录积分变动log end */
     $game->bplayer->score = $log->after_score;
     //$game->bplayer->score + $delta_black;
     $game->bplayer->save();
     $delta_white = -1 * $k_white * ($result - $we);
     /*记录积分变动log*/
     $log = new Score_log();
     $log->game_id = $game->id;
     $log->player_id = $game->white_id;
     $log->op_id = $game->black_id;
     $log->before_score = $before_white_score;
     $log->op_score = $before_black_score;
     $log->k_val = $k_white;
     $log->delta_score = $delta_white;
     $log->after_score = $before_white_score + $delta_white;
     $log->save();
     /*记录积分变动log end */
     $game->wplayer->score = $log->after_score;
     //$game->wplayer->score + $delta_white;
     $game->wplayer->save();
     //如果是比赛,调用一下比赛结束
     if ($game->tid) {
         TournamentTool::end_tournament($game->tid);
     }
 }
예제 #8
0
파일: game.php 프로젝트: vuong93st/w-game
    $attachment->rename_file = "game-" . md5($time_stamp);
    //$attachment->description = trim($vals['title']);
    if (!empty($id)) {
        $attachment->rename_file = "game-" . md5($id);
    }
    if (!empty($pid)) {
        $vals['product_id'] = $pid;
    }
    if (!empty($_FILES['attach']['name'])) {
        $attachment->upload_process();
        $vals['attachment_id'] = $attachment->id;
        $vals['title'] = $attachment->file_name;
    }
    if (!empty($id)) {
        $vals['modified'] = $time_stamp;
        $result = $game->save($vals, "update", $id);
    } else {
        $vals['created'] = $vals['modified'] = $time_stamp;
        $result = $game->save($vals);
    }
    if (!$result) {
        flash();
    }
}
if (isset($_REQUEST['del']) && !empty($_REQUEST['id'])) {
    $deleted = false;
    $deleted = $game->del($_REQUEST['id']);
}
if (isset($_POST['do'])) {
    $do = trim($_POST['do']);
    if ($do == "save_standardtype") {
예제 #9
0
 /**
  * 
  * 根据一个已经被接受的invite生成相应棋局。返回该棋局的id
  * @param Game_invite $game_invite
  * @return int game_id
  */
 private function create_game($game_invite)
 {
     $game = new Games();
     $game->black_id = $game_invite->black_id;
     $game->white_id = $game_invite->black_id == $game_invite->from ? $game_invite->to : $game_invite->from;
     $game->status = '进行中';
     $game->rule = $game_invite->rule;
     $game->free_opening = $game_invite->free_opening;
     $game->game_record = '';
     $game->black_time = $game_invite->totaltime * 3600;
     //记录秒数
     $game->white_time = $game_invite->totaltime * 3600;
     $game->totaltime = $game_invite->totaltime;
     $game->swap = 0;
     $game->a5_pos = '';
     $game->a5_numbers = $game_invite->rule == 'RIF' ? 2 : 0;
     $game->updtime = date('Y-m-d H:i:s');
     $game->movetime = date('Y-m-d H:i:s');
     $game->comment = $game_invite->message;
     $game->create_time = date('Y-m-d H:i:s');
     $game->save();
     return $game->id;
 }