How does it feel to be beaten by a
Girl?
(I guess it's about time this bot had a page...)
Bot Name
Girl
Author
Kawigi
Version Log
1.0 - Created for
Alcatraz's
ExtendsRobotCompetition. Most of the code is
ExtendsRobot-ized from a dev version of
Coriantumr I happened to have handy at the time. No
real one-on-one movement yet, but since it's the first GF gun in the
Robot world, and it's melee movement stays out of HOT's way reasonably well, I don't think it will matter. I was a bit late for the first ERC, but I was in the second one (which was the next day), and started the first ERC "dynasty" :-), winning 1-on-1 and melee for a month.
1.1 - Now has a one-on-one movement and radar. Made to beat Krazy 1.4. Back to the drawing board, Alcatraz! (that was my remark at the time, anyways) Looks like this version was on top for 6 months, but only 3 tournaments happened in this time (what? Robots are fun!)
1.2 - It's been awhile, and Alcatraz didn't tell me he started beating Girl again. I improved the accuracy of the gun a bit and tweaked the one-on-one movement. This should give me back the ExtendsRobot crown! Currently on the longest winning streak in ERC history, winning 4 straight tournaments (and it plans on winning the next, probably giving it the all-time highest 1-on-1 "career score" (for lack of a better name), or at least tying for it).
Extends
Robot!
What's special about it?
Look above. It extends
Robot. And it kicks your
Robot's butt. Or it would if your
Robot had a butt. Yeah. I'm witty.
Great, I want to try it. Where can I download it?
https://www.robocoderepository.com/BotDetail.jsp?id=2124
How competitive is it?
Against
Robots, it's the opponent they have nightmares about. If they slept that is. Man, this personification thing on this page isn't working. Against
AdvancedRobots, it's closer to the middle of the field. It's a solid bot, but it doesn't move quite well enough or fire frequently enough to be a great bot.
In the ExtendsRobotCompetition, it has won every melee/skirmish battle that's been run, often by some margin. This isn't surprising, really, since it's based on Coriantumr's movement (and gun). Various versions of Girl have also won more than half of the 1-on-1 tournaments (but Krazy typically comes out with a version to annoy me periodically).
How does it move?
Originally, it used
MinimumRiskMovement for everything, very similar to that described in
MeleeStrategy/UnderstandingCoriantumr. Since then, it has evolved the 1-on-1 movement to be more like what you would get if you took
Fhqwhgads, added
WallSmoothing, and converted it into discrete, linear, jerky movements. It also has a
Musashi-esque behavior to avoid
HeadOnTargeting until it gets hit a few times.
How does it fire?
Very carefully. It features the *very first* (to my knowledge)
GuessFactorTargeting gun for a
Robot. It is adapted to
Robot-ism as well as
Melee-ism because it uses
FloodMini's waves, which are resilient to missed scans (they interpolate movement linearly during the missed scans, which, one would think, would be a reasonable approximation for
Robots). This is good, because I only am really guaranteed to scan enemies every 50 scans or so (but sometimes I get lucky and steal a scan while I'm turning or moving).
In the beginning of a 1-on-1 battle, it doesn't change direction unless it feels like it has to (and don't say it doesn't have feelings, it's a
Girl after all), for sort of a
MusashiTrick effect of avoiding
HeadOnTargeting. After that it moves randomly and hopefully more unpredictably than your bot does, so it can kick the crap out of it.
In melee, it tries more to avoid getting fired at, but if there is someone it thinks is firing at it, it moves more-or-less perpendicularly to that bot.
How does the melee strategy differ from one-on-one strategy?
Aside from what's described elsewhere on this page, the radar strategy is mildly interesting. Basically between movements, it spins its radar a full circle in melee, or spins it about as far as it thinks it needs to in 1-on-1 (maybe it spins it the rest of the way if it doesn't see the enemy?)
How does it select a target to attack/avoid in melee?
I think it aims at the target closest to it if it knows which that is.
What does it save between rounds and matches?
Between rounds, it saves
GuessFactorTargeting and probably some other trivial things. Between matches, it can't save anything, because it's a
Robot.
Where did you get the name?
Actually, I really didn't know what to call it (I don't even remember what the working name was), but I decided this one seemed funny.
Can I use your code?
Sure, but don't make a better bot with it (at least without showing me!)
What's next for your robot?
Probably beating some future version of
Krazy again, or someone else's new kick-butt
Robot. I suspect the next version will hold a more aggressive distance in
OneOnOne.
Nope. It's the best in its class! It is
Krazy and
UnderDark3's
WhiteWhale, though.
What other robot(s) is it based on?
Coriantumr.
Comments, questions, feedback:
Interesting. How did you manage the radar? (as you can't use set
TurnRadarRight(....) in extends Robot)--
Starrynte
If you watch Girl closely (and in slow motion), you'll notice she spins her radar between motions (in one-on-one, I think the radar management is a little bit smarter, too). Also, when she turns or moves, sometimes she picks up a free scan :-) The reason the targeting still works alright is because of something I've done for a long time, which is linear interpolation of missed scans in my waves (which is an especially good estimation against ExtendsRobots. -- Kawigi
How do you end the tick with extends Robot? --Starrynte
lol. Have you ever written an ExtendsRobot? The basic idea with a Robot is that you don't have "setXXX" calls, so every movement call is blocking. Calling "ahead(x);" is the same as calling "setAhead(x);while (getDistanceRemaining?() != 0)execute();" and calling "fire(x);" is the same as calling "setFire(x);execute();". That makes it so that you can move at the same time as you turn, or turn your radar at the same time as you move, or even fire at the same time as you do anything else, with the exception that you can do things concurrently if you do some of them in an event handler (for instance, if you get a scan while you're moving, you could turn your gun and shoot in onScannedRobt?, but you'd still be moving, presumably from your run method). -- Kawigi