#!/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