Am 08.11.2011, 21:04 Uhr, schrieb maarten van damme <maartenvd1...@gmail.com>:

I have stolen an isvisible method from the c# bot

bool isVisible(Loc loc){
 Loc[] offsets;
int squares = cast(int)floor(sqrt(_viewradius2));
for (int r = -1 * squares; r <= squares; ++r){
for (int c = -1 * squares; c <= squares; ++c){
int square = r * r + c * c;
if (square < _viewradius2){
Loc newLoc = {r,c};
offsets~=newLoc;
}
}
}
foreach (ant;_myAnts)
{
foreach (offset;offsets)
{
if ((ant.col + offset.col) == loc.col &&
(ant.row + offset.row) == loc.row)
{
 return true;
}
}
}
return false;
 }

Nice theft, although 'offsets' should really be a field of the Ants class and not recomputed on every invocation.

But I have also lost interest because of a couple of shortcommings, the
hell it is to debug that thing and when it finally compiles fine on 2
machines it gives a cryptic error about glue.c (that had something to do
with rdmd)

I tend to use a 'general purpose' Makefile for building, that I symlink into new projects and wait for a bigger, better build tool. Then I use the 'debug' target as the build command in DDT (Eclipse) and have an 'External Launcher' that runs gdb with the executable. The flags look like this: -w -unittest -debug -gc -L--export-dynamic. Still I mostly use writeln for debugging algorithms and in/out contracts to avoid bugs that are easy to catch there. As for the Ants game, you can add a flag to the engine, I think it was -I, that has it save bot input in a text file. If you feed that to your bot via stdin, the bot will behave exactly as during the game, but this time you can wrap it in a call to gdb, use a special debug build or add flags to your bot that enables more debugging output.

Reply via email to