View source for Talk:Main Page

From Robowiki
Jump to navigation Jump to search

Contents

Thread titleRepliesLast modified
Wiki back online022:32, 8 January 2014
Running Error - Robot is not stopping, forcing a stop117:19, 7 December 2013
MediaWiki update603:56, 18 October 2013
NodeWar, Code & Conquer016:06, 5 September 2013
Spamming Without Links319:43, 26 July 2013
Update problems2101:55, 11 May 2013
Wikipedia article603:25, 18 April 2013
Import Robot to Robocode113:06, 2 April 2013
FightCodeGame ?2903:21, 20 March 2013
Is it ethical to edit other people's bot/user pages?517:05, 19 March 2013
While loop in the 'run' method214:31, 5 November 2012
Help! Since I installed Robocode, my original Java isn't working anymore201:15, 5 November 2012
funny "Robocode has peaked" quote1816:42, 27 September 2012
3D Model213:33, 19 September 2012
Modifying the Robocode Game.503:00, 29 August 2012
state of the wiki1422:17, 18 June 2012
New to Robocode412:21, 9 June 2012
Robocode JGAP User Manual117:47, 11 May 2012
Robot vs Advanced robot617:44, 11 May 2012
Slow RoboWiki205:46, 9 May 2012
First page
First page
Last page
Last page

Wiki back online

Thanks for bringing the wiki back online!

MN (talk)22:32, 8 January 2014

Running Error - Robot is not stopping, forcing a stop

Edited by 2 users.
Last edit: 16:43, 7 December 2013

When I start the battlefield,my robot and other enemy are frozen. The println messages are not displayed in the robot console. But the command prompt shows the following error. I check that the cause of error is the addition of node in my queue (queue.add(n)). However, this line of code shall be fine i guess. So I would like to ask how to solve this error message? (this part of my program is for path finding using bfs)

Thank you.


          • BATTLE 1, ROUND 1 *****

TURN 1: StudentRobot* (1) hard deadline exceeded - 532809us

Err> Robot StudentRobot* (1) is not stopping. Forcing a stop.

Err> Robot StudentRobot* (2) is not stopping. Forcing a stop.

Average computation time per turn: 511706

Max turn computation time: 532809

	private boolean pathFinding_BFS(Node start, Node end){
		LinkedList<Node> queue = new LinkedList<Node>();
		queue.add(start);
		start.setMarked();
		while (!queue.isEmpty()){
			Node temp = (Node)queue.poll();
			System.out.println("first node:" + temp.getPointInPath().getX() + " y " + temp.getPointInPath().getY());
			if (temp.equals(end)){
				temp.setPrevNodeInPath(temp.getPrevNodeInPath());
				return true;
			}else{
				for (Node n : temp.getAdjacentNode()){	
					System.out.println("in node:" + n.getPointInPath().getX() + " y " + 
n.getPointInPath().getY());
					if (!n.isMarked()){
						n.setMarked();
						n.setPrevNodeInPath(temp);
						System.out.println("test n");
						queue.add(n);  //problem here
					}
				}
			}
		}
		return false;
	}
	

	public  List<Point> getShortestPath(Point start){
		Node src = new Node(start);
		List<Point> path = new ArrayList<Point>();
		for (int i=0;i<endup.size();i++){
			Node destination = new Node(endup.get(i));
			if (pathFinding_BFS(src, destination)){
				while (destination.getPrevNodeInPath() != null){
					destination = destination.getPrevNodeInPath();
					path.add(destination.getPointInPath());
				}
				Collections.reverse(path);
				return path;
			}
		}
		return path;
	}
Lavenderwong (talk)08:03, 7 December 2013

I don't see any clear problems with that code there. The only way I could see it looping forever is if either setMarked and isMarked are not working correctly, or some other code being called is unsetting the marks in the middle of that loop.

It is possible that this search is just plain taking far too long (>533ms on your computer) because of there being too many nodes to search before it finds the desired end point. How many nodes are you running this code with? If this is indeed the case, you should do one or both of the following: 1) Reduce the number of nodes, and/or 2) Switch from a full breadth first search to a more efficient algorithm such as A*

To figure out what the problem is, I would tend to suggest running this under a debugger, and step through what is happening.

EDIT: Oh, and another possible thing that comes to mind, is perhaps your problem has nothing to do with your node search code. Maybe your robot is just never calling any of the methods that signal to Robocode that has finished it's turn.

Rednaxela (talk)17:05, 7 December 2013
 

MediaWiki update

So I updated MediaWiki to 1.19 and the LiquidThreads extension. The MediaWiki update script failed when dropping some index after updating LiquidThreads, but everything seems to be working (and wasn't before running the script), so I'm hoping everything's ok and please just let me know if you see any problems. The update script ran OK for just the MediaWiki upgrade, but some things were still broken due to the LiquidThreads incompatibility. Everything's backed up so I'm not too worried - I think it's mainly LiquidThreads that might be messed up.

The wiki font is also back to default size. I'm leaving it for the moment but let me know what you guys think - I'm not sure if I was the only one that wanted it bigger before anyway.

We need PHP 5.3.6 for MediaWiki 1.20, and for that I think we need to upgrade Ubuntu, so that won't happen until I can coordinate that with David.

Voidious (talk)05:33, 8 May 2013

Shoot, we also lost Twitter on the sidebar. I'll get that stuff fixed up tomorrow. And this new LiquidThreads rendering is kind of weird...

Voidious (talk)05:34, 8 May 2013
 

From memory, you might be able to get around updating ubuntu by adding the 'backports' repository, if it isn't already in. I don't play around with *nix enough these days to be confident with making these kinds of changes =)

Skilgannon (talk)11:27, 8 May 2013
 

Using this CSS will make the new liquid threads more tolerable (at least to me).

.lqt-post-wrapper {
	border-style: solid none none solid;
	border-color: silver;
	border-width: 1px !important;
	background: #fff;
}

.thread-collapse-control > a {
	background: none;
	width: 10px;
	height: 10px;
	border: 1px solid silver;
}

Depending on how you apply it, you may need to include a few more !important tags, I tested it in Stylish on Google Chrome.

Chase12:37, 8 May 2013
 

I liked the font size the way it was before.

Also, when you update the sidebar, try putting the Twitter feed below the Toolbox. I think that would be more useful.

Thanks

Sheldor (talk)15:13, 8 May 2013
 

You do not have permission to edit this page, for the following reasons:

  • The action you have requested is limited to users in the group: Users.
  • You must confirm your email address before editing pages. Please set and validate your email address through your user preferences.

You can view and copy the source of this page.

Return to Thread:Talk:Main Page/MediaWiki update/reply (5).

 

