Re: A85: AI
Re: A85: AI
i'll upload it to:
it's not there yet, but should be by 6:00 EDT. as for tierra, someone
send me a link to it at: firstname.lastname@example.org, so i can post it
on tiroms (which no longer holds roms)
EMAIL: email@example.com; firstname.lastname@example.org;
ICQ: 9437474 AOL IM: l0rdg0at42
On Thu, 15 Oct 1998 22:17:27 -0700 "David Whittaker" <email@example.com>
>where can I get the comp game?
>"DoN't caLL Me CraZy. OvEr 75% oF my PeRSonAliTies arE SANe."
>> From: firstname.lastname@example.org
>> To: email@example.com
>> Subject: Re: A85: AI
>> Date: Friday, October 09, 1998 7:42 PM
>> look inside.
>> EMAIL: firstname.lastname@example.org; email@example.com;
>> firstname.lastname@example.org; email@example.com
>> ICQ: 9437474 AOL IM: l0rdg0at42
>> On Fri, 09 Oct 1998 16:23:41 PDT "Robert Caldwell"
>> >Actually, it's a great idea, there's a game made in qbasic called
>> >something like "Robots." You basically have a robot that has 3
>> well, there was a game called CROBOTS that came out in 1986 that was
>> compiler and simulator of the bots. there have been numerous ports
>> pascal, java, qbasic, and even asm. now it's my turn to bring it to
>> 85. oh, yeah, i need to find a romcall that the 86 can't emulate.
>> LIVE THE 85!! lemme post the crobots crap at the end of this.
>> >scanner, gun, and wheels. The wheels can go forward, back, and
>> >left or right a certain degree. Above which is a "turret" which
>> >in a different angle to the wheels, and has the ability to "turn"
>> >"fire." Above the gun is another "turret" with a scanner which
>> >a different degree as the other 2. The scanner only scans in one
>> >direction and has 3 major scans: distance, object, and friend/foe.
>> >three of these are done at once. Distance is from 0 (close combat,
>> >destruction this close would cause self damage) to 16 (maximum
>> >the "gun" reaches). Object is a number from 0 to 4: 0=too far for
>> >(nothing within 16 units), 1=robot, 2=obstruction, 3=wall. Each
>> >is tagged, and if this tag on the "robot" in scan is equal to the
>> >the robot scanning (meaning friendly robot), then it's 0, if not
>> >bit meaning
>> >7 friend/foe
>> >6-5 object
>> >4-0 distance
>> >The robot also had a damage counter (256 points divided as the
>> >wishes for each of the three parts), and an auto-destruct which
>> >quite a bit in 0 range and a little in 1 range.
>> >Just giving a standpoint other than mice to use as the AI
>> >loved this program, but I lost it when I formatted my drive
>> >find it on the net either).
>> >I hope you like the info I gave.
>> >p.s. I have a massive headache, so if any of this doesn't make
>> >blame it on my head.
>> >p.p.s. You could add other stuff like a fueling "dock" or repair
>> 5-1. Battlefield
>> The battlefield is a 1,000 by 1,000 meter square. A wall
>> surrounds the perimeter, so that a robot running into the
>> will incur damage.
>> The lower left corner has the coordinates x = 0, y = 0; the
>> right corner has the coordinated x = 999, y = 999.
>> The compass system is oriented so that due east (right) is 0
>> degrees, 90 is north, 180 is west, 270 is south. One degree
>> below due east is 359.
>> 135 90 45
>> \ | /
>> \ | /
>> 180 --- x --- 0
>> / | \
>> / | \
>> 225 270 315
>> The scanner is an optical device that can instantly scan any
>> chosen heading, 0-359. The scanner has a maximum resolution
>> +/- 10 degrees. This enables the robot to quickly scan the
>> at a low resolution, then use maximum resolution to pinpoint
>> 5-3. Robot defense
>> The only defense available are the motor drive and status
>> registers. The motor can be engaged on any heading, 0-359,
>> speeds from 0-100 percent of power. There are acceleration
>> deacceleration factors. A speed of 0 stops the motor.
>> be negotiated at speeds of 50% and less, in any direction.
>> course, the motor drive can be engaged any time, and is
>> on offense when a target is beyond the 700 meter range of
>> Certain status registers provide feedback to the robot. The
>> primary registers indicate the percent of damage, and
>> and y locations on the battlefield. Another register
>> current drive speed.
>> 5-4. Disabling opponents
>> A robot is considered dead when the damage reaches 100%.
>> of damage is inflicted as follows:
>> 2% - collision into another robot (both robots in a
>> collision receive damage) or into a wall. A
>> collision also causes the motor drive to
>> and speed is reduced to 0.
>> 3% - a missile exploding within a 40 meter radius.
>> 5% - a missile exploding within a 20 meter radius.
>> 10% - a missile exploding within a 5 meter radius.
>> Damage is cumulative, and cannot be repaired. However, a
>> does not loose any mobility, fire potential, etc. at high
>> levels. In other words, a robot at 99% damage performs
>> as a robot with no damage.
>> (erm... fixed width makes it ok)
>> +------------------------------------+ 1 fubar.r
>> | | D% 015 Sc 218
>> | \|/ 1 | Sp 000 Hd 090
>> | (missile exploding) -#- | ------------------
>> | /|\ | 2 snafu.r
>> (y | | D% 050 Sc 275
>> | + (missiles | Sp 100 Hd 180
>> a | + flying) | ------------------
>> x | 2 | 3 bimbo.r
>> i | | D% 000 Sc 045
>> s) | 3 | Sp 000 Hd 000
>> | / | ------------------
>> | (robots) ----\ | 4 kumquat.r
>> | 4 | D% 100 Sc 050
>> | | Sp 000 Hd 335
>> | |
>> | |
>> +------------------------------------+ CPU Cycle: 4500
>> (x=0,y=0) (x axis)
>> scan (degree,resolution)
>> The scan() function invokes the robot's scanner, at a
>> degree and resolution. scan() returns 0 if no robots are
>> within the scan range or a positive integer representing the
>> range to the closest robot. Degree should be within the
>> 0-359, otherwise degree is forced into 0-359 by a modulo 360
>> operation, and made positive if necessary. Resolution
>> the scanner's sensing resolution, up to +/- 10 degrees.
>> range = scan(45,0); /* scan 45, with no variance */
>> range = scan(365,10); /* scans the range from 355 to 15
>> cannon (degree,range)
>> The cannon() function fires a missile heading a specified
>> and direction. cannon() returns 1 (true) if a missile was
>> or 0 (false) if the cannon is reloading. Degree is forced
>> the range 0-359 as in scan(). Range can be 0-700, with
>> ranges truncated to 700.
>> degree = 45; /* set a direction to test */
>> if ((range=scan(degree,2)) > 0) /* see if a target is
>> cannon(degree,range); /* fire a missile */
>> drive (degree,speed)
>> The drive() function activates the robot's drive mechanism,
>> specified heading and speed. Degree is forced into the
>> 0-359 as in scan(). Speed is expressed as a percent, with
>> maximum. A speed of 0 disengages the drive. Changes in
>> direction can be negotiated at speeds of less than 50
>> drive(0,100); /* head due east, at maximum speed */
>> drive(90,0); /* stop motion */
>> The damage() function returns the current amount of damage
>> incurred. damage() takes no arguments, and returns the
>> of damage, 0-99. (100 percent damage means the robot is
>> completely disabled, thus no longer running!)
>> d = damage(); /* save current state */
>> ; ; ; /* other instructions */
>> if (d != damage()) /* compare current state to prior
>> drive(90,100); /* robot has been hit, start moving */
>> d = damage(); /* get current damage again */
>> speed ()
>> The speed() function returns the current speed of the robot.
>> speed() takes no arguments, and returns the percent of
>> 0-100. Note that speed() may not always be the same as the
>> drive(), because of acceleration and deacceleration.
>> drive(270,100); /* start drive, due south */
>> ; ; ; /* other instructions */
>> if (speed() == 0) /* check current speed */
>> drive(90,20); /* ran into the south wall, or another
>> loc_x ()
>> loc_y ()
>> The loc_x() function returns the robot's current x axis
>> loc_x() takes no arguments, and returns 0-999.
>> The loc_y() function is similar to loc_x(), but returns the
>> current y axis position.
>> drive (180,50); /* start heading for west wall */
>> while (loc_x() > 20)
>> ; /* do nothing until we are close */
>> drive (180,0); /* stop drive */
>> rand (limit)
>> The rand() function returns a random number between 0 and
>> up to 32767.
>> degree = rand(360); /* pick a random starting point */
>> range = scan(degree,0); /* and scan */
>> sqrt (number)
>> The sqrt() returns the square root of a number. Number is
>> positive, if necessary.
>> x = x1 - x2; /* compute the classical distance
>> y = y1 - y2; /* between two points (x1,y1) (x2,y2) */
>> distance = sqrt((x*x) - (y*y));
>> sin (degree)
>> cos (degree)
>> tan (degree)
>> atan (ratio)
>> These functions provide trigometric values. sin(), cos(),
>> and tan(), take a degree argument, 0-359, and returns the
>> trigometric value times 100,000. The scaling is necessary
>> the CROBOT cpu is an integer only machine, and trig values
>> between 0.0 and 1.0. atan() takes a ratio argument that has
>> scaled up by 100,000, and returns a degree value, between
>> +90. The resulting calculation should not be scaled to the
>> actual value until the final operation, as not to lose
>> See programming examples for usage
>> as you can see, i have a shitload of work to do. i liked xc1701
>> ability to track a guy in an array... perhaps that may save me some
>> i'm working on this project with a good friend of mine, who ISN'T
>> this list. we plan to beta test on you guys. distribution is not
>> permitted. source code will NOT be released until (maybe) final
>> porting to other calcs will be handled by us.
>> You don't need to buy Internet access to use free Internet e-mail.
>> Get completely free e-mail from Juno at http://www.juno.com
>> or call Juno at (800) 654-JUNO [654-5866]
You don't need to buy Internet access to use free Internet e-mail.
Get completely free e-mail from Juno at http://www.juno.com
or call Juno at (800) 654-JUNO [654-5866]
- Re: A85: AI
- From: "David Whittaker" <firstname.lastname@example.org>