Add quickest-correct-streak logic to CJeopardy answer module

Todo: Add to `rank`, `scores`, and `reset`.
This commit is contained in:
Pragmatic Software 2015-05-21 02:25:08 -07:00
parent 5908a74570
commit 51d8a136ce
2 changed files with 66 additions and 43 deletions

View File

@ -32,24 +32,29 @@ sub begin {
eval { eval {
$self->{dbh}->do(<< 'SQL'); $self->{dbh}->do(<< 'SQL');
CREATE TABLE IF NOT EXISTS Scores ( CREATE TABLE IF NOT EXISTS Scores (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
nick TEXT NOT NULL COLLATE NOCASE, nick TEXT NOT NULL COLLATE NOCASE,
channel TEXT NOT NULL COLLATE NOCASE, channel TEXT NOT NULL COLLATE NOCASE,
correct_answers INTEGER DEFAULT 0, correct_answers INTEGER DEFAULT 0,
wrong_answers INTEGER DEFAULT 0, wrong_answers INTEGER DEFAULT 0,
lifetime_correct_answers INTEGER DEFAULT 0, lifetime_correct_answers INTEGER DEFAULT 0,
lifetime_wrong_answers INTEGER DEFAULT 0, lifetime_wrong_answers INTEGER DEFAULT 0,
correct_streak INTEGER DEFAULT 0, correct_streak INTEGER DEFAULT 0,
wrong_streak INTEGER DEFAULT 0, wrong_streak INTEGER DEFAULT 0,
lifetime_highest_correct_streak INTEGER DEFAULT 0, lifetime_highest_correct_streak INTEGER DEFAULT 0,
lifetime_highest_wrong_streak INTEGER DEFAULT 0, lifetime_highest_wrong_streak INTEGER DEFAULT 0,
highest_correct_streak INTEGER DEFAULT 0, highest_correct_streak INTEGER DEFAULT 0,
highest_wrong_streak INTEGER DEFAULT 0, highest_wrong_streak INTEGER DEFAULT 0,
hints INTEGER DEFAULT 0, hints INTEGER DEFAULT 0,
lifetime_hints INTEGER DEFAULT 0, lifetime_hints INTEGER DEFAULT 0,
last_wrong_timestamp NUMERIC DEFAULT 0, last_wrong_timestamp NUMERIC DEFAULT 0,
last_correct_timestamp NUMERIC DEFAULT 0, last_correct_timestamp NUMERIC DEFAULT 0,
quickest_correct NUMERIC DEFAULT 0 quickest_correct NUMERIC DEFAULT 0,
correct_streak_timestamp NUMERIC DEFAULT 0,
highest_quick_correct_streak INTEGER DEFAULT 0,
quickest_correct_streak NUMERIC DEFAULT 0,
lifetime_highest_quick_correct_streak INTEGER_DEFAULT 0,
lifetime_quickest_correct_streak NUMERIC DEFAULT 0
) )
SQL SQL
}; };

View File

@ -98,6 +98,7 @@ if (defined $ret) {
my $elapsed = scalar gettimeofday - $last_timestamp; my $elapsed = scalar gettimeofday - $last_timestamp;
my $duration; my $duration;
if ($elapsed < 2) { if ($elapsed < 2) {
$elapsed = 0.01 if $elapsed <= 0.01;
$duration = sprintf("%.2f", $elapsed); $duration = sprintf("%.2f", $elapsed);
} else { } else {
$duration = sprintf("%d", $elapsed); $duration = sprintf("%d", $elapsed);
@ -207,21 +208,46 @@ foreach my $answer (@valid_answers) {
$player_data->{lifetime_highest_correct_streak} = $player_data->{highest_correct_streak}; $player_data->{lifetime_highest_correct_streak} = $player_data->{highest_correct_streak};
} }
my %streaks = ( if ($player_data->{correct_streak} == 1) {
3 => "$color{orange}$nick$color{cyan} is on a $color{orange}3$color{cyan} correct answer streak!", $player_data->{correct_streak_timestamp} = scalar gettimeofday;
4 => "$color{orange}$nick$color{cyan} is hot with a $color{orange}4$color{cyan} correct answer streak!", }
5 => "$color{orange}$nick$color{cyan} is on fire with a $color{orange}5$color{cyan} correct answer streak!",
6 => "$color{orange}$nick$color{cyan} is ON FIRE with a $color{orange}6$color{cyan} correct answer streak!",
7 => "$color{orange}$nick$color{cyan} is DOMINATING with a $color{orange}7$color{cyan} correct answer streak!",
8 => "$color{orange}$nick$color{cyan} is DOMINATING with an $color{orange}8$color{cyan} correct answer streak!",
9 => "$color{orange}$nick$color{cyan} is DOMINATING with a $color{orange}9$color{cyan} correct answer streak!",
10 => "$color{orange}$nick$color{cyan} IS UNTOUCHABLE WITH A $color{orange}10$color{cyan} CORRECT ANSWER STREAK!"
);
if (exists $streaks{$player_data->{correct_streak}}) { my $dont_print_streak = 0;
print "$streaks{$player_data->{correct_streak}}$color{reset}\n";
} elsif ($player_data->{correct_streak} > 10) { if (($player_data->{correct_streak} > $player_data->{highest_quick_correct_streak})
print "$color{orange}$nick$color{cyan} IS UNTOUCHABLE WITH A $color{orange}$player_data->{correct_streak}$color{cyan} CORRECT ANSWER STREAK$color{reset}\n"; or ($player_data->{correct_streak} == $player_data->{highest_quick_correct_streak}
and (gettimeofday - $player_data->{correct_streak_timestamp} < $player_data->{quickest_correct_streak}))) {
$player_data->{highest_quick_correct_streak} = $player_data->{correct_streak};
$player_data->{quickest_correct_streak} = gettimeofday - $player_data->{correct_streak_timestamp};
if ($player_data->{highest_quick_correct_streak} > $player_data->{lifetime_highest_quick_correct_streak}) {
$player_data->{lifetime_highest_quick_correct_streak} = $player_data->{highest_quick_correct_streak};
$player_data->{lifetime_quickest_correct_streak} = $player_data->{quickest_correct_streak};
}
if ($player_data->{highest_quick_correct_streak} >= 3) {
print "$color{orange}$nick$color{cyan} just set a new personal quickest correct answer streak of $color{orange}$player_data->{highest_quick_correct_streak} $color{cyan}correct answers in $color{orange}", duration($player_data->{quickest_correct_streak}), "$color{cyan}!$color{reset}\n";
$dont_print_streak = 1;
}
}
unless ($dont_print_streak) {
my %streaks = (
3 => "$color{orange}$nick$color{cyan} is on a $color{orange}3$color{cyan} correct answer streak!",
4 => "$color{orange}$nick$color{cyan} is hot with a $color{orange}4$color{cyan} correct answer streak!",
5 => "$color{orange}$nick$color{cyan} is on fire with a $color{orange}5$color{cyan} correct answer streak!",
6 => "$color{orange}$nick$color{cyan} is ON FIRE with a $color{orange}6$color{cyan} correct answer streak!",
7 => "$color{orange}$nick$color{cyan} is DOMINATING with a $color{orange}7$color{cyan} correct answer streak!",
8 => "$color{orange}$nick$color{cyan} is DOMINATING with an $color{orange}8$color{cyan} correct answer streak!",
9 => "$color{orange}$nick$color{cyan} is DOMINATING with a $color{orange}9$color{cyan} correct answer streak!",
10 => "$color{orange}$nick$color{cyan} IS UNTOUCHABLE WITH A $color{orange}10$color{cyan} CORRECT ANSWER STREAK!"
);
if (exists $streaks{$player_data->{correct_streak}}) {
print "$streaks{$player_data->{correct_streak}}$color{reset}\n";
} elsif ($player_data->{correct_streak} > 10) {
print "$color{orange}$nick$color{cyan} IS UNTOUCHABLE WITH A $color{orange}$player_data->{correct_streak}$color{cyan} CORRECT ANSWER STREAK!$color{reset}\n";
}
} }
$scores->update_player_data($player_id, $player_data); $scores->update_player_data($player_id, $player_data);
@ -241,7 +267,7 @@ foreach my $answer (@valid_answers) {
my $question = `./cjeopardy.pl $channel`; my $question = `./cjeopardy.pl $channel`;
if ($hint_only_mode) { if ($hint_only_mode) {
my $hint = `./cjeopardy_hint.pl $channel`; my $hint = `./cjeopardy_hint.pl candide $channel`;
$hint =~ s/^Hint: //; $hint =~ s/^Hint: //;
print "Next hint: $hint\n"; print "Next hint: $hint\n";
} else { } else {
@ -286,22 +312,14 @@ if ($player_data->{highest_wrong_streak} > $player_data->{lifetime_highest_wrong
$player_data->{lifetime_highest_wrong_streak} = $player_data->{highest_wrong_streak}; $player_data->{lifetime_highest_wrong_streak} = $player_data->{highest_wrong_streak};
} }
=cut
my %streaks = ( my %streaks = (
3 => "$color{red}Guessing, are we, $color{orange}$nick$color{red}?", 5 => "Guessing, are we, $nick?",
4 => "$color{red}Please use better guesses, $color{orange}$nick!", 7 => "Think of your correct/incorrect ratio! Use a hint, $nick!",
5 => "$color{red}Are you even trying, $color{orange}$nick$color{red}?!",
6 => "$color{red}Try a little bit harder, $color{orange}$nick$color{red}.",
7 => "$color{red}Maybe you should go look it up, $color{orange}$nick$color{red}.",
8 => "$color{red}For fuck's sake, go look it up already, $color{orange}$nick$color{red}!",
9 => "$color{red}Are you sure you weren't dropped on your head, $color{orange}$nick$color{red}?",
10 => "$color{red}Have you been checked for mental retardation yet, $color{orange}$nick$color{red}?"
); );
if (exists $streaks{$player_data->{wrong_streak}}) { if (exists $streaks{$player_data->{wrong_streak}}) {
print "$streaks{$player_data->{wrong_streak}}$color{reset}\n"; print "$streaks{$player_data->{wrong_streak}}$color{reset}\n";
} }
=cut
$scores->update_player_data($player_id, $player_data); $scores->update_player_data($player_id, $player_data);
$scores->end; $scores->end;