Alright, I've finally:

  • Reverted the font to non-tiny.
  • Fixed the RoboRumble Twitter feed [1]
  • Restored the @robowiki Twitter feed on the sidebar (actually it's a new one, I guess they killed the old widget).
  • Moved Twitter feed below toolbox, as I think a couple people suggested.
  • Noted that the new widget can hide @ replies, so I'm not afraid to respond to people as @robowiki on Twitter any more. :-P
Voidious (talk)03:56, 18 October 2013
 

NodeWar, Code & Conquer

A couple more new web based games got on my radar recently.

  • Nodewar - Sleak, web-based, Javascript. Feels lean and mean. I like that the gameplay is not your typical "arena" style battle. Replays are very nice looking and HTML5 (a few at nodewar.com/ladders). This one doesn't seem very active atm, but I really dig it.
  • Code & Conquer - This one looks really polished and education-oriented. Haven't seen the gameplay yet. Getting a fair amount of attention right now.

This new breed of fully web-based programming games really seems to be taking shape. I dig it! I hope we get some good ones and it brings tons of people into programming and programming games... It's got to be 100x easier to get people to try a game when all they need is a web browser.

But I also wonder about the future of desktop app games like Robocode. One thing I love about the Robocode community is that we contribute a lot of code outside of our bots, like RoboResearch, RoboRumble, running web sites and services, etc. It's sort of like console gaming vs computer gaming - computer gaming gives you level editors, mods, the precision of a mouse. We exercise a lot of freedom on the RoboWiki to do whatever we feel like with Robocode.

Of course you could have games that straddle this line. A fully web-based game that also lets you run your own servers for the hardcore players, or a desktop game with some web features (which is kind of where I'm going with BerryBots).

Voidious (talk)16:06, 5 September 2013

Spamming Without Links

When a recently created account starts posting advertisements, should it be blocked, even if its advertisements do not contain any external links? I'm asking this because I just blocked "Twotogether," who created a page which was obviously spam, but did not contain any external links. If we should only block those who spam external links, I will unblock Twotogether.

Sheldor (talk)14:26, 26 July 2013

IMO? Spam is spam, kill it with fire.

Skilgannon (talk)15:49, 26 July 2013

yep. lots of fire.

AW (talk)17:48, 26 July 2013

As far as I'm concerned, the only difference when the spam doesn't have links, is that it's not automatically blocked as easily. So yeah, all of the fire.

Rednaxela (talk)19:43, 26 July 2013
 
 
 

Update problems

I've got the following major issues:

  • In LiquidThreads, when I type a reply the spinning loading icon never goes away, and the shortcuts at the top never load.
  • When I try to edit the RoboRumble/Participants page it tells me that the server did not receive some of the message and that I should confirm the edits, but it shows me an empty box instead of all the participants data.

These behaviours are seen on both Firefox 21 b6 and Chrome 26.0. I've cleared cache and done a hard reload in both.

Is anybody seeing these?

Skilgannon (talk)20:42, 9 May 2013

Yeah, LiquidThreads spinners all over the place for me. I haven't tried editing the participants list but that seems pretty high priority. Hrm..

Voidious (talk)20:43, 9 May 2013
 

I'm definitely noticing the first problem. I haven't yet tried editing the participants page.

Sheldor (talk)21:28, 9 May 2013
 

We seem to be getting a lot of user registrations, did the update break some of the blockers?

Chase00:17, 10 May 2013

Yeah, Rednaxela had some custom things in that got broken. He's working on it now.

Skilgannon (talk)02:24, 10 May 2013
 

Yeah, the update removed the Math extension which used to be part of the core of MediaWiki, but got moved into an extension. This broke some pages, and also broke the extra math question I added in added to the reCaptcha check. (Besides the extra math question, my modifications also included a "same IP address as received the captcha must solve it" check, which based on server logs was very effective)

Due to the error that was happening on the new user creation page, Voidious reverted back to the traditional reCaptcha extension temporarily, which let that flood of bots register.

Gladly, the custom extension I added which disallows accounts less than 24 hours old inserting external links was still intact after the upgrade, and appears to have foiled those spambots.

Also, I've now reinstalled the Math extension, both fixing some wiki pages and making my modified captcha checker work again, so all should be well now :)

Rednaxela (talk)02:45, 10 May 2013

Good to know. On that point though, I still think KittenAuth/Asirra would be a good auth system (and has nothing to do with me liking kittens, honest).

Chase03:48, 10 May 2013

Asirra was mentioned in some emails that went around. I don't think Asirra is fundamentally any better than reCaptcha for the main problem. I suspect there's a high probability that rather than pure computer-based bots, the reCaptcha system was being broken by a Mechanical Turk style system that farmed the captcha breaking task out to humans. From what I understand that is common these days. Asirra is equally vulnerable to that technique. Assuming that is the case, the reason my modifications help, would be that rather than preventing the captcha-breaking itself, they make it incompatible with some automation systems used to farm out captcha breaking. I have nothing against using Asirra if people want to switch it to that instead of reCaptcha, but at least in theory I doubt Asirra vs reCaptcha makes much of a difference.

Rednaxela (talk)04:35, 10 May 2013

Well fair, I do know Asirra is much more difficult to break then reCaptcha for computers. It might also be easier for humans to do as well ( a few clicks instead of the need to type). It could replace the two captcha systems with one (math+reCaptcha with Asirra).

But I am not going to push the topic if no one else thinks it is a good idea. I do not know the compatibility or reliability of the system, and there is always the ever present "don't fix what isn't broken" mantra as well.

Chase13:14, 10 May 2013
 
 
 
 

A quick update regarding the RoboRumble/Participants issue: I've confirmed it's definitely related to the total size of the page. I see the error if I click preview there normally, but I don't see the error if I delete half the content of the text box before hitting preview. I don't know why it only started happening after the update though, or what a good fix would be.

Rednaxela (talk)03:25, 10 May 2013

Participants issue is fixed, but the spinners persist!

Skilgannon (talk)09:51, 10 May 2013
 

Testing to see if the infinite spinning icon is fixed...

Rednaxela (talk)01:53, 11 May 2013

Yep! It's now fixed!

When the infinite spinning icon thing was happening, I checked in the browser for javascript errors. Sure enough, there was an "ext.WikiEditor" error. I looked around, and tried installing the WikiEditor extension, and it fixed the infinite spinning circle issue. It seems that the version of LiquidThreads we got in the update depends on the WikiEditor extension.

Rednaxela (talk)01:55, 11 May 2013
 
 

Wikipedia article

Any interest in helping me rewrite the Wikipedia entry for Robocode sometime? We can do it there (like on a user page), but just wanted to bring it up here first. It's all pretty stale, and I think could use a major overhaul besides the first 2-3 paragraphs. I also think the final product should be about half the size of what's there now.

Voidious17:49, 16 April 2013

I was under the impression that the point of Wikipedia was to have a stale and objective article for every subject.

The problem with the Robocode page is that it is not objective. It reads like an advertisement, or a fan's website. It also goes into unnecessary detail in some places, while leaving out important information in other places.

Sheldor18:19, 16 April 2013

Yeah, "stale" like "hasn't been updated in a long time" seems appropriate. Inaccurate information should be fixed or removed though.

Voidious18:55, 16 April 2013
 

I don't think anyone (on Wikipedia) cares about which robot is best at what and such, and keeping those up to date would be a pain anyway, last update was claimed to be in 2009. So I think the RR@H champions should be removed.

The influencial robots section needs to be adjusted some. For example to me Phoenix's entry reads like an advertisement, and is YersiniaPestis' passing Shadow for a bit really worth mentioning? Plus a few are missing like Raiko/RaikoMX (First Open Source Surfer), Chalk (Open Source kNN), BulletCatcher (Bullet Shielding), MoxieBot? (Bullet Shadows? Was it the first?).

But I wouldn't mind seeing a list of past competitions on there, might give the game more clout.

Chase10:13, 17 April 2013
 

Yep, I agree on all those points.

Taking a few of the bots on the Open Source page might be a good start for replacing the "influential bots" list. Maybe list more current/past competitions, but with less description of each than what's there now. For movement/targeting techniques, maybe instead of mentioning all those Robocode-specific terms, we could just mention some of the machine learning techniques that are widely used, like KNN, kernel density, multi-variate histograms (VCS), pattern matching, and neural networks.

I'm torn as to whether the wiki deserves its own special mention besides the link below. It is a pretty strong part of the online Robocode community and a resource for anyone doing Robocode, but I'm not sure that means it deserves more than just a link near the top of "See also" or "External links".

Voidious17:06, 17 April 2013

Agreed on all, unfortunately I am super busy again and don't have time to help with this.

I think there should be some sort of heading called "Community" or something like that, where you list the RoboWiki and the SourceForge forums as well as the dev groups.

Skilgannon20:04, 17 April 2013
 

I agree, and I like your thinking. Could almost copy Open Source wholesale for that section, after converting some of the jargon.

I think a mention in the actual article to the Robowiki would be justified. It is where most of the developments and long running competitions originate (like RR@H). But it might just be at most a sentence like "A great deal of the innovation occurs around Robowiki[External Link], the games premier wiki."

Perhaps a short mention of some of the licensing that occurs in Robocode. Otherwise there isn't really much to say beyond what is already covered.

Chase03:25, 18 April 2013
 
 
 

Import Robot to Robocode

Hello! We are creating our first robots, and we export the robots from eclipse, in .jar doing in the project, right click>Export>Java>JAR File.

In the next box, we export to JAR, but when we try to import the robot to robocode, it complete succesful, but it don't appear in the list of robots.

Thanks!

Cristian09:01, 2 April 2013

Welcome to the RoboWiki!

You don't need to export every time you want to run your robot. This tutorial shows you how to tell Robocode to get your robots straight from Eclipse.

It's also interesting that you say you imported the robot into Robocode, but it didn't appear on the list of robots. I assume that you used the "Import downloaded robot" feature of Robocode. I might've had the same problem with it. Try downloading this robot and then see if using the Robocode import feature works. If it doesn't, just copy the .jar file into the robot directory, and Robocode should recognize it.

This thread isn't really appropriate for the main page discussion; if you don't mind, I'll move it to User talk:Cristiancompany.

Welcome again and good luck!

Sheldor13:02, 2 April 2013
 

FightCodeGame ?

Anyone checked out http://fightcodegame.com/ ? The web site seems pretty sleek and it all looks pretty active and well organized. After watching some sample battles, and that the #1 ranked bot is ~350 lines of code, I have to wonder how high a ceiling there is in terms of writing sophisticated robots. The gameplay looks pretty much like a Robocode (or whatever predecessor) clone with only blocking API calls.

It kind of annoys me, on principle, that I have to authorize it with my GitHub account even to see things that are read-only, like the rankings. So I haven't done that yet and thus haven't looked into it in much depth.

Voidious02:17, 20 January 2013

Well I have never had much success with normal Robots. Mostly since it seemed like a lot of extra effort for little gain. That is, the rumble was dominated by AdvancedRobots and their non-blocking calls.

I took a look at it, and it is difficult (for me) to write a decent robot on it. Mostly because I would like some kind of debug feature. Supposedly it has a log function to write to a console. But I can't figure out how to access said console.

Chase02:32, 20 January 2013
 

I played a different Javascript / web-based programming game and also had problems with that aspect. I think it's the browser Javascript console that you need to look at.

(And it was crashing my browser / useless to me for a while before I realized I'd printed like 30k lines to it, which it isn't really designed for, and finally figured out how to clear it.)

Voidious03:17, 20 January 2013
 

After a bit more work I had a semi workable robot, but I don't think we will be able to apply anything more then rudimentary robocode knowledge to the game.

Chase04:01, 20 January 2013
 

I made a javascript port of sample.Walls on FightCode. Got #13 place.

MN04:11, 21 January 2013
 

You're joking? Hah, wow.

Now we just need to make a port of Girl. Which I think is still the highest ranking extends Robot.

Chase07:03, 21 January 2013
 

Heh. :-) Pretty cool to see sample.Walls in action in a different game.

Down to #45 now: [1] Seeing as the battles are 1 round and I think it may take some manual action to run battles, the rankings may be a couple orders of magnitude less stable than what we're used to with the RoboRumble.

Voidious07:22, 21 January 2013
 

That #13 place was a stream of lucky battles. Ran some more battles later and the rating kept oscilating between 1485 and 1525.

You can also choose whom to fight against and manipulate your rating by choosing only opponents with high PBI, but I avoided it.

My impressions of FightCode:

The API is simpler than "extends Robot" in Robocode.

No energy drop when firing and the gun and bullets are still invisible to radar. So, no way to detect incoming bullets. But you can assume a bunch of tick-head-on bullets.

No independent radar axis, the radar is always pointing to the same direction the gun is.

No velocity and heading in scans, making even linear targeting a challenge.

No "scan()" method, making bots miss a lot of scans, even when there is a sitting duck in front of their guns. I had to hack Walls code a bit to improve scans, but it is still missing a lot of them. And it is a key strategy in Walls to avoid being crushed by opponents close to walls, like Corners.

I wonder how a rambot will perform there. Since it is hard to keep track of opponents due to limited radar, and the only thing which works together with "ahead()" is "fire()", a bot moving and shooting straight forward can do a lot of damage.

MN14:09, 21 January 2013
 

Cool, thanks for the info MN. It's worth noting this game is really young - the first version was built from scratch in a month for a GitHub hacking contest near the end of 2012. They also replied to me on Twitter that some new stuff is coming: "we have some feats in the oven for advanced bots: independent queues for radar, cannon and tank; data storage for machine learning"

I'm curious to see how it does. The whole web-ness and feel of it all really impresses me, and I could see a lot of people trying it that wouldn't have bothered to download Robocode. But at the same time, being stuck with the web interface for all your running and testing and unstable rankings might make it hard to retain power users and maintain a passionate community. Support for local and batch battles would be nice, though it wouldn't be my top priority (yet) as a dev either. It also seems like the gameplay needs some work to approach the depth of Robocode, but it sounds like they're working on that.

Voidious17:12, 21 January 2013

What bothered me most was the missed scans, making Walls a lot weaker than it is in Robocode. Feels like bot width is only 1 pixel wide, but didn´t check the engine to be sure.

And FightCode web design is far superior to what RoboRumble is today. Robocode could copy that by having an applet version.

MN20:08, 21 January 2013
 

I dunno, with the recent Java security issues, I consider Java in the browser pretty much dead.

Voidious20:09, 21 January 2013
 

I did a bit of tweaking on walls to improve it specifically for FightCode (clone and invisible). I also made a copy of spinbot.

http://fightcodegame.com/profile/Chase-san/

Chase22:11, 21 January 2013
 

Boo :)

Miked080108:12, 23 January 2013

You're back!

You've been a great inspiration to me. I learned a lot about shrinking Codesize from reading your code.

Are you planning to continue writing nanobots? Maybe you could help me unravel DoctorBob's secrets. :)

Sheldor15:32, 23 January 2013
 

Thanks! I have uncovered may of Doctor Bob's secrets. You can nearly 100% him if you watch energy drops and reverse direction at around 120 distance. Then just aim a little behind him.

Miked080104:06, 19 March 2013

I meant the secrets of how successful it is, not how to beat it. I am trying my hand at nanomelee, but I haven't had much success. (My robot TestMelee is a really crappy derivative of Infinity.) DoctorBob says it has NanoAndrew's movement, but it looks like there must be a little something more. I wondered if you had ever seen DB's code, or heard something from the author.

Sheldor12:22, 19 March 2013
 

His code cannot be completely decompiled as he obfiscated it, but if you look around a bit, there are ways of figuring out what he did. Honestly, you can reverse engineer his good pretty easily by the fact that he cannot hit stop and go targets. His radar is lock onto nearest person and charge - which against weaker melee guns and movement works great. The bots that hide in the corner and make small movements counter him well though. Dustbunny does well because it runs from him (and everyone else) :)

Miked080100:27, 20 March 2013

What about reversing or not reversing directions when the enemy fires? It seems like DB's pattern is a lot more complex than reversing every other shot.

