CGI Game

Game

#!/usr/local/bin/perl
#
use CGI;
#
# Define variables
#
$query = new CGI;
$com_path = "../game/line.html";
#
open (ZONE,"<zone");
$zone = <ZONE>;
close (ZONE);
#
# Put room numbers into large string
#
open (ROOM,"<room");
@rooms = <ROOM>;
close (ROOM);
#
# Put COMMAND Line into Large string
#
open (COMMAND,"<$com_path");
@lines = <COMMAND>;
close (COMMAND);
#
# Put items into large string
#
open (ITEMS,"<items");
@spaces = <ITEMS>;
close (ITEMS);
#
# Get form data
#
$form{com} = $query->param('com');
$form{what} = $query->param('what');
#
# Sort COMMANDs
#
if ($form{com} eq "north") {&north;}
elsif ($form{com} eq "south") {&south;}
elsif ($form{com} eq "east") {&east;}
elsif ($form{com} eq "west") {&west;}
elsif ($form{com} eq "items") {&items;}
elsif ($form{com} eq "pick") {
	if ($form{'what'} eq "hello") {&what;}
	else {&pick;}}
elsif ($form{com} eq "open") {
	if (!($form{'what'})) {&what;}
	else {&open;}}
elsif ($form{com} eq "close") {
	if (!($form{'what'})) {&what;}
	else {&close;}}
elsif ($form{com} eq "push") {
	if (!($form{'what'})) {&what;}
	else {&push;}}
elsif ($form{com} eq "pull") {
	if (!($form{'what'})) {&what;}
	else {&pull;}}
elsif ($form{com} eq "look") {
	if (!($form{'what'})) {&what;}
	else {&look;}}
elsif ($form{com} eq "drop") {
	if (!($form{'what'})) {&what;}
	else {&drop;}}
elsif ($form{com} eq "talk") {
	if (!($form{'what'})) {&what;}
	else {&talk;}}
elsif ($form{com} eq "use") {
	if (!($form{'what'})) {&what;}
	else {&use;}}
