예제 #1
0
파일: place.c 프로젝트: kahrs/cda
void
place(Chip *c)
{
	register Pin *p;
	Chip *cp;
	int i;

	putpkg(c);
	if(!(c->flags&IGRECT)){
		if(cp = rectadd(c)){
			if(!quiet)
				fprint(2, "chip %s: rect collision with %s\n",
					c->name, cp->name);
			unplace(c);
			return;
		}
	}
	if(!(c->flags&IGPINS)){
		for(i = 0, p = c->pins; i < c->npins; i++, p++)
			if(pinlook(XY(p->p.x, p->p.y), 0) == 0){
				if(!quiet)
					fprint(2, "pin %s.%d[%p]; no pinhole\n",
						c->name, i+c->pmin, p->p);
				unplace(c);
				return;
			}
	}
}
예제 #2
0
/**
 * Same as before, but perform alpha-beta pruning.
 * The main routine should make the call with
 * alpha = COMP_LOSS and beta = COMP_WIN.
 */
int TicTacToe::findCompMove( int & bestMove, int alpha, int beta )
{
int i, responseValue;
int dc;   // dc means don't care; its value is unused
int value;

if( fullBoard( ) )
    value = DRAW;
else
if( immediateCompWin( bestMove ) )
    return COMP_WIN;    // bestMove will be set by immediateCompWin
else
{
    value = alpha; bestMove = 1;
    for( i = 1; i <= 9 && value < beta; i++ )  // Try each square
    {
        if( isEmpty( i ) )
        {
            place( i, COMP );
            responseValue = findHumanMove( dc, value, beta );
            unplace( i );  // Restore board

            if( responseValue > value )
            {
                   // Update best move
                value = responseValue;
                bestMove = i;
            }
        }
    }
}
return value;
}