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

Reply via email to