#
#
# subroutine what
#
sub what {
if ($form{com} eq "pick") {$what = "Pick up what?  ";}
elsif ($form{com} eq "open") {$what = "Open what?  ";}
elsif ($form{com} eq "close") {$what = "Close what?  ";}
elsif ($form{com} eq "push") {$what = "Push what?  ";}
elsif ($form{com} eq "pull") {$what = "Pull what?  ";}
elsif ($form{com} eq "drop") {$what = "Drop what?  ";}
elsif ($form{com} eq "use") {$what = "Use what?  ";}
elsif ($form{com} eq "talk") {$what = "Talk to who?  ";}
elsif ($form{com} eq "look") {$what = "Look at what?  ";}
#
print $query->header(-target=>'LINE');
print "<html><head><title>What</title><script>\n";
print "function go() {parent.LINE.document.location=\'";
print "http://www.test.com/game/line.html\'\;}\n";
print "</script>\n";
print "<body bgcolor=\"#000000\" text=\"#ffffff\">\n";
print "<br><form method=post action=\"game.pl\"";
print " onsubmit=\"go()\">\n";
print "<input type=hidden name=\"com\" value=\"$form{com}\">\n";
print "$what <input type=text name=\"what\" size=50>  ";
print "<input type=submit value=\"Enter\">\n";
print "<br></body></html>\n";
exit;
}
#
sub pick {
if ($zone == 1) {
	if ($form{'what'} eq "vile") {
		$pick = 1;
		$zone = 3;
		print $query->header(-target=>'TEXT'); 
       		open(HTML,"<../frontr3.html"); 
       		while(<HTML>) {print;} 
       		close(HTML);}
	elsif ($form{'what'} eq "letter") {
		$pick = 1;
		$zone = 2;
		print $query->header(-target=>'TEXT'); 
       		open(HTML,"<../frontr2.html"); 
       		while(<HTML>) {print;} 
       		close(HTML);}
 }
elsif ($zone == 2) {
	if ($form{'what'} eq "vile") {
		$pick = 1;
		$zone = 4;
		print $query->header(-target=>'TEXT'); 
       		open(HTML,"<../frontr4.html"); 
       		while(<HTML>) {print;} 
       		close(HTML);}
 }
elsif ($zone == 3) {
	if ($form{'what'} eq "letter") {
		$pick = 1;
		$zone = 4;
		print $query->header(-target=>'TEXT'); 
       		open(HTML,"<../frontr4.html"); 
       		while(<HTML>) {print;} 
       		close(HTML);}
 }
elsif ($zone == 30) {
	if ($form{'what'} eq "sandwiches") {
		$pick = 2;
		$zone = 31;
		print $query->header(-target=>'TEXT'); 
       		open(HTML,"<../kitchen2.html"); 
       		while(<HTML>) {print;} 
       		close(HTML);}
 }
elsif ($zone == 61) {
	if ($form{'what'} eq "keys") {
		$pick = 1;
		$zone = 62;
		print $query->header(-target=>'TEXT'); 
       		open(HTML,"<../bedside2.html"); 
       		while(<HTML>) {print;} 
       		close(HTML);}
 }
else {&wrong;}
if ($pick == 1) {
	open (COMMAND,">$com_path");
	foreach $line (@lines) {
		if ($line =~ /<!--comm-->/) {
		    print COMMAND "<!--comm-->You pick up the $form{'what'}\n";}
		else {print COMMAND $line;}}
	close (COMMAND);
	open (ITEMS,">>items");
	print ITEMS "$form{'what'}\n";
	close (ITEMS);
 }
elsif ($pick == 2) {
	open (COMMAND,">$com_path");
	foreach $line (@lines) {
		if ($line =~ /<!--comm-->/) {
		    print COMMAND "<!--comm-->You pick up the sandwiches and eat then.  Yum!\n";}
		else {print COMMAND $line;}}
	close (COMMAND);
 }
open (ZONE,">zone");
print ZONE "$zone";
close (ZONE);
&room;
print $query->header(-target=>'LINE'); 
        open(HTML,"<$com_path"); 
        while(<HTML>) {print;} 
        close(HTML);
exit;
}
#
sub open {
if ($zone == 20) {
	if ($form{'what'} eq "closet") {
	$zone = 1;
	print $query->header(-target=>'TEXT'); 
        open(HTML,"<../closet.html"); 
        while(<HTML>) {print;} 
        close(HTML);
	open (ZONE,">zone");
	print ZONE "$zone";
	close (ZONE);
        open (ITEMS,">items");
	print ITEMS '';
	close (ITEMS);
	&room;	
 }}
else {&wrong};
exit;
}
#
sub close {
&wrong;
exit;
}
#
sub push {
&wrong;
exit;
}
#
sub pull {
&wrong;
exit;
}
#
sub talk {
&wrong;
exit;
}
#
sub look {
if ($zone < 5) {
	 if ($form{'what'} eq "letter") {		
		if (($zone == 1) || ($zone == 3)) {
	  		open (COMMAND,">$com_path");
		        foreach $line (@lines) {
		        if ($line =~ /<!--comm-->/) {
		        print COMMAND "<!--comm-->Try picking it up first!\n";}
		        else {print COMMAND $line;}}
			close (COMMAND);}
		else {print $query->header(-target=>'TEXT'); 
       		      open(HTML,"<../letter.html"); 
       	 	      while(<HTML>) {print;} 
    		      close(HTML);
		      open (COMMAND,">$com_path");
		      foreach $line (@lines) {
		  	if ($line =~ /<!--comm-->/) {
			  print COMMAND "<!--comm-->You look at the letter.\n";}
			else {print COMMAND $line;}}
		      close (COMMAND);}}
 }
elsif ($zone == 60) {
	if ($form{'what'} eq "table") {
	foreach $space (@spaces) {
		if ($line =~ /keys/) {$zone = 62;}
		else {$zone = 61;}}
		if ($zone == 61) {
			print $query->header(-target=>'TEXT'); 
			open(HTML,"<../bedside.html"); 
			while(<HTML>) {print;} 
			close(HTML);}
		else {
			print $query->header(-target=>'TEXT'); 
       			open(HTML,"<../bedside2.html"); 
       			while(<HTML>) {print;} 
    			close(HTML);}
	open (COMMAND,">$com_path");
	foreach $line (@lines) {
	if ($line =~ /<!--comm-->/) {
	print COMMAND "<!--comm-->You look at the Bedside table\n";}
	else {print COMMAND $line;}}
	close (COMMAND);
 }}
elsif (($zone == 61) || ($zone == 62)) {
	if ($form{'what'} eq "bedroom") {
		print $query->header(-target=>'TEXT'); 
       		open(HTML,"<../bedroom.html"); 
  	     	while(<HTML>) {print;} 
 	   	close(HTML);
		open (COMMAND,">$com_path");
		foreach $line (@lines) {
			if ($line =~ /<!--comm-->/) {
				print COMMAND "<!--comm-->You look at the Bedroom\n";}
			else {print COMMAND $line;}}
		close (COMMAND);
		$zone = 60;}	
 }
else {foreach $space (@spaces) {
	if ($space =~ /$form{'what'}/) {
		open (COMMAND,">$com_path");
		foreach $line (@lines) {
		if ($line =~ /<!--comm-->/) {
			print COMMAND "<!--comm-->It is a $form{'what'}\n";}
		else {print COMMAND $line;}}
		close (COMMAND);}
	else {&wrong;}}
 }
open (ZONE,">zone");
print ZONE "$zone";
close (ZONE);
exit;
}
#
sub drop {
open (COMMAND,">$com_path");
	foreach $line (@lines) {
		if ($line =~ /<!--comm-->/) {
		    print COMMAND "<!--comm-->I would hang on to that you might need it!\n";}
		else {print COMMAND $line;}}
close (COMMAND);
print $query->header(-target=>'LINE'); 
open(HTML,"<$com_path");
while(<HTML>) {print;}
close(HTML);
exit;
}
#
sub use {
if ($form{'what'} eq "vile") {
	if ($form{know} == 1 ) {
		if ($form{how} == 3) {&wrong;}
		else {&wrong;}}
	else {open (COMMAND,">$com_path");
		foreach $line (@lines) {
		if ($line =~ /<!--comm-->/) {
		    print COMMAND "<!--comm-->You don't know how!\n";}
		else {print COMMAND $line;}}
		close (COMMAND);}
 }
elsif ($zone == 80) {
	if ($form{'what'} eq "car") {
		foreach $space (@spaces) {
			if ($space =~ /keys/) {
				print $query->header(-target=>'TEXT'); 
       				open(HTML,"<../hcar.html"); 
       				while(<HTML>) {print;} 
    				close(HTML);
				open (COMMAND,">$com_path");
				foreach $line (@lines) {
				if ($line =~ /<!--comm-->/) {
					print COMMAND "<!--comm-->You get into the car!\n";}
				else {print COMMAND $line;}}
				close (COMMAND);
				$zone = 90;
				$piddle = 1;}
			else {
				open (COMMAND,">$com_path");
				foreach $line (@lines) {
				if ($line =~ /<!--comm-->/) {
					print COMMAND "<!--comm-->You don't have the keys!\n";}
				else {print COMMAND $line;}}
				close (COMMAND);}}}
 }
else {&wrong;}
open (ZONE,">zone");
print ZONE "$zone";
close (ZONE);
&room;
if ($piddle != 1) {
	print $query->header(-target=>'LINE'); 
        open(HTML,"<$com_path");
        while(<HTML>) {print;} 
        close(HTML);}
exit;
}
#
sub items {
print $query->header(-target=>'TEXT');
print "<html><head><title>items</title></head><body>\n";
foreach $space (@spaces) {print "$space\n\n";}
print "</body></html>\n";
exit;
}
#
sub north {
if ($zone < 5) {
	print $query->header(-target=>'TEXT'); 
       	open(HTML,"<../hall.html"); 
       	while(<HTML>) {print;} 
    	close(HTML);
	$zone = 20;
	$poke = 1;
 }
elsif ($zone == 20) {
	print $query->header(-target=>'TEXT'); 
       	open(HTML,"<../bedroom.html"); 
       	while(<HTML>) {print;} 
    	close(HTML);
	$zone = 60;
	$poke = 1;
 }
else {&wrong;}
if ($poke == 1) {open (COMMAND,">$com_path");
		 foreach $line (@lines) {
	         if ($line =~ /<!--comm-->/) {
		 print COMMAND "<!--comm-->You go north!\n";}
		 else {print COMMAND $line;}}
		 close (COMMAND);
 }
open (ZONE,">zone");
print ZONE "$zone";
close (ZONE);
exit;
}
#
sub south {
if ($zone == 20) {
	foreach $room (@rooms) {
		if ($room =~ /<!--front-->1/) {print $query->header(-target=>'TEXT'); 
       				    		 open(HTML,"<../frontr1.html"); 
       				    		 while(<HTML>) {print;} 
    				    		 close(HTML);
						 $zone = 1;}
		elsif ($room =~ /<!--front-->2/) {print $query->header(-target=>'TEXT'); 
       		             			 open(HTML,"<../frontr2.html"); 
       						 while(<HTML>) {print;} 
    						 close(HTML);
						 $zone = 2;}
		elsif ($room =~ /<!--front-->3/) {print $query->header(-target=>'TEXT'); 
       						  open(HTML,"<../frontr3.html"); 
       					  	  while(<HTML>) {print;} 
    						  close(HTML);
						  $zone = 3;}
		elsif ($room =~ /<!--front-->4/) {print $query->header(-target=>'TEXT'); 
       						  open(HTML,"<../frontr4.html"); 
       						  while(<HTML>) {print;} 
    						  close(HTML);
						  $zone = 4;}}
$poke = 1;
 }
elsif (($zone > 59) && ($zone < 65)) {
	print $query->header(-target=>'TEXT'); 
        open(HTML,"<../hall.html"); 
        while(<HTML>) {print;} 
        close(HTML);
	$zone = 20;
	$poke = 1;
 }
else {&wrong}
if ($poke == 1) {open (COMMAND,">$com_path");
		 foreach $line (@lines) {
	         if ($line =~ /<!--comm-->/) {
		 print COMMAND "<!--comm-->You go south!\n";}
		 else {print COMMAND $line;}}
		 close (COMMAND);
 }
open (ZONE,">zone");
print ZONE "$zone";
close (ZONE);
exit;
}
#
sub east {
if (($zone < 35) && ($zone >29) && ($poke == 0)) {
	print $query->header(-target=>'TEXT'); 
        open(HTML,"<../hall.html"); 
        while(<HTML>) {print;} 
        close(HTML);
	$zone = 20;
	$poke = 1;
}
elsif (($zone == 20) && ($poke == 0)) {
	print $query->header(-target=>'TEXT'); 
        open (HTML,"<../garden.html"); 
        while(<HTML>) {print;} 
        close(HTML);
	$zone = 70;
	$poke = 1;
 }
elsif (($zone == 70) && ($poke == 0)) {
	print $query->header(-target=>'TEXT'); 
        open(HTML,"<../hstreet.html"); 
        while(<HTML>) {print;} 
        close(HTML);
	$zone = 80;
	$poke = 1;
 }
else {&wrong}
if ($poke == 1) {open (COMMAND,">$com_path");
		 foreach $line (@lines) {
	         if ($line =~ /<!--comm-->/) {
		 print COMMAND "<!--comm-->You go east!\n";}
		 else {print COMMAND $line;}}
		 close (COMMAND);
 }
open (ZONE,">zone");
print ZONE "$zone";
close (ZONE);
exit;
}
#
sub west {
if ($zone == 20) { 
	foreach $room (@rooms) {
		if ($room =~ /<!--kitchen-->30/) {
						print $query->header(-target=>'TEXT');
       				    		 open (HTML,"<../kitchen.html");
       				    		 while(<HTML>) {print;} 
    				    		 close(HTML);
						 $zone = 30;}
		elsif ($room =~ /<!--kitchen-->31/) {
						print $query->header(-target=>'TEXT');
       		             			 open (HTML,"<../kitchen2.html");
       						 while(<HTML>) {print;}
    						 close(HTML);
						 $zone = 31;}}
	$poke = 1;
 }
elsif ($zone == 70) {
	print $query->header(-target=>'TEXT'); 
        open (HTML,"<../hall.html"); 
        while(<HTML>) {print;} 
        close(HTML);
	$zone = 20;
	$poke = 1;
 }
elsif ($zone == 80) {
	 print $query->header(-target=>'TEXT'); 
        open(HTML,"<../garden.html"); 
        while(<HTML>) {print;} 
        close(HTML);
	$zone = 70;
	$poke = 1;
 }
else {&wrong}
if ($poke == 1) {open (COMMAND,">$com_path");
		 foreach $line (@lines) {
	         if ($line =~ /<!--comm-->/) {
		 print COMMAND "<!--comm-->You go west!\n";}
		 else {print COMMAND $line;}}
		 close (COMMAND);
 }
open (ZONE,">zone");
print ZONE "$zone";
close (ZONE);
exit;
}
# 
sub wrong {
open (COMMAND,">$com_path");
	foreach $line (@lines) {
		if ($line =~ /<!--comm-->/) {
		    print COMMAND "<!--comm-->You cannot do that!\n";}
		else {print COMMAND $line;}}
close (COMMAND);
print $query->header(-target=>'LINE'); 
open(HTML,"<$com_path"); ; 
while(<HTML>) {print;} 
close(HTML);
exit;
}
#
sub room {
open (ROOM,">room");
foreach $room (@rooms) {
	if (($room =~ /<!--front-->/) && ($zone < 5)) {print ROOM "<!--front-->$zone\n";}
	elsif (($room =~ /<!--kitchen-->/) && ($zone > 29) && ($zone < 32)) {print ROOM "<!--kitchen-->$zone\n";}
	elsif (($room =~ /<!--bedside-->/) && ($zone > 59) && ($zone < 65)) {print ROOM "<!--bedside-->$zone\n";}
	else {print ROOM $room;}}
close (ROOM);
exit; 
}
#