Re: A85: AI


[Prev][Next][Index][Thread]

Re: A85: AI




i'll upload it to:

http://tiroms.home.ml.org/ai

it's not there yet, but should be by 6:00 EDT.  as for tierra, someone
send me a link to it at:  lordgoat@somethingorother.com, so i can post it
on tiroms (which no longer holds roms)

-Greg

EMAIL: l0rdg0at@juno.com; lordgoat@somethingorother.com;
l0rdg0at@hotmail.com; milewskg@stuy.edu
ICQ: 9437474     AOL IM: l0rdg0at42

On Thu, 15 Oct 1998 22:17:27 -0700 "David Whittaker" <tubadave@sonet.net>
writes:
>
>where can I get the comp game?
>
>Dave
>
>---------------------------------
>"DoN't caLL Me CraZy.  OvEr 75% oF my PeRSonAliTies arE SANe."
>-my psychyatrist
>
>----------
>> From: l0rdg0at@juno.com
>> To: assembly-85@lists.ticalc.org
>> Subject: Re: A85: AI
>> Date: Friday, October 09, 1998 7:42 PM
>> 
>> 
>> look inside.
>> 
>> -Greg
>> 
>> EMAIL: l0rdg0at@juno.com; lordgoat@somethingorother.com;
>> l0rdg0at@hotmail.com; milewskg@stuy.edu
>> ICQ: 9437474     AOL IM: l0rdg0at42
>> 
>> On Fri, 09 Oct 1998 16:23:41 PDT "Robert Caldwell" 
><rc_ware@hotmail.com>
>> writes:
>> >
>> >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 
>parts: 
>> 
>> well, there was a game called CROBOTS that came out in 1986 that was 
>a c
>> compiler and simulator of the bots.  there have been numerous ports 
>to
>> pascal, java, qbasic, and even asm.  now it's my turn to bring it to 
>the
>> 85.   oh, yeah, i need to find a romcall that the 86 can't emulate.  
>LONG
>> LIVE THE 85!! lemme post the crobots crap at the end of this.
>> 
>> > 
>> >scanner, gun, and wheels.  The wheels can go forward, back, and 
>rotate 
>> >
>> >left or right a certain degree.  Above which is a "turret" which 
>faces 
>> >
>> >in a different angle to the wheels, and has the ability to "turn" 
>and 
>> >"fire."  Above the gun is another "turret" with a scanner which 
>faces 
>> >in 
>> >a different degree as the other 2.  The scanner only scans in one 
>> >direction and has 3 major scans:  distance, object, and friend/foe. 
> 
>> >All 
>> >three of these are done at once.  Distance is from 0 (close combat, 
>
>> >destruction this close would cause self damage) to 16 (maximum 
>> >distance 
>> >the "gun" reaches).  Object is a number from 0 to 4: 0=too far for 
>> >scan 
>> >(nothing within 16 units), 1=robot, 2=obstruction, 3=wall.  Each 
>robot 
>> >
>> >is tagged, and if this tag on the "robot" in scan is equal to the 
>tag 
>> >of 
>> >the robot scanning (meaning friendly robot), then it's 0, if not 
>1...
>> >bit   meaning
>> >7     friend/foe
>> >6-5   object
>> >4-0   distance
>> >The robot also had a damage counter (256 points divided as the 
>player 
>> >wishes for each of the three parts), and an auto-destruct which 
>> >damages 
>> >quite a bit in 0 range and a little in 1 range.
>> >
>> >Just giving a standpoint other than mice to use as the AI 
>character.  
>> >I 
>> >loved this program, but I lost it when I formatted my drive 
>(couldn't 
>> >find it on the net either).
>> >
>> >I hope you like the info I gave.
>> >
>> >-Rob
>> >p.s.  I have a massive headache, so if any of this doesn't make 
>sense, 
>> >I 
>> >blame it on my head.
>> >p.p.s.  You could add other stuff like a fueling "dock" or repair 
>> >"area."
>> >
>> >
>> 
>>         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 
>wall
>>         will incur damage.
>> 
>>         The lower left corner has the coordinates x = 0, y = 0; the 
>upper
>>         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 
>of  
>>         +/- 10 degrees.  This enables the robot to quickly scan the 
>field
>>         at a low resolution, then use maximum resolution to pinpoint 
>an
>>         opponent.
>> 
>> 
>>         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, 
>in
>>         speeds from 0-100 percent of power.  There are acceleration 
>and
>>         deacceleration factors.  A speed of 0 stops the motor.  
>Turns can
>>         be negotiated at speeds of 50% and less, in any direction.  
>Of
>>         course, the motor drive can be engaged any time, and is 
>necessary
>>         on offense when a target is beyond the 700 meter range of 
>the
>>         cannon.
>> 
>>         Certain status registers provide feedback to the robot. The
>>         primary registers indicate the percent of damage, and 
>current x
>>         and y locations on the battlefield.  Another register 
>provides
>>         current drive speed.
>> 
>> 
>>         5-4.  Disabling opponents
>> 
>>         A robot is considered dead when the damage reaches 100%.  
>Percent
>>         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 
>disengage,
>>                      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 
>robot
>>         does not loose any mobility, fire potential, etc. at high 
>damage
>>         levels.  In other words, a robot at 99% damage performs 
>equally
>>         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 
>specified
>>         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 
>range
>>         0-359, otherwise degree is forced into 0-359 by a modulo 360
>>         operation, and made positive if necessary.  Resolution 
>controls
>>         the scanner's sensing resolution, up to +/- 10 degrees.
>>         Examples:
>>            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 
>range
>>         and direction.  cannon() returns 1 (true) if a missile was 
>fired,
>>         or 0 (false) if the cannon is reloading.  Degree is forced 
>into
>>         the range 0-359 as in scan().  Range can be 0-700, with 
>greater
>>         ranges truncated to 700.
>>         Examples:
>>            degree = 45;    /* set a direction to test */
>>            if ((range=scan(degree,2)) > 0) /* see if a target is 
>there */
>>              cannon(degree,range);  /* fire a missile */
>> 
>>         drive (degree,speed)
>>         The drive() function activates the robot's drive mechanism, 
>on a 
>>         specified heading and speed.  Degree is forced into the 
>range
>>         0-359 as in scan().  Speed is expressed as a percent, with 
>100 as
>>         maximum.  A speed of 0 disengages the drive.  Changes in
>>         direction can be negotiated at speeds of less than 50 
>percent.
>>         Examples:
>>            drive(0,100);  /* head due east, at maximum speed */
>>            drive(90,0);   /* stop motion */
>> 
>>         damage()
>>         The damage() function returns the current amount of damage
>>         incurred.  damage() takes no arguments, and returns the 
>percent
>>         of damage, 0-99. (100 percent damage means the robot is
>>         completely disabled, thus no longer running!) 
>>         Examples:
>>           d = damage();       /* save current state */
>>           ; ; ;               /* other instructions */
>>           if (d != damage())  /* compare current state to prior 
>state */
>>           {
>>             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 
>speed,
>>         0-100.  Note that speed() may not always be the same as the 
>last
>>         drive(), because of acceleration and deacceleration.
>>         Examples:
>>           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 
>robot*/
>>           }
>> 
>> 
>>         loc_x ()
>>         loc_y ()
>>         The loc_x() function returns the robot's current x axis 
>location.
>>         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.
>>         Examples:
>>            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 
>limit, 
>>         up to 32767.
>>         Examples:
>>           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 
>made
>>         positive, if necessary.
>>         Examples:
>>            x = x1 - x2;     /* compute the classical distance 
>formula */
>>            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 
>since
>>         the CROBOT cpu is an integer only machine, and trig values 
>are
>>         between 0.0 and 1.0.  atan() takes a ratio argument that has 
>been
>>         scaled up by 100,000, and returns a degree value, between 
>-90 and
>>         +90.  The resulting calculation should not be scaled to the
>>         actual value until the final operation, as not to lose 
>accuracy.
>>         See programming examples for usage
>> 
>> 
>> as you can see, i have a shitload of work to do.  i liked xc1701 
>II's
>> ability to track a guy in an array... perhaps that may save me some 
>time.
>>  i'm working on this project with a good friend of mine, who ISN'T 
>on
>> this list.   we plan to beta test on you guys. distribution is not
>> permitted.  source code will NOT be released until (maybe) final 
>version.
>>  porting to other calcs will be handled by us.
>> 
>> -Greg
>> 
>> ___________________________________________________________________
>> 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]


References: