示例#1
0
const char *move_to_str(const board_t *board, const move_t *move)
{
    assert((bitcount(*move)) >= 2);

    if (bitcount(*move) == 2)
    {
        int i = lowbit(*move & board->stones[0]),
            j = lowbit(*move & ~board->stones[0]);

        strcpy(move_buf, pos_to_str(i));
        strcat(move_buf, "-");
        strcat(move_buf, pos_to_str(j));
    }
    else
    {
        bitboard_t occupied = board->stones[0] | board->stones[1];
        int f;
        if (*move & board->stones[0])
        {
            f = lowbit(*move & board->stones[0]);
            strcpy(move_buf, pos_to_str(f));
            format_move(move_buf + 2, f, *move ^ BIT(f), occupied ^ BIT(f));
        }
        else
        for(f = 0; f < FIELDS; ++f)
        {
            strcpy(move_buf, pos_to_str(f));
            if (format_move(move_buf + 2, f, *move ^ BIT(f), occupied ^ BIT(f)))
                break;
        }
    }
    return move_buf;
}
示例#2
0
int main(int argc, char* argv[])
{
	if(argc != 3)
		usage();
	float scale = atof(argv[1]);
	FILE* fin = fopen(argv[2],"r");
	Agraph_t* g = agread(fin, (Agdisc_t*)NULL);
	Agnode_t* n;
	
	for(n = agfstnode(g); n; n = agnxtnode(g,n)) {
		char* pos = agget(n,"pos");
		double x,y;
		sscanf(pos,"%lf,%lf",&x,&y);
		x *= scale;
		y *= scale;		
		char* s = pos_to_str(x,y);
		agset(n,"pos",s);
		free(s);
	}
	
	agwrite(g,stdout);
	
	agclose(g);
	return 0;
}
示例#3
0
int main(int argc, char* argv[])
{
	struct marsopts opts = init(argc, argv);
	Agraph_t* g = agread(opts.fin, (Agdisc_t*)NULL);
	Agnode_t* n;
	mat z;
	
	init_graph(g);
	z = mars(g, opts);
	mat_scalar_mult(z, opts.scale);

    if(opts.viewer) {
        viewer(argc, argv);
    } else {
	    for(n = agfstnode(g); n; n = agnxtnode(g,n)) {
		    int id = getid(n);
		    char* s = pos_to_str(&z->m[mindex(id, 0, z)], z->c);
		    agset(n,"pos",s);
		    free(s);
	    }
	
	    agwrite(g, opts.fout);
	}
	mat_free(z);
	clean_up(g);
	agclose(g);
	return 0;
}
示例#4
0
bool format_move(char *buf, int f, bitboard_t todo, bitboard_t occupied)
{
    int n, g, h;

    if (todo == BIT(f))
        return true;

    for (n = 0; moves_jumps[f][n] >= 0; ++n)
    {
        if ( !(occupied & BIT(h = moves_jumps[f][n])) &&
             ((occupied & todo) & BIT(g = (f + h)/2)) )
        {
            *buf = '*';
            strcpy(buf + 1, pos_to_str(h));
            if (format_move(buf + 3, h, todo ^ BIT(g), occupied))
                return true;
        }
    }
    return false;
}