Sheldor03:21, 20 March 2013
 
 
 

Hey there Miked. You have interest in fightcodegame?

Chase09:35, 23 January 2013
 

These guys should be paying me a commission... :-) Welcome back Miked!

Voidious16:00, 23 January 2013
 

And work. Thanks for the good words! I am still attempting to get caught up with a new job and such. I do intend to keep track of things a bit better though going forward and maybe even update things as time allows.

Miked080104:05, 19 March 2013

I have a nano project that is currently stalled due to issues with my installation of Robocode, but looks very promising. It has three modes of movement, two of them reacting to enemy fire, and a PM gun.

The only problem is, I can't store .5 as a char, it gets rounded down to 0. So, I had to switch to 1 stored as a char and then divided by 2 to decode the value to a double. Then it was a few bytes over, so I had to switch from WeekendObsession's gun to Moebius's gun. But, in order to have any accuracy with that, I needed to add a setAdjustGunForRobotTurn(true);, which cost 5 bytes and still left me 2 bytes over. If you think you could help, I could post my code.

By the way, I recently helped Chase with his Talon project--a nano with MRM. But I have a feeling that there is a more effective way to implement wall avoidance...

Sheldor13:02, 19 March 2013

Send me your version that has the best performance but is only a few bytes over, I might have an idea of how to shrink it... as well as a secret weapon which does the same ;-)

Skilgannon15:52, 19 March 2013
 

THANKS! If I can get it below 250 with the original gun, it would probably take 2nd from Sabreur, and might even give LBB a rough time (until, of course, Mike updates the tables).

Do you want me to post the code here, on a new page, or actually package the bot and host it on the repository?

Sheldor16:21, 19 March 2013
 

Just the code is great.

Skilgannon16:35, 19 March 2013
 

I didn't compile this so there may be a few minor errors. Thanks again.

/*
Epeeist v2.0.0 by Sheldor.  03/19/2013
A NanoBot with multi-mode movement and a Pattern Matching gun.
Codesize: ??? Bytes without any colors.

Epee (pronounced aay-pay) is one of the three forms of modern sport fencing,
along with Foil and Sabre.  http://en.wikipedia.org/wiki/Epee

Credits: 
Pattern Matching code from simonton.WeekendObsession_S and mld.Moebius,
and a general thanks to all open source bot authors and contributors to the RoboWiki.

Epeeist is open source and released under the terms of the RoboWiki Public Code License (RWPCL) - Version 1.1
see license here: http://robowiki.net/wiki/RWPCL
*/

package sheldor.nano;

import robocode.*;
import robocode.util.Utils;

public class Epeeist extends AdvancedRobot
{
	//Global variables.
	static double direction;
	static double enemyEnergy;
	
	static int deathCount;	
	
	//En garde!
	public void run()
	{
		//setAdjustGunForRobotTurn(true);
		
		//Start spinning radar and initialize direction to infinity.
		setTurnRadarRightRadians(direction = Double.POSITIVE_INFINITY);
	}

	public void onScannedRobot(ScannedRobotEvent e)
	{
		//Local variables.
		int matchLength = 30;
		double absoluteBearing;
		double distance;
		int i;
		int index;
		
		//Oscillating/Random movement.
		if (enemyEnergy > (enemyEnergy = e.getEnergy()))
		//if((enemyEnergy - (enemyEnergy = e.getEnergy())) > (Math.round(Math.random() * chancesOfReversing.charAt(deathCount)) * 111))
		//if( (char) ((enemyEnergy - 1.09  - (enemyEnergy = e.getEnergy()))) < 2)
		{
			direction *= (chancesOfReversing.charAt(deathCount) - Math.random());
			//direction *= (chancesOfReversing.charAt(deathCount) - (Math.random() * 2));
		}		
		setAhead(direction);
		
		//Stay perpendicular to the enemy.
		setTurnRightRadians(Math.cos(absoluteBearing = e.getBearingRadians()) + ((160 - (distance = e.getDistance())) * (getVelocity() / 2500)));
		
		//Pattern Matching.
		/*enemyHistory = String.valueOf((char) (e.getVelocity() * (Math.sin(e.getHeadingRadians() - (absoluteBearing += getHeadingRadians()))))).concat(enemyHistory);

    	// search for a match
    	while((matchPosition = enemyHistory.indexOf(enemyHistory.substring(0, integer--), 14)) < 0);

    	// calculate aim offset
    	integer = 14;
    	do { absoluteBearing += ((short) enemyHistory.charAt(--matchPosition)) /  160; } while (--integer > 0);*/
		
		//Pattern Matching
		enemyHistory = String.valueOf((char)(e.getVelocity() * Math.sin(e.getHeadingRadians() - (absoluteBearing += getHeadingRadians())))).concat(enemyHistory);
		while((index = enemyHistory.indexOf(enemyHistory.substring(0, matchLength--), (i = (int)(distance / 12.5)))) < 0);
		do
		{
			absoluteBearing += (short)enemyHistory.charAt(index--) / distance;
		}while(--i > 0);
		
		//Aim at the predicted target.
		setTurnGunRightRadians(Utils.normalRelativeAngle(absoluteBearing - getGunHeadingRadians()));
		
		//Fire!
		setFire(2.5);
		
		//Infinite radar lock.
		setTurnRadarLeftRadians(getRadarTurnRemainingRadians());
	}
	
	public void onDeath(DeathEvent e)
	{
		deathCount++;
	}

	public void onHitWall(HitWallEvent e)
	{
		//Reverse direction when the bot hits a wall.
		direction = -direction;
	}
	
	static String chancesOfReversing = ""
		+ (char) 1 + (char) 0 + (char) 1 + (char) 0
		+ (char) 1 + (char) 0 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5
		+ (char) .5 + (char) .5 + (char) .5 + (char) .5;

	//Preloaded log of enemy movements for pattern matcher.
	static String enemyHistory = ""
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 2
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char)-1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char) 1 + (char) 1 + (char) 1
		+ (char) 1 + (char)-2 + (char)-4 + (char)-6
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-8 + (char)-8 + (char)-8 + (char)-8
		+ (char)-7 + (char)-6 + (char)-5 + (char)-4
		+ (char)-3 + (char)-2 + (char)-1 + (char)1
		+ (char) 2 + (char) 4 + (char) 6 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 8 + (char) 8 + (char) 8 + (char) 8
		+ (char) 7 + (char) 6 + (char) 5 + (char) 4
		+ (char) 3 + (char) 2 + (char) 1 + (char) 1;
}
Sheldor16:59, 19 March 2013
 

I'll look at this a bit tonight. There is a savings that can be had by compiling with a different Java compiler. I remember that :)

Miked080100:24, 20 March 2013

Thanks.

Skilgannon has already addressed the issue on another talk page, but I would appreciate any help I can get.

Sheldor03:00, 20 March 2013
 

BTW, I still feel very that LBB is a pretty cheezy bot. Abusing tables like that probably shouldn't be fair. It takes hours and hours though to get each bot optimized so maybe that makes it a little better overall. besting Moebius is a better accomplishment. At least he doesn't cheat...

Miked080100:30, 20 March 2013
 
 
 

Was kinda bummed to see that FightCodeGame is on its way to becoming for-profit and maybe not-open source: [1] They say the game will still be "free" (as in beer, I suppose).

I mean it's their call and best of luck to them, it just feels antithetical to the spirit that's helped communities for Robocode and other programming games thrive for a really long time. And while there's demand for good programming games - a prerequisite to making money off of something - I personally think there will also always be a supply of good / free / open source programming games that make it really hard to turn one into a business. There's just plenty of people that make their living doing other stuff that are happy to create programming games as a hobby.

Voidious01:18, 20 March 2013
 

Is it ethical to edit other people's bot/user pages?

The majority of non-archive pages on this wiki are either bot pages or user pages. Many of these pages contain outdated information, or could be improved.

So, is it ethical to edit these pages, even though they were personally made by another user for their own work?

Sheldor23:14, 7 March 2013

For the most part, I think it's fine to edit almost anything on the wiki, particularly if your goal is to improve the wiki and make it more useful to more people. I've migrated/edited lots of such pages. Cigaret and Ascendant are both pages I migrated where I tried to preserve the author's text while also updating inaccurate info and reformatting for the new wiki.

There are a few things I'd consider rude though:

  • Major changes to something like User:Chase-san/NewTech.
  • On Diamond, editing the ranks in "How competitive" seems fine, but modifying "What's special about it" would seem rude.
  • Any major changes to a bot/user page for a user that's active - I'd just say you should discuss it on the talk page first.
Voidious23:37, 7 March 2013
 

Yeah, my thoughts are if the person is active then ask first, if the person isn't active feel free to add, but think very carefully before modifying.

The only good reasons I can think to modify are:

  • Grammar/spelling (which is fine)
  • Adding links and categories which may not have existed when the author was making the page (also fine)
  • Updating rumble positioning and scores (try to stick a date next to the data that's there, then add a new date with current data).
  • Possibly adding a brief blurb if the bot was particularly influential in Robocode development.
Skilgannon05:51, 8 March 2013
 

Take for instance my recent edit of AWs userpage. I contemplated it for a moment. But I decided he probably made a mistake, and so I felt it was safe to correct it.

But I wouldn't go through and change the structure of his page, or start adding on a new section. It's his page. So in the end I suppose my opinion is to have a light touch.

I don't completely agree with Skilgannon. Large corrections, yes, definitely. But for minor corrections, you shouldn't have to go through the possibly long process of asking. Such as if you can fix their misspelling of "froward" into "forward".

Chase08:44, 8 March 2013
 

Is it ethical to edit other people's posts for minor typos/grammatical errors/inaccuracies?

Sheldor17:04, 19 March 2013
 

I don't think it's unethical, but it might be unnecessary / annoying. :-) I wouldn't do it for discussion threads, but I might on a content page.

Voidious17:05, 19 March 2013
 

While loop in the 'run' method

I'm unclear as to when the while loop in the run method starts, so I added a debug command there:

while(true) {
	setDebugProperty("startingWhile", String.format("heading: %.1f° at time %d.", getHeading(),  getTime()));
	ahead(200);
	// ...
}

But to my surprise, this doesn't get displayed until after the ahead and all the following commands are executed, which I would assume should be the beginning of the second iteration. Is there something that prevents these debug properties from being displayed immediately?

To Wombi: Das ist der Fluch der guten Tat. Ich hoffe, Du bereust nicht, meine Frage beantwortet zu haben.

Astacus01:40, 5 November 2012

I never used setDebugProperty. Always used plain System.out.println.

Probably, setDebugProperty value is only used inside "execute" events, like all other setter methods.

MN14:22, 5 November 2012
 

Hi mate ...

I gave a little example on your user discussion page Discuss - it's a little more appropriate than the main page. Feel free to ask about whatever bother you - no matter what.

Wompi

Wompi14:31, 5 November 2012
 

Help! Since I installed Robocode, my original Java isn't working anymore

Hello, please forgive me if this isn't the right place to post this. I'm a noob to Java; two months ago I installed the JDK from Oracle and played around with the examples from the book "Java - A Beginner's Guide". It worked nicely until I installed Robocode. Now, Robocode is working fine, but regardless which of the example programs I try to run, I get the same error:

cd the_directory_that_contains_Example.class 
java Example.class 
Error: Could not find or load main class Example.class

I tried recompiling Example.class from Example.java, but that didn't help. I googled for this error; I found a nice reply at stackoverflow.com/questions/3005433/java-problem-could-not-find-main-class-helloworld, so I tried to explicitly point it to the class directory:

java -classpath . Example.class

But this didn't help either. BTW, I had added the follwing two environment variables for Robocode, but from what I read, they shouldn't matter:

JAVA_HOME="C:\Program Files\Java\jdk1.7.0_07"
Path=C:\Program Files\Java\jdk1.7.0_07\bin;C:\WINDOWS\system32;...

Please help me with this. Thanks!

Astacus20:23, 4 November 2012

Hi mate ... Not sure but i guess it should be:

java -cp . Example

not Example.class. Let me know if this worked out for you

Wompi00:51, 5 November 2012
 

That's it! Thanks a lot!

Astacus01:15, 5 November 2012
 

funny "Robocode has peaked" quote

Was just reading oldwiki:RobocodeNG/Archive and came across this choice quote from Albert.

Robocode as it is has reached its maximum. It was more than a year ago that the las truly new idea came (ie. WaveSurfing) and now its all tweaking and optimizing... really boring.

Not sure the date, I think 2005ish. =) And here we are, 7-8 years later, still reaching new heights with our bots. No more paradigm shifting breakthroughs, true, but tons of refinements, many small to medium improvements, and a few pretty big ones along the way. To me, it seems like Wave Surfing was more the beginning of something than an end to Robocode innovation. I think we've taken a more precise and mathemetically sound approach to all aspects of our bots since then.

Voidious16:36, 25 September 2012

Since then we've had:

  1. Precise Intersection
  2. Precise min/max GFs
  3. Bullet Shadows
  4. Kd-trees (and with them, fast log-based targeting)
  5. Super-survivalist bullet powers
  6. Gunheat waves
  7. Genetic tuning of variables
  8. Shoot-everybody melee gun
  9. Melee surfing

A lot of these ideas were dependant on wave surfing to begin with, I agree a little with Albert's quote, but it was a bit like saying that now that the transistor (or vacuum tube) was developed, suddenly hardware design was over. I would say no, it has only just begun =) Once we had wave surfing, the same ideas and stats which we used for gun we could adapt for movement, although the lower quantities of data posed a whole new set of problems. I would argue that before wave surfing, the tweaking of movement profiles was much more boring than what we are doing now (although definitely had a lower barrier to entry).

Skilgannon18:05, 25 September 2012

K-nearest neighbours/kd-trees and genetic tuning in particular are bleeding edge AI techniques that come from outside the Robocode world.

MN20:46, 25 September 2012

New in terms of statistics, I guess. I'm referencing papers for my MSc from the early '90s which were using kD-Trees to speed up KNN search.

Skilgannon21:02, 25 September 2012
 
 

Yeah, very well put. At this point, "Wave Surfing" feels to me like a very broad term that would be applied to any intelligent movement system, while there are still so many differentiating details beyond that. I mean, looking at any popular game or sport, most are long past the stages where earth shattering insights can be discovered about game play, but that doesn't mean they are immediately uninteresting. Michael Jordan didn't really do anything new, besides just doing everything better than everyone ever. And he's a pretty exciting chapter in basketball history, if you ask me. =)

Sort of on topic, as I've been working on a new game recently and designing rules, I've been thinking a lot about Robocode's rule set and how much of the game play depth is by luck or by design. It's pretty insane and impressive that the game has held up so well for so long. I try to give credit where it's due and believe it's by design. But then I think about how the scoring had to be changed after release because Mat didn't realize that a non-shooting bot might have the best survival strategy. And how simple the sample bots are, or even the earliest public bots - it's like nobody had any idea where things were going. But maybe if you have some good grasp of game play mechanics at a fundamental level, you don't have to be able to see where things are going to know that you have something with balance and depth. Or maybe Robocode isn't really all that deep compared to what could be, but it's the best we have in a really cool genre and succeeds for lots of other reasons too.

