diff --git a/00_Utilities/bas2perl.pl b/00_Utilities/bas2perl.pl new file mode 100755 index 00000000..791d1b34 --- /dev/null +++ b/00_Utilities/bas2perl.pl @@ -0,0 +1,380 @@ +#!/usr/bin/perl +use strict; + + +my $Mode= lc($ARGV[0]); #trace #convert +my $File= $ARGV[1]; +my $LN= "Line"; +my $Pedantic= 0; +my $Indent= 0; + +my %Vars; # num | str | anm | ast +my @Data; +my %Code; +open(FH, $File); +while (my $Line = ) { + chomp $Line; + my $Space= index($Line, " "); + my $Key= substr($Line, 0, $Space); + my $Code= substr($Line, $Space+1); + $Code{$Key}=$Code; + } +close(FH); + + +foreach my $Lin (sort {$a<=>$b} keys %Code) { + if ($Mode eq "trace") { print "==> $Lin $Code{$Lin}\n"; } + my $Ret= &PROCLINE($Code{$Lin}); + if ($Mode eq "trace") { print " $Ret\n"; } + $Code{$Lin}= $Ret; + } + + +if ($Mode eq "convert") { + $Code{'0.1'}= "#!/usr/bin/perl"; + $Code{'0.2'}= "#use strict;"; + $Code{'0.3'}= "# Automatic converted by bas2perl.pl"; + $Code{'0.4'}= ""; + foreach my $Lin (sort {$a<=>$b} keys %Code) { + print "$Code{$Lin}\n"; + } + } + + if (@Data) { &DATAIL(); } + print "\n\n\n"; + + +exit; + + +sub PROCLINE { + my ($Line)= @_; + my @Sente= &SMARPLIT($Line, ":", "\""); + + my $Perl; + foreach my $Sen (@Sente) { + my $Flag=0; + if ($Pedantic==0) { + #REM: Resolves some ugly syntaxis... + $Sen=~ s/\bPRINT"/PRINT "/g; # PRINT"Hello" + $Sen=~ s/"([A-Z])\$/"; $1\$/g; # PRINT "Hello "N$ + } + $Sen= &TRIM($Sen); + if ($Sen>0) { $Sen= "GOTO $Sen"; } + if ($Sen=~ /^DATA\b/) { $Sen= &DATA($Sen); $Flag=1; } + if ($Sen=~ /^DIM\b/) { $Sen= &DIM($Sen); $Flag=1; } + if ($Sen=~ /^END\b/) { $Sen= &ENDD($Sen); $Flag=1; } + if ($Sen=~ /^FOR\b/) { $Sen= &FOR($Sen); $Flag=1; } + if ($Sen=~ /^GOTO\b/) { $Sen= &GOTO($Sen); $Flag=1; } + if ($Sen=~ /^GOSUB\b/) { $Sen= &GOSUB($Sen); $Flag=1; } + if ($Sen=~ /^IF\b/) { $Sen= &IF($Sen); $Flag=1; } + if ($Sen=~ /^INPUT\b/) { $Sen= &INPUT($Sen); $Flag=1; } + if ($Sen=~ /^NEXT\b/) { $Sen= &NEXT($Sen); $Flag=1; } + if ($Sen=~ /^ON\b/ && $Sen=~ / GOTO /) { $Sen= &ONGOTO($Sen); $Flag=1; } + if ($Sen=~ /^PRINT\b/) { $Sen= &PRINT($Sen); $Flag=1; } + if ($Sen=~ /^READ\b/) { $Sen= &READ($Sen); $Flag=1; } + if ($Sen=~ /^REM\b/) { $Sen= &REM($Sen); $Flag=1; } + if ($Sen=~ /^RETURN\b/) { $Sen= &RETURN($Sen); $Flag=1; } + if ($Sen=~ /^STOP\b/) { $Sen= &ENDD($Sen); $Flag=1; } + if ($Flag==0) { $Sen= &FORMULA($Sen); } # LET + $Sen.=";"; + $Sen=~ s/\{;$/\{/g; + $Sen=~ s/\};$/\}/g; + $Perl.= "$Sen "; + } + $Perl= &TRIM($Perl); + my $Adj= 0; + if ($Perl=~ /^for\b/) { $Adj--; } + if ($Perl eq "}") { $Adj++; } + $Perl= "\t"x ($Indent+$Adj) . $Perl; + return $Perl; + } + + + +#################### +# BASIC STATEMENTS # +#################### + +sub DATA { + my ($Str)= @_; + $Str=~ s/DATA //; + push @Data, $Str; + return "# TO DATA SEGMENT"; + } + + +sub DIM { + my ($Str)= @_; + $Str=~ s/DIM //; + my @Parts= split(/\,(?![^\(]*\))/, $Str); + my $Out; + foreach my $Par (@Parts) { + my $Type= $Par=~ /\$/ ? "ast" : "anm"; + $Par=~ s/\$//g; + $Par=~ s/\(.*\)//; + $Vars{$Par}= "anm"; + $Out.= "my \@$Par; "; + } + chop $Out; + chop $Out; + return $Out; + } + + +sub ENDD { + return "exit"; + } + + +sub FOR { + my ($Str)= @_; + $Str=~ s/= /=/g; + my @Parts= split(" ", $Str); + $Parts[1]= &FORMULA($Parts[1]); + my $Var=substr($Parts[1],0,index($Parts[1],"=")); + $Parts[3]= "$Var<=".&FORMULA($Parts[3]); + if ($Parts[5]<0) { $Parts[3]=~ s//; } + $Parts[5]= $Parts[5] eq "" ? "$Var++" : "$Var+=".&FORMULA($Parts[5]); + $Str= "for ($Parts[1]; $Parts[3]; $Parts[5]) {"; + $Indent++; + return $Str; + } + + +sub GOTO { + # The birth of spaguetti code! + # Dijkstra would not like this... + my ($Str)= @_; + my @Parts= split(" ", $Str); + my $Label= "$LN$Parts[1]"; + $Str= lc($Parts[0])." $Label"; + $Code{($Parts[1]-.2)}=""; + $Code{($Parts[1]-.1)}="$Label:"; + return $Str; + } + + +sub GOSUB { + my ($Str)= @_; + my @Parts= split(" ", $Str); + my $Label= "$LN$Parts[1]"; + $Str= "\&$Label()"; + $Code{($Parts[1]-.2)}=""; + $Code{($Parts[1]-.1)}="sub $Label {"; + return $Str; + } + + +sub IF { + my ($Str)= @_; + $Str=~ s/^IF //g; + my @Parts= split(" THEN ", $Str); + $Parts[0]= &FORMULA($Parts[0], 1); + $Parts[1]= &PROCLINE($Parts[1]); + my $Str= "if ($Parts[0]) { $Parts[1] }"; + return $Str; + } + + +sub INPUT { + my ($Str)= @_; + $Str=~ s/INPUT //; + $Str=~ s/"(.*)"//g; + + my $Txt= qq|print "$1\? "; |; + + my @Parts= split(/,/, $Str); + my @Multi; + foreach my $Par (@Parts) { + my $Type= "num"; + if ($Par=~ /\$/) { + $Type= "str"; + $Par=~ s/\$//g; + } + if ($Par=~ /\(/) { + if ($Type eq "num") { $Type= "anm"; } + if ($Type eq "str") { $Type= "ast"; } + $Par=~ s/\(/\[/g; + $Par=~ s/\)/\]/g; + } + $Par=~ s/\;//g; + push @Multi, "\$$Par"; + + my $Name= $Par; + $Name=~ s/\[.*\]//; + $Vars{$Name}= $Type; + } + + $Str= join(",", @Multi); + + my $Spl= ""; + if (scalar @Parts>1) { + $Spl= "; ($Str)= split(/,/, \$Inp_)"; + $Str= "\$Inp_"; + } + my $Inp= qq|chomp($Str = uc())$Spl|; + + + if ($Str=~ /,/) { + $Str= "\$$Str"; + $Str=~ s/,/,\$/g; + $Str= "Inp"; + } + return $Txt.$Inp; + } + + +sub NEXT { + $Indent--; + return "}"; + } + + +sub ONGOTO { + # Base 1, if not match it will be skipped. + my ($Str)= @_; + my @Parts= split(" ", $Str); + my $Var= $Parts[1]; + my @Lines= split(",", $Parts[3]); + my $Count=0; + my $Text; + foreach my $Lin (@Lines) { + $Count++; + my $This= "\telsif (\$$Var==$Count) "; + if ($Count==1) { $This= "if (\$$Var==1) "; } + + my $Goto= &GOTO("GOTO $Lin"); + $This.="{ $Goto; }\n"; + $Text.= $This; + } + return $Text; + } + + +sub PRINT { + my ($Str)= @_; + if ($Str eq "PRINT") { return 'print "\n"' }; + $Str=~ s/^PRINT //; + + my $Enter= 1; + if ($Str=~ /;$/) { $Enter= 0; } + + my @Parts= &SMARPLIT($Str, ";", "\""); + + my @Out; + foreach my $Par (@Parts) { + if ($Par=~ /"/) { + push @Out, $Par; + next; + } + + if ($Par=~ /TAB\((.*?)\)/) { + push @Out, "' 'x".&FORMULA($1)." "; + next; + } + + $Par= &FORMULA($Par); + push @Out, $Par; + } + + my $Out= join(". ", @Out); + if ($Enter) { $Out.= qq|. "\\n"|; } + return "print ".$Out; + } + + +sub READ { + my ($Str)= @_; + $Str=~ s/READ //; + $Str= &FORMULA($Str); + $Str.="= ; chomp($Str)"; + return $Str; + } + + +sub REM { + my ($Str)= @_; + return "#".$Str; + } + + +sub RETURN { + return "return; }"; + } + + + +########### +# HELPERS # +########### + +sub TRIM { + my ($Str)= @_; + #$Str=~ s/\s+/ /g; + $Str=~ s/^\s+//; + $Str=~ s/\s+$//; + return $Str; + } + + +sub DATAIL { + print "\n\n\n"; + print "__DATA__\n"; + foreach my $Dat (@Data) { + $Dat=~ s/"//g; + $Dat=~ s/,/\n/g; + print "$Dat\n"; + } + } + + +sub FORMULA { + my ($Str, $Cond)= @_; + $Str=~ s/\$//g; + $Str=~ s/ABS\(/abs\(/g; + $Str=~ s/COS\(/cos\(/g; + $Str=~ s/LEN\(/length\(/g; + $Str=~ s/INT\(/int\(/g; + $Str=~ s/MID\$?\(/substr\(/g; + $Str=~ s/RND\(/rand\(/g; + $Str=~ s/SIN\(/sin\(/g; + $Str=~ s/SQR\(/sqr\(/g; + $Str=~ s/(\b[A-Z][0-9]?\b)/\$$&/g; + + #==> Check for arrays... + foreach my $Key (keys %Vars) { + if ($Vars{$Key}!~ /^a/) { next; } + $Str=~ s/\$$Key\((.*?)\)/\$$Key\[$1\]/g; + } + + if ($Cond==1) { + $Str=~ s/<>/ ne /g; + $Str=~ s/=/ eq /g; + } + return $Str; + } + + +sub SMARPLIT { + my ($Str, $Sep, $Nin)= @_; + my @Parts; + my $Text= ""; + my $Flag= 0; + my $Prev; + foreach my $Char (split('', $Str)) { + if ($Char eq $Nin) { $Flag= !$Flag; } + if ($Char eq $Sep && $Flag==0) { + push @Parts, &TRIM($Text); + $Text= ""; + next; + } + $Prev= $Char; + $Text.= $Char; + } + if ($Text) { push @Parts, &TRIM($Text); } + return @Parts; + } + + + diff --git a/16_Bug/javascript/bug.js b/16_Bug/javascript/bug.js index 2d99d90c..e222e03d 100644 --- a/16_Bug/javascript/bug.js +++ b/16_Bug/javascript/bug.js @@ -10,38 +10,43 @@ function print(str) function input() { - var input_element; - var input_str; - return new Promise(function (resolve) { - input_element = document.createElement("INPUT"); + const input_element = document.createElement("INPUT"); print("? "); input_element.setAttribute("type", "text"); input_element.setAttribute("length", "50"); document.getElementById("output").appendChild(input_element); input_element.focus(); - input_str = undefined; - input_element.addEventListener("keydown", function (event) { - if (event.keyCode == 13) { - input_str = input_element.value; - document.getElementById("output").removeChild(input_element); - print(input_str); - print("\n"); - resolve(input_str); - } - }); + input_element.addEventListener("keydown", + function (event) { + if (event.keyCode === 13) { + const input_str = input_element.value; + document.getElementById("output").removeChild(input_element); + print(input_str); + print("\n"); + resolve(input_str); + } + }); }); } function tab(space) { - var str = ""; + let str = ""; while (space-- > 0) str += " "; return str; } +function waitNSeconds(n) { + return new Promise(resolve => setTimeout(resolve, n*1000)); +} + +function scrollToBottom() { + window.scrollTo(0, document.body.scrollHeight); +} + function draw_head() { print(" HHHHHHH\n"); @@ -52,6 +57,58 @@ function draw_head() print(" HHHHHHH\n"); } +function drawFeelers(feelerCount, character) { + for (let z = 1; z <= 4; z++) { + print(tab(10)); + for (let x = 1; x <= feelerCount; x++) { + print(character + " "); + } + print("\n"); + } +} + +function drawNeck() { + for (let z = 1; z <= 2; z++) + print(" N N\n"); +} + +function drawBody(computerTailCount) { + print(" BBBBBBBBBBBB\n"); + for (let z = 1; z <= 2; z++) + print(" B B\n"); + if (computerTailCount === 1) + print("TTTTTB B\n"); + print(" BBBBBBBBBBBB\n"); +} + +function drawFeet(computerFeetCount) { + for (let z = 1; z <= 2; z++) { + print(tab(5)); + for (let x = 1; x <= computerFeetCount; x++) + print(" L"); + print("\n"); + } +} + +function drawBug(playerFeelerCount, playerHeadCount, playerNeckCount, playerBodyCount, playerTailCount, playerFeetCount, feelerCharacter) { + if (playerFeelerCount !== 0) { + drawFeelers(playerFeelerCount, feelerCharacter); + } + if (playerHeadCount !== 0) + draw_head(); + if (playerNeckCount !== 0) { + drawNeck(); + } + if (playerBodyCount !== 0) { + drawBody(playerTailCount) + } + if (playerFeetCount !== 0) { + drawFeet(playerFeetCount); + } + for (let z = 1; z <= 4; z++) + print("\n"); +} + // Main program async function main() { @@ -60,25 +117,26 @@ async function main() print("\n"); print("\n"); print("\n"); - a = 0; - b = 0; - h = 0; - l = 0; - n = 0; - p = 0; - q = 0; - r = 0; - s = 0; - t = 0; - u = 0; - v = 0; - y = 0; + let playerFeelerCount = 0; + let playerHeadCount = 0; + let playerNeckCount = 0; + let playerBodyCount = 0; + let playerFeetCount = 0; + let playerTailCount = 0; + + let computerFeelerCount = 0; + let computerHeadCount = 0; + let computerNeckCount = 0; + let computerBodyCount = 0; + let computerTailCount = 0; + let computerFeetCount = 0; + print("THE GAME BUG\n"); print("I HOPE YOU ENJOY THIS GAME.\n"); print("\n"); print("DO YOU WANT INSTRUCTIONS"); - str = await input(); - if (str != "NO") { + const instructionsRequired = await input(); + if (instructionsRequired.toUpperCase() !== "NO") { print("THE OBJECT OF BUG IS TO FINISH YOUR BUG BEFORE I FINISH\n"); print("MINE. EACH NUMBER STANDS FOR A PART OF THE BUG BODY.\n"); print("I WILL ROLL THE DIE FOR YOU, TELL YOU WHAT I ROLLED FOR YOU\n"); @@ -98,30 +156,32 @@ async function main() print("\n"); print("\n"); } - while (y == 0) { - z = Math.floor(6 * Math.random() + 1); - c = 1; - print("YOU ROLLED A " + z + "\n"); - switch (z) { + + let gameInProgress = true; + while (gameInProgress) { + let dieRoll = Math.floor(6 * Math.random() + 1); + let partFound = false; + print("YOU ROLLED A " + dieRoll + "\n"); + switch (dieRoll) { case 1: print("1=BODY\n"); - if (b == 0) { + if (playerBodyCount === 0) { print("YOU NOW HAVE A BODY.\n"); - b = 1; - c = 0; + playerBodyCount = 1; + partFound = true; } else { print("YOU DO NOT NEED A BODY.\n"); } break; case 2: print("2=NECK\n"); - if (n == 0) { - if (b == 0) { + if (playerNeckCount === 0) { + if (playerBodyCount === 0) { print("YOU DO NOT HAVE A BODY.\n"); } else { print("YOU NOW HAVE A NECK.\n"); - n = 1; - c = 0; + playerNeckCount = 1; + partFound = true; } } else { print("YOU DO NOT NEED A NECK.\n"); @@ -129,219 +189,158 @@ async function main() break; case 3: print("3=HEAD\n"); - if (n == 0) { + if (playerNeckCount === 0) { print("YOU DO NOT HAVE A NECK.\n"); - } else if (h == 0) { + } else if (playerHeadCount === 0) { print("YOU NEEDED A HEAD.\n"); - h = 1; - c = 0; + playerHeadCount = 1; + partFound = true; } else { print("YOU HAVE A HEAD.\n"); } break; case 4: print("4=FEELERS\n"); - if (h == 0) { + if (playerHeadCount === 0) { print("YOU DO NOT HAVE A HEAD.\n"); - } else if (a == 2) { + } else if (playerFeelerCount === 2) { print("YOU HAVE TWO FEELERS ALREADY.\n"); } else { print("I NOW GIVE YOU A FEELER.\n"); - a++; - c = 0; + playerFeelerCount ++; + partFound = true; } break; case 5: print("5=TAIL\n"); - if (b == 0) { + if (playerBodyCount === 0) { print("YOU DO NOT HAVE A BODY.\n"); - } else if (t == 1) { + } else if (playerTailCount === 1) { print("YOU ALREADY HAVE A TAIL.\n"); } else { print("I NOW GIVE YOU A TAIL.\n"); - t++; - c = 0; + playerTailCount++; + partFound = true; } break; case 6: print("6=LEG\n"); - if (l == 6) { + if (playerFeetCount === 6) { print("YOU HAVE 6 FEET ALREADY.\n"); - } else if (b == 0) { + } else if (playerBodyCount === 0) { print("YOU DO NOT HAVE A BODY.\n"); } else { - l++; - c = 0; - print("YOU NOW HAVE " + l + " LEGS.\n"); + playerFeetCount++; + partFound = true; + print("YOU NOW HAVE " + playerFeetCount + " LEGS.\n"); } break; } - x = Math.floor(6 * Math.random() + 1) ; + dieRoll = Math.floor(6 * Math.random() + 1) ; print("\n"); - date = new Date().valueOf; - while (date - new Date().valueOf < 1000000) ; - print("I ROLLED A " + x + "\n"); - switch (x) { + scrollToBottom(); + await waitNSeconds(1); + + print("I ROLLED A " + dieRoll + "\n"); + switch (dieRoll) { case 1: print("1=BODY\n"); - if (p == 1) { + if (computerBodyCount === 1) { print("I DO NOT NEED A BODY.\n"); } else { print("I NOW HAVE A BODY.\n"); - c = 0; - p = 1; + partFound = true; + computerBodyCount = 1; } break; case 2: print("2=NECK\n"); - if (q == 1) { + if (computerNeckCount === 1) { print("I DO NOT NEED A NECK.\n"); - } else if (p == 0) { + } else if (computerBodyCount === 0) { print("I DO NOT HAVE A BODY.\n"); } else { print("I NOW HAVE A NECK.\n"); - q = 1; - c = 0; + computerNeckCount = 1; + partFound = true; } break; case 3: print("3=HEAD\n"); - if (q == 0) { + if (computerNeckCount === 0) { print("I DO NOT HAVE A NECK.\n"); - } else if (r == 1) { + } else if (computerHeadCount === 1) { print("I DO NOT NEED A HEAD.\n"); } else { print("I NEEDED A HEAD.\n"); - r = 1; - c = 0; + computerHeadCount = 1; + partFound = true; } break; case 4: print("4=FEELERS\n"); - if (r == 0) { + if (computerHeadCount === 0) { print("I DO NOT HAVE A HEAD.\n"); - } else if (s == 2) { + } else if (computerFeelerCount === 2) { print("I HAVE 2 FEELERS ALREADY.\n"); } else { print("I GET A FEELER.\n"); - s++; - c = 0; + computerFeelerCount++; + partFound = true; } break; case 5: print("5=TAIL\n"); - if (p == 0) { + if (computerBodyCount === 0) { print("I DO NOT HAVE A BODY.\n"); - } else if (u == 1) { + } else if (computerTailCount === 1) { print("I DO NOT NEED A TAIL.\n"); } else { print("I NOW HAVE A TAIL.\n"); - u = 1; - c = 0; + computerTailCount = 1; + partFound = true; } break; case 6: print("6=LEGS\n"); - if (v == 6) { + if (computerFeetCount === 6) { print("I HAVE 6 FEET.\n"); - } else if (p == 0) { + } else if (computerBodyCount === 0) { print("I DO NOT HAVE A BODY.\n"); } else { - v++; - c = 0; - print("I NOW HAVE " + v + " LEGS.\n"); + computerFeetCount++; + partFound = true; + print("I NOW HAVE " + computerFeetCount + " LEGS.\n"); } break; } - if (a == 2 && t == 1 && l == 6) { + if (playerFeelerCount === 2 && playerTailCount === 1 && playerFeetCount === 6) { print("YOUR BUG IS FINISHED.\n"); - y++; + gameInProgress = false; } - if (s == 2 && p == 1 && v == 6) { + if (computerFeelerCount === 2 && computerBodyCount === 1 && computerFeetCount === 6) { print("MY BUG IS FINISHED.\n"); - y += 2; + gameInProgress = false; } - if (c == 1) + if (!partFound) continue; print("DO YOU WANT THE PICTURES"); - str = await input(); - if (str == "NO") + const showPictures = await input(); + if (showPictures.toUpperCase() === "NO") continue; print("*****YOUR BUG*****\n"); print("\n"); print("\n"); - if (a != 0) { - for (z = 1; z <= 4; z++) { - print(tab(10)); - for (x = 1; x <= a; x++) { - print("A "); - } - print("\n"); - } - } - if (h != 0) - draw_head(); - if (n != 0) { - for (z = 1; z <= 2; z++) - print(" N N\n"); - } - if (b != 0) { - print(" BBBBBBBBBBBB\n"); - for (z = 1; z <= 2; z++) - print(" B B\n"); - if (t == 1) - print("TTTTTB B\n"); - print(" BBBBBBBBBBBB\n"); - } - if (l != 0) { - for (z = 1; z <= 2; z++) { - print(tab(5)); - for (x = 1; x <= l; x++) - print(" L"); - print("\n"); - } - } - for (z = 1; z <= 4; z++) - print("\n"); + drawBug(playerFeelerCount, playerHeadCount, playerNeckCount, playerBodyCount, playerTailCount, playerFeetCount, "A"); print("*****MY BUG*****\n"); print("\n"); print("\n"); - print("\n"); - if (s != 0) { - for (z = 1; z <= 4; z++) { - print(tab(10)); - for (x = 1; x <= s; x++) { - print("F "); - } - print("\n"); - } - } - if (r != 0) - draw_head(); - if (q != 0) { - for (z = 1; z <= 2; z++) - print(" N N\n"); - } - if (p != 0) { - print(" BBBBBBBBBBBB\n"); - for (z = 1; z <= 2; z++) - print(" B B\n"); - if (u == 1) - print("TTTTTB B\n"); - print(" BBBBBBBBBBBB\n"); - } - if (v != 0) { - for (z = 1; z <= 2; z++) { - print(tab(5)); - for (x = 1; x <= v; x++) - print(" L"); - print("\n"); - } - } - for (z = 1; z <= 4; z++) + drawBug(computerFeelerCount, computerHeadCount, computerNeckCount, computerBodyCount, computerTailCount, computerFeetCount, "F"); + for (let z = 1; z <= 4; z++) print("\n"); } print("I HOPE YOU ENJOYED THE GAME, PLAY IT AGAIN SOON!!\n"); + scrollToBottom(); } main(); diff --git a/59_Lunar_LEM_Rocket/lunar.bas b/59_Lunar_LEM_Rocket/lunar.bas index db07b0a5..87cb430f 100644 --- a/59_Lunar_LEM_Rocket/lunar.bas +++ b/59_Lunar_LEM_Rocket/lunar.bas @@ -1,5 +1,5 @@ 10 PRINT TAB(33);"LUNAR" -20 PRINT TAB(l5);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" +20 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY" 25 PRINT:PRINT:PRINT 30 PRINT "THIS IS A COMPUTER SIMULATION OF AN APOLLO LUNAR" 40 PRINT "LANDING CAPSULE.": PRINT: PRINT diff --git a/69_Pizza/perl/pizza.pl b/69_Pizza/perl/pizza.pl new file mode 100755 index 00000000..7147ad49 --- /dev/null +++ b/69_Pizza/perl/pizza.pl @@ -0,0 +1,113 @@ +#!/usr/bin/perl +#use strict; +# Automatic converted by bas2perl.pl + +print ' 'x33 . "PIZZA". "\n"; +print ' 'x15 . "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY". "\n"; +print "\n"; print "\n"; print "\n"; +my @S; my @M; +print "PIZZA DELIVERY GAME". "\n"; print "\n"; +print "WHAT IS YOUR FIRST NAME? "; chomp($N = uc()); print "\n"; +print "HI, ". $N. ". IN THIS GAME YOU ARE TO TAKE ORDERS". "\n"; +print "FOR PIZZAS. THEN YOU ARE TO TELL A DELIVERY BOY". "\n"; +print "WHERE TO DELIVER THE ORDERED PIZZAS.". "\n"; print "\n"; print "\n"; +for ($I=1; $I<=16; $I++) { +$S[$I]= ; chomp($S[$I]);; +} +for ($I=1; $I<=4; $I++) { +$M[$I]= ; chomp($M[$I]);; +} +# TO DATA SEGMENT; +# TO DATA SEGMENT; +print "MAP OF THE CITY OF HYATTSVILLE". "\n"; print "\n"; +print " -----1-----2-----3-----4-----". "\n"; +$K=4; +for ($I=1; $I<=4; $I++) { +print "-". "\n"; print "-". "\n"; print "-". "\n"; print "-". "\n"; +print $M[$K]; +$S1=16-4*$I+1; +print " ". $S[$S1]. " ". $S[$S1+1]. " ". $S[$S1+2]. " "; +print $S[$S1+3]. " ". $M[$K]. "\n"; +$K=$K-1; +} +print "-". "\n"; print "-". "\n"; print "-". "\n"; print "-". "\n"; +print " -----1-----2-----3-----4-----". "\n"; print "\n"; +print "THE OUTPUT IS A MAP OF THE HOMES WHERE". "\n"; +print "YOU ARE TO SEND PIZZAS.". "\n"; print "\n"; +print "YOUR JOB IS TO GIVE A TRUCK DRIVER". "\n"; +print "THE LOCATION OR COORDINATES OF THE". "\n"; +print "HOME ORDERING THE PIZZA.". "\n"; print "\n"; + +Line520: +print "DO YOU NEED MORE DIRECTIONS? "; chomp($A = uc()); +if ($A eq "YES") { goto Line590; } +if ($A eq "NO") { goto Line750; } +print "'YES' OR 'NO' PLEASE, NOW THEN,". "\n"; goto Line520; + +Line590: +print "\n"; print "SOMEBODY WILL ASK FOR A PIZZA TO BE". "\n"; +print "DELIVERED. THEN A DELIVERY BOY WILL". "\n"; +print "ASK YOU FOR THE LOCATION.". "\n"; print " EXAMPLE:". "\n"; +print "THIS IS J. PLEASE SEND A PIZZA.". "\n"; +print "DRIVER TO ". $N. ". WHERE DOES J LIVE?". "\n"; +print "YOUR ANSWER WOULD BE 2,3". "\n"; print "\n"; +print "UNDERSTAND? "; chomp($A = uc()); +if ($A eq "YES") { goto Line690; } +print "THIS JOB IS DEFINITELY TOO DIFFICULT FOR YOU. THANKS ANYWAY". "\n"; +goto Line999; + +Line690: +print "GOOD. YOU ARE NOW READY TO START TAKING ORDERS.". "\n"; print "\n"; +print "GOOD LUCK!!". "\n"; print "\n"; + +Line750: +for ($I=1; $I<=5; $I++) { +$S=int(rand(1)*16+1); print "\n"; +print "HELLO ". $N. "'S PIZZA. THIS IS ". $S[$S]. "."; +print " PLEASE SEND A PIZZA.". "\n"; + +Line780: +print " DRIVER TO ". $N. ": WHERE DOES ". $S[$S]. " LIVE"; +print "? "; chomp($Inp_ = uc()); ($A[1],$A[2])= split(/,/, $Inp_); +$T=$A[1]+($A[2]-1)*4; +if ($T eq $S) { goto Line920; } +print "THIS IS ". $S[$T]. ". I DID NOT ORDER A PIZZA.". "\n"; +print "I LIVE AT ". $A[1]. ",". $A[2]. "\n"; +goto Line780; + +Line920: +print "HELLO ". $N. ". THIS IS ". $S[$S]. ", THANKS FOR THE PIZZA.". "\n"; +} +print "\n"; print "DO YOU WANT TO DELIVER MORE PIZZAS? "; chomp($A = uc()); +if ($A eq "YES") { goto Line750; } +print "\n"; print "O.K. ". $N. ", SEE YOU LATER!". "\n"; print "\n"; + +Line999: +exit; + + + +__DATA__ +A +B +C +D +E +F +G +H +I +J +K +L +M +N +O +P +1 +2 +3 +4 + + +