#!/usr/local/bin/perl # use warnings; # use strict; # use diagnostics;
use CGI; my $cgi = new CGI; my ( $topic, $score, $lastnum, $answer, $anum, $bnum, $cnum, $dnum, $enum, $smarts, $playlevel, $c_topic, $c_smarts, $c_playlevel, $c_score, $c_lastnum, $c_goodans, $stimulus, $texta, $textb, $textc, $textd, $texte, $defnum, $smiley, $feedback, $goodans, $restart, @data, @cat, @term, @def, @story, @candidate, @termnum, $sound ); my $instructions = "(Click the button next to the best response)"; my $ops = 0; # GET COOKIES $topic = $cgi->cookie('topic'); $smarts = $cgi->cookie('smarts'); $playlevel = $cgi->cookie('playlevel'); $score = $cgi->cookie('score'); $lastnum = $cgi->cookie('lastnum'); $goodans = $cgi->cookie('goodans'); # IF NEW CATEGORY THEN (RE)START TUTORIAL, ELSE GET USER ANSWER if ( $cgi->param('Category') ) { $restart = 1; $topic = $cgi->param('Category'); $smarts = 0; $playlevel = 0; $score = 0; $lastnum = 0; } elsif ( $cgi->param('Answer') ) { $answer = $cgi->param('Answer'); } elsif ( $cgi->param('Next') ) { $restart = 1; } if ($topic) { # RUN TUTORIAL if ( $answer and ( $playlevel > 3 ) ) { # SUBSTITUTE SPACE FOR '+' IN $answer $_ = $answer; s/\+/ /g; $answer = $_; # RTRIM $answer AND MAKE SURE IT'S ALL LOWER CASE $answer =~ s/\s+$//; $answer = lc($answer); # FIX FRENCH CHARACTERS if ( $answer eq "deja entendu" ) { $answer = "déjà entendu"; } elsif ( $answer eq "deja vu" ) { $answer = "déjà vu"; } elsif ( $answer eq "deja vecu" ) { $answer = "déjà vécu"; } elsif ( $answer eq "folie a deux" ) { $answer = "folie à deux"; } elsif ( $answer eq "jamais vecu" ) { $answer = "jamais vécu"; } elsif ( $answer eq "d%e9j%e0 entendu" ) { $answer = "déjà entendu"; } elsif ( $answer eq "d%e9j%e0 vu" ) { $answer = "déjà vu"; } elsif ( $answer eq "d%e9j%e0 v%e9cu" ) { $answer = "déjà vécu"; } elsif ( $answer eq "folie %e0 deux" ) { $answer = "folie à deux"; } elsif ( $answer eq "jamais v%e9cu" ) { $answer = "jamais vécu"; } } # END PLAYLEVEL 4 # LOAD DATA open FH, "/home1/theinfp0/public_html/psychdef/tutorial.fil" or die $!; while (<FH>) { if ( $topic eq "REVIEW" ) { $termnum[ $ops++ ] = $_; } elsif (/$topic/) { $termnum[ $ops++ ] = $_; } } close FH; $defnum = $ops; # NUMBER OF TERMS IN DATA SET # PARSE $_ TO GET $term(32) $cat(16) $def(64) $story(128) via @data: $ops = 0; foreach (@termnum) { @data = /(.{16})/g; $cat[$ops] = $data[0]; $term[$ops] = $data[1] . $data[2]; $def[$ops] = $data[3] . $data[4] . $data[5] . $data[6]; $story[$ops] = $data[7] . $data[8] . $data[9] . $data[10] . $data[11] . $data[12] . $data[13] . $data[14]; # RIGHT TRIM STRINGS $cat[$ops] =~ s/\s+$//; $term[$ops] =~ s/\s+$//; $def[$ops] =~ s/\s+$//; $story[ $ops++ ] =~ s/\s+$//; } # EVALUATE RESPONSE AND PROVIDE FEEDBACK, ADJUSTING SCORES if ( $answer and ( $answer ne $goodans ) ) { $answer = 0; } if ($answer) { $smarts++; $score = ++$score + $playlevel; $smiley = "1"; # SUCCESS $feedback = "You got it right!"; } else { $smarts-- unless $restart; $feedback = "Better study this!"; } if ( $smarts < -4 ) { $playlevel--; $smarts = 0; } elsif ( $smarts > 4 ) { $playlevel++; $smarts = 0; } # NEXT QUESTION if ( $answer or $restart ) { # AVOID CHANGING $lastnum FOR WRONG ANSWER if ( $playlevel < 1 ) { while (1) { $termnum[0] = int( rand($defnum) ); last unless ( $termnum[0] == $lastnum ); } $lastnum = $termnum[0]; $stimulus = $term[ $termnum[0] ]; $candidate[0] = $def[ $termnum[0] ]; while (1) { $termnum[1] = int( rand($defnum) ); last unless ( $termnum[1] == $termnum[0] ); } $candidate[1] = $def[ $termnum[1] ]; $anum = int( rand(2) ); $bnum = abs( $anum - 1 ); $texta = $candidate[$anum]; $textb = $candidate[$bnum]; if ( $texta eq $candidate[0] ) { $goodans = "A"; } else { $goodans = "B"; } } elsif ( $playlevel == 1 ) { while (1) { $termnum[0] = int( rand($defnum) ); last unless ( $termnum[0] == $lastnum ); } $lastnum = $termnum[0]; $stimulus = $def[ $termnum[0] ]; $candidate[0] = $term[ $termnum[0] ]; while (1) { $termnum[1] = int( rand($defnum) ); last unless ( $termnum[1] == $termnum[0] ); } $candidate[1] = $term[ $termnum[1] ]; while (1) { $termnum[2] = int( rand($defnum) ); last unless ( ( $termnum[2] == $termnum[1] ) || ( $termnum[2] == $termnum[0] ) ); } $candidate[2] = $term[ $termnum[2] ]; $anum = int( rand(3) ); if ( $anum == 0 ) { $goodans = "A"; } while (1) { $bnum = int( rand(3) ); last unless ( $bnum == $anum ); } if ( $bnum == 0 ) { $goodans = "B"; } $cnum = 3 - ( $anum + $bnum ); if ( $cnum == 0 ) { $goodans = "C"; } $texta = $candidate[$anum]; $textb = $candidate[$bnum]; $textc = $candidate[$cnum]; } elsif ( $playlevel == 2 ) { while (1) { $termnum[0] = int( rand($defnum) ); last unless ( $termnum[0] == $lastnum ); } $lastnum = $termnum[0]; $stimulus = $term[ $termnum[0] ]; $candidate[0] = $def[ $termnum[0] ]; while (1) { $termnum[1] = int( rand($defnum) ); last unless ( $termnum[1] == $termnum[0] ); } $candidate[1] = $def[ $termnum[1] ]; while (1) { $termnum[2] = int( rand($defnum) ); last unless ( ( $termnum[2] == $termnum[1] ) || ( $termnum[2] == $termnum[0] ) ); } $candidate[2] = $def[ $termnum[2] ]; while (1) { $termnum[3] = int( rand($defnum) ); last unless ( ( $termnum[3] == $termnum[2] ) || ( $termnum[3] == $termnum[1] ) || ( $termnum[3] == $termnum[0] ) ); } $candidate[3] = $def[ $termnum[3] ]; $anum = int( rand(4) ); if ( $anum == 0 ) { $goodans = "A"; } while (1) { $bnum = int( rand(4) ); last unless ( $bnum == $anum ); } if ( $bnum == 0 ) { $goodans = "B"; } while (1) { $cnum = int( rand(4) ); last unless ( ( $cnum == $bnum ) || ( $cnum == $anum ) ); } if ( $cnum == 0 ) { $goodans = "C"; } $dnum = 6 - ( $anum + $bnum + $cnum ); if ( $dnum == 0 ) { $goodans = "D"; } $texta = $candidate[$anum]; $textb = $candidate[$bnum]; $textc = $candidate[$cnum]; $textd = $candidate[$dnum]; } elsif ( $playlevel == 3 ) { while (1) { $termnum[0] = int( rand($defnum) ); last unless ( $termnum[0] == $lastnum ); } $lastnum = $termnum[0]; $stimulus = $story[ $termnum[0] ]; $candidate[0] = $term[ $termnum[0] ]; while (1) { $termnum[1] = int( rand($defnum) ); last unless ( $termnum[1] == $termnum[0] ); } $candidate[1] = $term[ $termnum[1] ]; while (1) { $termnum[2] = int( rand($defnum) ); last unless ( ( $termnum[2] == $termnum[1] ) || ( $termnum[2] == $termnum[0] ) ); } $candidate[2] = $term[ $termnum[2] ]; while (1) { $termnum[3] = int( rand($defnum) ); last unless ( ( $termnum[3] == $termnum[2] ) || ( $termnum[3] == $termnum[1] ) || ( $termnum[3] == $termnum[0] ) ); } $candidate[3] = $term[ $termnum[3] ]; while (1) { $termnum[4] = int( rand($defnum) ); last unless ( ( $termnum[4] == $termnum[3] ) || ( $termnum[4] == $termnum[2] ) || ( $termnum[4] == $termnum[1] ) || ( $termnum[4] == $termnum[0] ) ); } $candidate[4] = $term[ $termnum[4] ]; $anum = int( rand(5) ); if ( $anum == 0 ) { $goodans = "A"; } while (1) { $bnum = int( rand(5) ); last unless ( $bnum == $anum ); } if ( $bnum == 0 ) { $goodans = "B"; } while (1) { $cnum = int( rand(5) ); last unless ( ( $cnum == $bnum ) || ( $cnum == $anum ) ); } if ( $cnum == 0 ) { $goodans = "C"; } while (1) { $dnum = int( rand(5) ); last unless ( ( $dnum == $cnum ) || ( $dnum == $bnum ) || ( $dnum == $anum ) ); } if ( $dnum == 0 ) { $goodans = "D"; } $enum = 10 - ( $anum + $bnum + $cnum + $dnum ); if ( $enum == 0 ) { $goodans = "E"; } $texta = $candidate[$anum]; $textb = $candidate[$bnum]; $textc = $candidate[$cnum]; $textd = $candidate[$dnum]; $texte = $candidate[$enum]; } elsif ( $playlevel > 3 ) { while (1) { $termnum[0] = int( rand($defnum) ); last unless ( $termnum[0] == $lastnum ); } $lastnum = $termnum[0]; $anum = int( rand(2) ); if ($anum) { $stimulus = $story[ $termnum[0] ]; } else { $stimulus = $def[ $termnum[0] ]; } $goodans = $term[ $termnum[0] ]; $instructions = "Type the correct term, then press SEND!"; } } # END OF NEW QUESTION