Skip to content

Commit

Permalink
Merge pull request #2 from betacompany/develop
Browse files Browse the repository at this point in the history
New points system
  • Loading branch information
ortemij committed Jun 17, 2014
2 parents f083c8d + 2e940f7 commit 0318598
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 61 deletions.
28 changes: 2 additions & 26 deletions classes/Match.php
Original file line number Diff line number Diff line change
Expand Up @@ -145,30 +145,6 @@ public function getStakes() {
return Stake::getByMatchId($this->getId());
}

public function getScoreForTotal() {
return 4;
}

public function getScoreForDiff() {
return 2;
}

public function getScoreForDrawNear() {
return 2;
}

public function getScoreForDrawFar() {
return 1;
}

public function getScoreForResult() {
return 1;
}

public function getScoreForInvalid() {
return 0;
}

public function finish($score1, $score2) {
mysql_qw('UPDATE `total_matches` SET `score1`=?, `score2`=?, `played`=1 WHERE `id`=?', $score1, $score2, $this->getId());
$this->score1 = $score1;
Expand Down Expand Up @@ -237,9 +213,9 @@ public static function getAvailable() {
return $data;
}

public static function getPlayed() {
public static function getPlayed($limit) {
$data = array();
$req = mysql_qw('SELECT `id` FROM `total_matches` WHERE `played`=1 ORDER BY `timestamp` DESC, `id` ASC LIMIT 20');
$req = mysql_qw('SELECT `id` FROM `total_matches` WHERE `played`=1 ORDER BY `timestamp` DESC, `id` ASC LIMIT ' . $limit);
while ($match = mysql_fetch_assoc($req)) {
try {
$data[] = new Match($match['id']);
Expand Down
41 changes: 23 additions & 18 deletions classes/Stake.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,41 +101,46 @@ private function setScore($value) {
}

public function finish(Match $match) {
$score = 0;

$real_score1 = $match->getScore1();
$real_score2 = $match->getScore2();
$want_score1 = $this->getScore1();
$want_score2 = $this->getScore2();

if ($real_score1 == $want_score1 && $real_score2 == $want_score2) {
// score guessed
$score = $match->getScoreForTotal();
} else if ($real_score1 == $real_score2 && $want_score1 == $want_score2) {
// draw guessed
$score = 4;
} else if ($real_score1 - $real_score2 == $want_score1 - $want_score2) {
// difference guessed
if (abs($real_score1 - $want_score1) <= 1) {
// near
$score = $match->getScoreForDrawNear();
$score = 2;
} else {
// far
$score = $match->getScoreForDrawFar();
$score = 1;
}
} else if ($real_score1 - $real_score2 == $want_score1 - $want_score2) {
// difference guessed
$score = $match->getScoreForDiff();
} else if (($real_score1 > $real_score2 && $want_score1 > $want_score2) || ($real_score1 < $real_score2 && $want_score1 < $want_score2)
} else if ($real_score1 - $real_score2 >= 2
&& $want_score1 - $want_score2 >= 2
&& ($real_score1 == $want_score1 && abs($real_score2 - $want_score2) <= 1
|| $real_score2 == $want_score2 && abs($real_score1 - $want_score1) <= 1)
) {
// winner guessed
$score = $match->getScoreForResult();

// winner goals number guessed
if (($real_score1 == $want_score1 && $real_score1 > $real_score2) || ($real_score2 == $want_score2 && $real_score2 > $real_score1)
if ($real_score1 - $real_score2 >= 3 &&
$want_score1 - $want_score2 >= 3 &&
max($real_score1, $real_score2) >=4 &&
max($want_score1, $want_score2) >=4
) {
$score += 1;
// almost guessed completely crushing victory
$score = 3;
} else {
// almost guessed convincing/confident (?) victory
$score = 2;
}
} else if (($real_score1 > $real_score2 && $want_score1 > $want_score2)
|| ($real_score1 < $real_score2 && $want_score1 < $want_score2)) {
//winner guessed
$score = 1;
} else {
// nothing guessed
$score = $match->getScoreForInvalid();
$score = 0;
}

$this->setScore($score);
Expand Down
21 changes: 20 additions & 1 deletion cpanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
<?
$matches = Match::getActive();
foreach ($matches as $match) {
?>
?>
<option value="<?= $match->getId() ?>"><?= $match->getName() ?></option>
<?
}
Expand All @@ -90,6 +90,25 @@
<input type="submit" value="Завершить">
</form>

<h1>Пересчитать матч</h1>

<form id="recalc_match" action="/cpanel_proc.php">
<input type="hidden" name="action" value="recalc_match"/>

<select name="match_id">
<?
$matches = Match::getPlayed(100);
foreach ($matches as $match) {
?>
<option value="<?= $match->getId() ?>"><?= $match->getName() ?></option>
<?
}
?>
</select> <br/>

<input type="submit" value="Пересчитать">
</form>

<h1>Импортировать ставки</h1>

<h3>Формат файла:</h3>
Expand Down
13 changes: 13 additions & 0 deletions cpanel_proc.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,19 @@
echo $e->getMessage();
}
break;

case 'recalc_match':
try {
$match = new Match($_REQUEST['match_id']);
$stakes = $match->getStakes();
foreach ($stakes as $stake) {
$stake->finish($match);
}
} catch (Exception $e) {
echo $e->getMessage();
}
break;

case 'import_stakes':
try {
$file = $_FILES['stakes_file'];
Expand Down
9 changes: 9 additions & 0 deletions css/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,12 @@ form {
text-align: center;
color: #ccc;
}

/* as in bootstrap 3.1.1 */
.alert-danger .alert-link {
color: #843534;
}

.alert .alert-link {
font-weight: 700;
}
Binary file added img/stakes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion processor.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ function filter($all, $type) {
$matches = Match::getActive();
break;
case 'played':
$matches = Match::getPlayed();
$matches = Match::getPlayed(20);
break;
}

Expand Down
52 changes: 37 additions & 15 deletions rules.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,35 +50,57 @@
После выполнения ставки на матч, а также после начала матча все
сделанные ставки доступны для просмотра пользователям.
</li>
<li>
Ставки на матчи плей-офф принимаются без учёта пенальти: т.е. на основное (90 минут),
или в случае такового на дополнительное время (120 минут).
</li>
<li>
За угаданные результаты игроки получают рейтинговые очки по следующей схеме:
<ul>
<li>
<b>4 очка</b> &mdash; за полностью угаданный результат матча.
<b>4 очка</b> &mdash; если угадан точный счет матча.
</li>
<li>
<b>2 очка</b> &mdash; за угаданную разницу забитых/пропущенных мячей
при угаданном победителе.
<b>2 очка</b> &mdash; если угадан исход и «близкая» разница мячей. То есть:
<ul>
<li>угадан исход матча (победа/ничья/поражение) и разница голов в матче;</li>
<li>количество голов каждой из команд и в ставке и результате матча отличаются на единицу в любую сторону.</li>
</ul>
<div>Пример 1: результат матча 4:2</div>
<div>Ставка 3:1 = 2 очка, ставка 5:3 = 2 очка, ставка 2:0 = 1 очко, ставка 6:4 = 1 очко.</div>
</li>
<li>
<b>2 очка</b> &mdash; за угаданное количество мячей, забитых победителем,
при угаданном победителе.
<b>2 очка</b> &mdash; если угадана «близкая» и «уверенная» победа одной из команд. То есть:
<ul>
<li>угадан победитель матча;</li>
<li>и в ставке и по результатам матча одна из команд одержала победу с преимуществом в 2 и более мячей;</li>
<li>количество голов одной из команд угадано точно, а другой – отличается на единицу в любую сторону.</li>
</ul>
<div>Пример 1: результат матча 3:1.</div>
<div>Ставка 4:1 = 2 очка, ставка 3:2 = 1 очко, ставка 5:1 = 1 очко.</div>
<div>Пример 2: результат матча 3:0.</div>
<div>Ставка 2:0 = 2 очка, ставка 3:1 = 2 очка, ставка 4:0 = 2 очка, ставка 3:2 = 1 очко.</div>
</li>
<li>
<b>2 очка</b> &mdash; за близко угаданную ничью. Т.е. при ставке на
N:N игрок получает эти очки в случаях, если результат матча был
(N+1):(N+1) или (N-1):(N-1).
<b>3 очка</b> &mdash; если угадана «близкая» и «разгромная» победа одной из команд. То есть:
<ul>
<li>угадан победитель матча;</li>
<li>и в ставке и по результатам матча одна из команд одержала победу с преимуществом в 3 и более мячей;</li>
<li>количество голов победившей команды и в ставке и по результатам матча больше или равно 4;</li>
<li>количество голов одной из команд угадано точно, а другой – отличается на единицу в любую сторону.</li>
</ul>
<div>Пример: результат матча 4:1.</div>
<div>Ставка 4:0 = 3 очка, ставка 5:1 = 3 очка, ставка 3:0 = 2 очка, ставка 5:0 = 1 очко.</div>
</li>

<li>
<b>1 очко</b> &mdash; во всех остальных случаях при угаданном исходе матча
(угаданном победителе или далеко угаданной ничье).
<b>1 очко</b> &mdash; во всех остальных случаях при угаданном исходе матча.
</li>
</ul>
</li>
<li>
Ставки на матчи плей-офф принимаются без учёта пенальти: т.е. на основное (90 минут),
или в случае такового на дополнительное время (120 минут).
<div>
Для удобства ниже представлена таблица некоторых счетов,
где на пересечении ставки и результата матча стоит количество очков.
</div>
<img src="img/stakes.png" alt="Таблица очков за ставки"/>
</li>
</ol>
</div>
Expand Down
8 changes: 8 additions & 0 deletions templates/menu.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,11 @@
</div>
</div>
</div>
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<strong>Внимание!</strong>
Правила <a href="/rules.php" class="alert-link">изменились</a>
и были применены ко всем матчам, начиная с матча "Уругвай vs Коста Рика".
Извините, что мы вас так разыграли :(
</div>

0 comments on commit 0318598

Please sign in to comment.