Skip to content

Commit 89a01d3

Browse files
Merge pull request #855 from kbrannen/42_gunner-perl
added 42-gunner for perl
2 parents 3ebb958 + abf0520 commit 89a01d3

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

42_Gunner/perl/gunner.pl

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/usr/bin/perl
2+
3+
# Gunner program in Perl
4+
# Required extensive restructuring to remove all of the GOTO's.
5+
# Translated by Kevin Brannen (kbrannen)
6+
7+
use strict;
8+
use warnings;
9+
10+
# globals
11+
my $Max_range = int(40000*rand(1)+20000);
12+
my $Total_shots = 0;
13+
my $Games = 0;
14+
15+
print "\n";
16+
print " " x 30, "GUNNER\n";
17+
print " " x 15, "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n\n\n";
18+
19+
print "YOU ARE THE OFFICER-IN-CHARGE, GIVING ORDERS TO A GUN\n";
20+
print "CREW, TELLING THEM THE DEGREES OF ELEVATION YOU ESTIMATE\n";
21+
print "WILL PLACE A PROJECTILE ON TARGET. A HIT WITHIN 100 YARDS\n";
22+
print "OF THE TARGET WILL DESTROY IT.\n\n";
23+
print "MAXIMUM RANGE OF YOUR GUN IS $Max_range YARDS.\n\n";
24+
25+
GAME: while (1)
26+
{
27+
my $target_dist = int($Max_range * (.1 + .8 * rand(1)));
28+
my $shots = 0;
29+
print "DISTANCE TO THE TARGET IS $target_dist YARDS.\n\n";
30+
while (1)
31+
{
32+
my $elevation = get_elevation(); # in degrees
33+
$shots++;
34+
my $dist = int($target_dist - ($Max_range * sin(2 * $elevation / 57.3)));
35+
if (abs($dist) < 100)
36+
{
37+
print "*** TARGET DESTROYED *** $shots ROUNDS OF AMMUNITION EXPENDED.\n";
38+
$Total_shots += $shots;
39+
if ($Games++ == 4)
40+
{
41+
print "\n\nTOTAL ROUNDS EXPENDED WERE: $Total_shots\n";
42+
if ($Total_shots > 18) { print "BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!\n"; }
43+
else { print "NICE SHOOTING !!\n"; }
44+
last;
45+
}
46+
print "\nTHE FORWARD OBSERVER HAS SIGHTED MORE ENEMY ACTIVITY...\n";
47+
next GAME;
48+
}
49+
if ($dist > 100) { print "SHORT OF TARGET BY ", abs($dist)," YARDS.\n"; }
50+
else { print "OVER TARGET BY ", abs($dist), " YARDS.\n"; }
51+
52+
if ($shots >= 5)
53+
{
54+
print "\nBOOM !!!! YOU HAVE JUST BEEN DESTROYED BY THE ENEMY.\n\n\n\n";
55+
print "BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!\n";
56+
last;
57+
}
58+
}
59+
60+
print "\nTRY AGAIN (Y OR N): ";
61+
chomp(my $ans=uc(<>));
62+
if ($ans ne "Y") { last; }
63+
else { $Games = 0; $Total_shots = 0; }
64+
}
65+
66+
print "\nOK. RETURN TO BASE CAMP.\n";
67+
68+
####################################
69+
70+
sub get_elevation
71+
{
72+
my $elevation;
73+
while (1)
74+
{
75+
print "\nELEVATION: ";
76+
chomp($elevation = <>);
77+
if ($elevation > 89) { print "MAXIMUM ELEVATION IS 89 DEGREES.\n"; }
78+
elsif ($elevation < 1) { print "MINIMUM ELEVATION IS ONE DEGREE.\n"; }
79+
else { return $elevation; }
80+
}
81+
}

0 commit comments

Comments
 (0)