forked from extesy/foosball
-
Notifications
You must be signed in to change notification settings - Fork 0
/
profile.php
123 lines (107 loc) · 4.02 KB
/
profile.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
function getMinMax($array, $isMax)
{
$target = $isMax ? max($array) : min($array);
foreach ($array as $key => $value) {
if ($value == $target) {
return $key;
}
}
return null;
}
function profile($id)
{
$games = file_get_contents('games.log');
$games = explode("\n", $games);
$stats = array(
'games' => 0,
'wins' => 0,
'losses' => 0,
'wins_goalee' => 0,
'losses_goalee' => 0,
'wins_midfield' => 0,
'losses_midfield' => 0,
'skunk_wins' => 0,
'skunk_losses' => 0,
'best_partner' => 0,
'worst_partner' => 0,
'best_opponent' => 0,
'worst_opponent' => 0,
'winning_score' => 0,
'losing_score' => 0,
);
$partners = array();
$opponents = array();
$scores = array();
$winningStreak = $losingStreak = $currentStreak = 0;
$lastResult = null;
foreach ($games as $game) {
if (empty($game)) {
continue;
}
$game = explode("\t", $game);
if (count($game) != 4) {
continue;
}
$teams = array(explode(",", $game[1]), explode(",", $game[2]));
if (!in_array($id, $teams[0]) && !in_array($id, $teams[1])) {
continue;
}
if (count($teams[0]) != 2 || count($teams[1]) != 2) {
continue;
}
$stats['games']++;
$team = in_array($id, $teams[0]) ? 0 : 1;
$partnerId = $teams[$team][0] == $id ? $teams[$team][1] : $teams[$team][0];
$result = explode(",", $game[3]);
$winningResult = $losingResult = $result;
rsort($winningResult);
sort($losingResult);
$winningResult = join(':', $winningResult);
$losingResult = join(':', $losingResult);
$winningTeam = (count($result) == 1 ? $result[0] : ($result[0] > $result[1] ? 1 : 2)) - 1;
$isWinner = $winningTeam == $team;
$stats[$isWinner ? 'wins' : 'losses']++;
$isGoalee = $id == $teams[$team][0];
$stats[$isWinner ? ($isGoalee ? 'wins_goalee' : 'wins_midfield') : ($isGoalee ? 'losses_goalee' : 'losses_midfield')]++;
if ($isWinner !== $lastResult) {
$currentStreak = 0;
$lastResult = $isWinner;
}
$currentStreak++;
if ($isWinner && $winningStreak < $currentStreak) {
$winningStreak = $currentStreak;
}
if (!$isWinner && $losingStreak < $currentStreak) {
$losingStreak = $currentStreak;
}
if (count($result) == 2) {
if ($isWinner && $result[1-$team] == 0) {
$stats['skunk_wins']++;
}
if (!$isWinner && $result[$team] == 0) {
$stats['skunk_losses']++;
}
$normalizedResult = $isWinner ? $winningResult : $losingResult;
$scores[$normalizedResult] = (isset($scores[$normalizedResult]) ? $scores[$normalizedResult] : 0) + ($isWinner ? 1 : -1);
}
$partners[$partnerId] = (isset($partners[$partnerId]) ? $partners[$partnerId] : 0) + ($isWinner ? 1 : -1);
$opponents[$teams[1-$team][0]] = (isset($opponents[$teams[1-$team][0]]) ? $opponents[$teams[1-$team][0]] : 0) + ($isWinner ? 1 : -1);
$opponents[$teams[1-$team][1]] = (isset($opponents[$teams[1-$team][1]]) ? $opponents[$teams[1-$team][1]] : 0) + ($isWinner ? 1 : -1);
}
if ($lastResult && $winningStreak < $currentStreak) {
$winningStreak = $currentStreak;
}
if (!$lastResult && $losingStreak < $currentStreak) {
$losingStreak = $currentStreak;
}
$stats['best_partner'] = getMinMax($partners, true);
$stats['worst_partner'] = getMinMax($partners, false);
$stats['best_opponent'] = getMinMax($opponents, true);
$stats['worst_opponent'] = getMinMax($opponents, false);
$stats['winning_score'] = getMinMax($scores, true);
$stats['losing_score'] = getMinMax($scores, false);
$stats['winning_streak'] = $winningStreak;
$stats['losing_streak'] = $losingStreak;
return $stats;
}