Voidious20:20, 25 September 2012

Robocode is NP-complete as most games with depth. Other games might include chess, go and poker.

But Robocode is more than simply a complex game. Having tanks and bullets as theme makes it a lot more fun. There is an intuitive feel about how a tank should behave. Moving and aiming efficiently is simply not enough, robocoders like to make theirs bots move smoothly or turn their guns without shaking.

The engine being open to everyone, with anyone being able to develop a bot (not necessarily competitive) and also being able to upload them in an open internet environment removes most barriers to entry. And being an AI competition ensures there is always someone to compete against. A great deal of Robocode longevity can be credited to RoboRumble.

MN21:08, 25 September 2012
 

I think the coolest thing about Robocode is the fact that it has incomplete information, but some information. As in, we don't know what they will be doing, but we can see what they are doing now, and we don't know where they shot, but we can tell that they shot. I'm not sure if this was accidental or not, but it allowed for an extremely complex set of strategies to emerge, and I think it is something which you should attempt to incorporate into BerryBots if you can =)

But yes, I totally agree with MN here, without the rumble and the competition it provides Robocode wouldn't have been nearly as interesting =)

Skilgannon21:25, 25 September 2012

FWIW, I have absolutely been trying to keep some good dynamics with incomplete information in BerryBots. But I haven't spent enough time writing bots yet to get a good feel for what I have so far.

I think what I'll end up with in BerryBots is significantly more information than you get from Robocode on an open battle field, but you also don't see anything beyond walls (besides death events), which is pretty major. I also think that between the visibility stuff and how I'm planning to model the coding of teams, team play could be a lot more fun and popular than it is in Robocode.

Voidious21:48, 25 September 2012

Out of curiousity, with regards to teams... how large teams are you thinking of? Some of the videos you've showed with a bunch of bots bouncing around make me think it would be kind of neat to do large swarms if it can be done with acceptable performance :)

Rednaxela22:03, 25 September 2012

Well, I'm certainly leaving the door open for huge teams (say 20, 50, 100 bots?), which I also think would be awesome. Running more than a few complex bots at once is probably not going to be a great experience on the Raspberry Pi, so running huge numbers of bots isn't a major focus just yet. But it should be fine on modern computers.

The big difference in how I want to handle teams is it will just be one program controlling multiple bots, instead of independent programs with only cumbersome messaging between them. You'll have a global view from the visibility of all your bots and be able to control them individually without messing with communication protocols or anything. This should also offer performance gains - the engine has a lot less line of sight calculations to deal with, running 2 Lua states with 50 bots each seems a lot nicer than running 100 separate Lua states, and the bot author can eliminate duplicate processing that would probably exist in each bot if they were running separately.

Voidious22:36, 25 September 2012
 

Imperfect information (invisible bullets) is what makes learning strategies dominant.

If radars could see bullets, Robocode would easily degrade into a ramming game. Imperfect information was probably intentional.

MN22:16, 25 September 2012

I agree that the game would be much less interesting with visible enemy bullets. However, I don't think that the game would devolve into ramming, or at least, not only ramming at the higher levels. It might make an interesting Robocode sub-species.

Actually, make the bullets visible, crank the gun cooling rate up, and get rid of the turret so that a bot can spit a bullet out in any direction it wants.

With visible bullets, the focus would become (in addition to ramming) the construction of configurations of bullets in air that are impossible to dodge. Pinning the enemy into a corner so that they have limited dodging options would be paramount.

The counter-resonse would be to shoot down the incoming wall of enemy bullets, though this means that one is spending time on defense rather than offense. The refinement of that would be finding the pockets of space-time that bullets could serve both a defensive and offensive function! This would probably represent an investment of processor cycles way beyond what has our bots skipping turns these days.

It'd still be interesting, but probably not as interesting. That information asymmetry really makes things fun!

Tkiesel17:02, 26 September 2012
 
 
 

Yeah, I was thinking that the incomplete information aspect has a lot to do with the depth of Robocode as well, but it's certainly also true that the rumble has a lot to do with it's longevity, allowing it to survive quieter periods when some authors are inactive.

The comparison to other NP-complate games like chess, as well as the incomplete information aspect being brought up makes me wonder how chess strategies would differ if the game rules were modified for incomplete information (i.e. you can only see spaces that your pieces either occupy, can move to, or can attack)

Rednaxela22:10, 25 September 2012

Doing a quick search... seems such chess variations do exist: wikipedia:Dark chess and wikipedia:Kriegspiel (chess).

Rednaxela22:14, 25 September 2012
 

Oops, NP-complete means the perfect move can´t be easily calculated. NP stands for Non-Polynomial runtime complexity.

But yes, imperfect information is a key feature in Robocode.

Perfect information and imperfect information usually leads to 2 completely different paths. The first leading to backward induction style analysis and the second leading to forward induction.

MN22:25, 25 September 2012
 

Man, "Dark Chess" is a really cool sounding game name. =) And appropriate too.

Voidious22:39, 25 September 2012
 
 
 

Just decided to put this together, it's a 3D model of a Robocode Robot, I am pretty sure such thing existed in the past, but here it is anyway.

http://file.csdgn.org/robocode/robot3d.png

http://file.csdgn.org/robocode/robot3d.dae

Chase-san13:15, 19 September 2012

I haven't done the UV mapping or rigid bone rigging yet, but at least the latter is pretty straight forward.

Chase-san13:16, 19 September 2012
 

Looks great. The radar is a little bit off - or maybe its just a bad angle. But it looks very very nice so far. Hopefully we can get more of this :)

Wompi13:33, 19 September 2012
 

Modifying the Robocode Game.

I'm trying to modify the robocode game for a University assignment and I'm currently stuck so if anyone could help me that would be greatly appreciated. To modify the game I decided to create a new robot type that freezes other robots for a certain amount of turns when it runs into them. I have created a new interface for the freeze robot and altered some of the other code. When the game starts up it goes through all the robots that the user can choose from and creates a RobotPeer for them. And for each RobotPeer they all have a RobotType. If I debug the game here I can check the FreezeRobot that I made that implements the interface and it shows that it has both type FreezeRobot and AdvancedRobot. Which is what I want because if it doesn't implement AdvancedRobot then it can't use any of AdvancedRobot methods. So up till here everything is fine.

Though when I select the FreezeRobot and start a game with it then debug to check the RobotPeer, it is now only an AdvancedRobot. Can someone explain why this is?

In case you are wondering, what I am trying to do is to make edit the RobotPeer code in the checkForRobotCollision method. After it creates a new HitRobotEvent and sends that to the robot, I want to check if the otherRobot is a FreezeRobot and in this case it will change some variable that makes the robot frozen. I haven't worked that part out yet but I need to be able to see if the otherRobot is a FreezeRobot first so hence this post.

If anyone has any advice/tips/help it would be greatly appreciated. Thanks

WhatsUp06:25, 28 August 2012

Hi mate. Not sure if someone here can help you with this. Maybe you should ask your question (or just link it to this post) at the help section of SourceForge Forums. I guess Flamming can say something that might help you.

I hope you keep us informed how it is working out :)

Take Care

Wompi09:35, 28 August 2012
 

Yeah, on the wiki we more deal with robot development than with actual Robocode development. You might want to check out the robocode-developers Google group as well.

Good luck!

Skilgannon10:38, 28 August 2012
 

Perhaps it is only declared as AdvancedRobot in RobotPeer, but the instance is a FreezeRobot (and, more specifically, your robot class)? If you were seeing the instantiated type, it would show as your robot class. No matter the declared type, in Java you can do "instanceof" to check whether the actual instantiated object is a certain class (like FreezeRobot, or DrussGT), so maybe give that a shot and see if it works.

But yeah, as these guys said, the robocode-developers group and project forums are better places to get input from people who actually work on Robocode. They don't compulsively check the wiki as often as us Robocode addicted bot authors. ;)

Voidious15:53, 28 August 2012
 

Ok thanks I'll try the developers group.

Also I tried 'instanceof' to check the type but it makes a compile error because RobotPeer cannot be compared to FreezeRobot.

WhatsUp01:46, 29 August 2012
 

Sorry - I meant where ever you're debugging and seeing an AdvancedRobot when you want to see a FreezeRobot, try instanceof on that variable. It's probably true for "instanceof FreezeRobot", which is one way you could test the type of a robot - though probably not the fastest way, so you might want to figure something else in final implementation.

Voidious03:00, 29 August 2012
 

state of the wiki

Hey guys, I'd like some input on this. Sometimes it bugs me that the wiki is so disorganized, so much content out of date or needing refactoring, so much unmigrated content on the old wiki. Other times, it feels very organic and like it servers its function perfectly. I'm not sure if spending tons of time cleaning up and migrating old content is really worth the time, but if it is, I'd gladly pitch in on that.

What do you guys think? What would make the wiki better / more usable / more useful / more fun to browse for you?

Personally, I find myself browsing talk pages a lot - it would be nice to have some saner way to browser old / interesting conversations across the wiki. I'd also like to get lots of old bot pages migrated - maybe a semi-automated way of doing that would help.

Voidious17:01, 14 June 2012

I´m quite confortable with the wiki the way it is. The only thing that bothers me a bit is having to search for a keyword twice, once in this wiki and again in the old one. Although Google can be a workaround.

MN18:50, 14 June 2012
 

I agree that there are some places that need cleanup and such. For my own part, I just need to be bold and go ahead and touch up things when I see them, and not be so afraid to add things. I personally feel far too outclassed and overshadowed by the giants of Robocode to feel myself knowledgeable enough to speak on lots of things, despite my rather thorough mathematical training at university. That might be fixed somewhat when I can get my bot a bit closer to the top of the rumble. *chuckles*

One things that's interesting to think about is the "ownership" of bot pages. There are a lot of bot pages that feature time-specific information (mostly about the bot's current rating) that's quite old indeed. These are bot pages whose authors seem to have left the community, at least for now. The status of what's considered polite to do there is a conversation worth having, I think.

As far as things the wiki could add.. I've noticed lately that there's a Robocoding-term/bot-component that gets mentioned a lot in talk pages and bot version histories and so on, but that doesn't have a wiki page explaining it whatsoever. I've been fiddling with adding this aspect to my bot, and recently decided to scrap everything I've done with it and start it over as a proper Object so it doesn't make a mess of my already messy movement Object. Can anyone guess what it is?

Tkiesel01:29, 15 June 2012

Flattener?

Reminds me... When I started in late 2005, the whole top 10 was Wave Surfing, but there was basically no centralized info on what all is involved or any of the gory details. Sometimes it takes a fresh pair of eyes to notice these gaping holes in the wiki's coverage of topics. =)

Voidious01:43, 15 June 2012

Bingo, flattener.

For migrating things over from the oldwiki, a talk page to help coordinate that project might be useful.. maybe have folks vote on whether or not certain articles should get moved over?

I'll try to be more proactive in helping to tidy up and extend the wiki. The information and conversation here is a big part of why I love Robocode! :)

Tkiesel02:45, 15 June 2012

There, started a little stub for Flattener. That's a start anyway :)

Rednaxela06:38, 15 June 2012
 

Is there a way merge two pages? Or better what is the best way to merge two pages with all the history and discussion stuff? :)

Wompi16:59, 17 June 2012

Hmm... I don't think there is a way to merge pages that preserves history for both. I suspect the best option would be... move the page with the most history/content to the new name (if it's not already the correct name), and add the content and discussion-history from the other page.

One thing that could maybe be done is have the "edit summary" include a link to the history of the other page. That way a link to the other appropriate history is there when people are viewing the page history.

Rednaxela17:24, 17 June 2012
 
 
 

I feel like some parts of the wiki could use a little cleanup to expanding on yeah, though I feel that for the most part it works as it should.

Hmm.. MN's comment about search makes me think that if I find some time, I may look into making a little mediawiki plugin to make the search results also show things for the old wiki.

Rednaxela06:23, 15 June 2012

Yeah, I use Google with site:robowiki.net quite a lot myself. That would be pretty cool if you could do that. If not, maybe a custom Google search box could work.

Voidious05:32, 16 June 2012
 

I would like to see something on the main page that shows that the community is active. Maybe some parts of the recent changes, current discussions, lately visited pages or last updated robots. Because when i started with robocode and came to the robowiki (trough the robocode page) it looked to me very abandoned because i was not familiar with the "recent pages" or "talk pages". I had a lot of questions and had no place where i could ask. I think i hit the first talk page by accident 3 month later and it took me even longer to find the "recent pages" (i know its a shame because it is linked on the main page). But i guess if you are not used to how wiki works behind you didn't notice it is there.

Some informations are hidden quite well if you don't know what you are looking for. Lets say the code size related pages. The informations about code size are spread over 3-5 pages i guess and you really have to know what you are searching for.

After i got used to the wiki i found out that most of the interesting informations are on the talk pages. Maybe it is possible to integrate the discussion threads, if they relate to the content, as links in the wiki page as well (probably -1 for bad style but it would save the time to edit the page after each new discussion).

For editing/making pages i would second Tkiesel and feel outclassed and overshadowed by the robocode veterans, plus i don't think my spelling is appropriate for that. I'm also very afraid of moving/summarize pages or insert relevant links because i can not estimate the damage it would bring.

Lately i was in the moot to make a bot pages for the probably most influencing bots to the robocode community - the sample bots :). Just because i think they deserve it and probably most of the robocoders have struggled against these little buggers. I don't know but i guess it would be nice if the new robocoder can start from these bot pages to discover the wiki basics. For example links to linear targeting on Walls or circular targeting an SpinBot, radar lock on SittingDuck or orbiting movement to show how to circle around SittingDuck and so on. My guess is, it would be some sort of entertaining tutorial, and also leads to the feeling what you need to make a robot. I don't know , maybe i'm wrong on that.

All in all i can say, now that i'm a little more used to the wiki i'm very happy with it and like the way how it bonds the community. I'm keen to help with whatever you need.

Take Care

Wompi11:12, 15 June 2012
 

If you want to make new pages, or edit anything, please just do it. If you want to change the main page to show more prominent links to Recent Changes or some sort of howto for the wiki, go ahead. If we don't like it we'll say. After all, it is easier to get forgiveness than to get permission =) Myself, I hardly ever look at the main page, I just bookmark Recent Changes.

When I first came to robowiki (2005/6 or so, I think), I also didn't see the recent changes page for about a week and was impressed that everybody managed to find my page. Of course, that was on the old wiki, but I think a lot of the same problems are still around.

I agree, what the wiki needs is something to get beginners acquainted with the layout (the talk pages, recent changes) and maybe a glossary of commonly used terms and 1 line explanations of them (VCS, wavesurfing, DC/KNN, flattener, HOT etc) with a link to their page. I'm busy over the next few weeks (off to Mexico for Robocup 2012!!), but feel free to do whatever you feel will make the wiki better. The wiki is a community resource, and as part of the community you are strongly encouraged to do whatever you think will help the most! If you want to update old bot pages, or migrate anything over from the old wiki, just go ahead.

Skilgannon11:55, 15 June 2012
 

Hi mates. I'm planing to link the wiki pages related to the Robocode terms to the terminology category. I think it would be a good source to browse the robowiki pages. Also can you get a fast look on everything that is interesting i guess. Would that be ok for you?

Is it possible to automate something with wiki commands? I had in mind to make a table on the main page where every new entrant to the paticipant pages is linked. So you can see the latest bots who are updated added and whatnot. Not sure where i should start to bring this to life.

It would be great if some of the native speakers could correct my spelling or rewrite some stuff that sounds weird or not appropriate for the official pages. For me it would be a great opportunity to see where i'm wrong and i would not be offended by that at all.

Anyway Take Care

Wompi21:10, 18 June 2012
 

You can write wiki bots to communicate with MediaWiki via APIs. I do some of this with User:VoidBot, and Nat has also done some. If you start working on any wiki bots, let me know and I can give your bot user the "Bots" permission (if you promise to be careful =)). Darkcanuck's RoboRumble server also has an API you can play with: Darkcanuck/RRServer/Query.

I do some neat auto-tracking of RoboRumble activity (which uses both those APIs), and posts its output to @roborumble on Twitter. I've thought about displaying this somewhere (Main Page or RoboRumble), but I'm not sure how to embed a Twitter feed in the content of a page. It's easy for @robowiki in the sidebar because I can just use regular HTML/CSS/Javascript, but the content of wiki pages is handled differently. I'm sure there's a way, maybe with a custom extension?

Voidious21:22, 18 June 2012
 

Hmm i guess the wiki bots is nothing for me by now. But i could think of using the RoboRumble API or even better would be to embed your twitter feed on the main page to see whats going on in the rumble. A quick goggle search told me there is a widget called "Twitter Search" that can embed Twitter feed in wiki pages. This would need the widget extension for this wiki. Not sure how much trouble it would be to set up these things.

I will have a closer look at the RoboRumble API to and maybe i find something that could make this happen.

Btw. the roborumble twitter is indeed very neat .. well done mate

Wompi22:17, 18 June 2012
 

New to Robocode

Hia I've only just started using robocode and I have never coded before doe anyone know any good tutorials out there ? Or could you give me any tips on how to get started. Any advise would be appreciated.

Rigged12:52, 8 June 2012

Hi Rigged!

The Tutorials on this wiki are great resources, especially Getting Started, My First Robot and Game Physics.

If you're brand new to programming entirely, I'd suggest that you also immerse yourself in some other avenues to learn programming concepts generally and Java in specific. Greenfoot is a tremendous tool for learning basic programming concepts in a very "object-oriented" way, with some great tutorials available.

There are also several good beginner's tutorials on Java in general.

Tkiesel14:14, 8 June 2012
 

Hi Rigged, welcome to Robocode. I had about 6 months programming experience at high-school (10th grade) level when I first got involved in Robocode. Although RC is a great way to pick up on programming, I do think it is important to have a tiny bit of knowledge of how the basic concepts etc work before starting. Once you understand what a class is, what a method is, and the basics of mathematics in a Java context (plus a bit of geometry/trig) you should be ready to start. The sample bots are lots of fun to play with, and understanding how they work is a great way to pick up on some of the concepts. Once you get there, just ask us what you should got for next and I'm sure you'll get tons of advice =)

Skilgannon16:00, 8 June 2012
 

Thanks for the advise :). I've started by building a simple robot and i was wondering how do you change the colour of your robot.

Rigged10:33, 9 June 2012
 

Hi. Lets talk about your questions on your user discussion page :) User_talk:Rigged. I think it would be to much for the main page and you can ask whatever you want there.

take care

Wompi12:21, 9 June 2012
 

Robocode JGAP User Manual

Hi

My name is Andrew Kirkland. I am currently writing a dissertation at the university of Abertay in Dundee(Scotland) which involves the use of Genetic algorythms to program robots in Robocode. I came accross Robocode JGAP . I have been testing it out but the webpage does not give me much information. Is their a user manual available for this software. I also need some general information on how it works for example the genome and what each of the 6 numbers represent, the fitness function, etc.

Any help would be much appreciated

Thanks

Ginganinja198015:38, 10 March 2012

I don´t think anyone here is using Robocode JGAP. But I know genetic programming algorithms are being used with success in RoboRumble.

Currently, the most successful uses of genetic programming algorithms combine conventional development os robots without it, then using genetic programming algorithms to find optimal constants in statistical methods, like parameters in k-nearest neighbors search, kernel density estimation or histograms.

MN15:32, 12 March 2012
 

Robot vs Advanced robot

Hi,

I've read about the differences between a Robot and an 'advanced robot' But there is a basic thing I do not understand : Does an advanced robot has an advantage in the battle field over a similar robot, because it can perform several action in the same tick?

As i understand it, if i call ahead(..) followed by fire(), a regular robot will call ahead (and block until it is done) and then fire, while an advanced robot calling setAhead(..) and setFire() will start moving forward and will fire at the same tick, thus having an advantage over it's fellow regular robot. that sounds weird, though..

Am i wrong?

Thank you very much yoni

Yonikes14:29, 18 April 2012

No, that's how it works. The only disadvantage I can think of is that Advanced robots can lose energy by hitting the wall. Personally, I find Robots boring and Advanced robots awesome, but maybe there are people who actually liked normal robots. Welcome to the wiki!

AW14:37, 18 April 2012
 

Thank you very much for the prompt reply.

So why on earth will someone write a regular robot, if a similar advanced robot will kick his ass? is it just a history thing?

Yonikes14:40, 18 April 2012
 

The author of Robocode thought Robot would be an easier starting point for beginners. I'm not really sure it is... And as for fairness, I'm not sure he could foresee how competitive Robocode would eventually become. :-)

As for why still write one? Sometimes people like writing bots under different constraints, even if they're silly. The most popular example would be weight classes based on Code Size (Mini/Micro/NanoBots), which even got their own Rumbles. People have also written Robots, Droids (+20 energy, no radar), and Perceptual Bots (don't store any state, even between ticks). Of course, comparing such bots to DrussGT is unfair =), but that doesn't have to ruin the fun. I recently wrote a Perceptual Bot myself (RetroGirl).

Voidious15:26, 18 April 2012
 

Someone can write a robot just for fun. Why there are races on bicycle, when you could also ride a motorbike. Why we have code-restricted classes. Mind you, the best robot (kawigi.robot.Girl) is not easy to defeat, especially in melee. Most school competitions I know of use Robots, as it probably easier to check and control the code and its behaviour, and to prevent 'lending' code from good bots out here. For me, writing a robot is more difficult than writing an advanced robot, because it is hard to wrap my mind around what to do when and so on.

GrubbmGait15:33, 18 April 2012
 

Hi,

Thanks for he answer. I didn't mean for question to be offensive (as in "why should one bother to write a Robot and not an Advanced one) I just wanted to make sure i understood correctly that the Advanced indeed has more power in the battle field.

Yoni

Yonikes17:11, 18 April 2012
 

RoboRumble could have an "extends Robot" category.

MN17:44, 11 May 2012
 

Slow RoboWiki

Hi mates. Is there an issue with RoboWiki? It is very slow and sometimes it even didn't responds.

Wompi09:57, 3 May 2012

Yes, I've also noticed this. I suspect a search engine may have been spidering, or perhaps a database backup was running.

Skilgannon17:33, 3 May 2012
 

I as looking into this on the server today, and it looks to me like the main thing loading the wiki down is Bing being ridiculously aggressive with it's spidering... :(

Rednaxela05:46, 9 May 2012
 
First page
First page
Last page
Last page