Re: A85: AI


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

Re: A85: AI




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]


Follow-Ups: