/*
 *    value.c
 *      =======
 *      - ohodnoceni pozice
 *              Martin Macok
 */

#include"data.h"

#define abs(x) (x>0 ? x : -x)
#define sign(x) (x==0 ? 0 : x / abs(x))

int Ohodnot(THra * H)
{				/* mat pat + matros */
	int p;
	TMG mg;
	p = MoveGen(H, mg, 1);
	/* urychleni by se ^^ melo dosahnout tim, ze negenerujeme vsechny tahy,
	   ale skoncime pri nalezeni prvniho ... */
	if (p == 0) {
		if (JeVSachu(H->natahu, H))	/* MAT */
			return -MATVAL;
		else
			return 0;	/* PAT */
	} else
		return OhodnotM(H);
}

int OhodnotM(THra * H)
{
	int i, v = 0;
	v += H->bily.rochada[2] - H->cerny.rochada[2];
	v += sign(H->sachovnice[3][3]) + sign(H->sachovnice[3][4]) + sign(H->sachovnice[4][3]) + sign(H->sachovnice[4][4]);
	v = sign(v);
	for (i = 1; i < 16; i++) {
		switch (H->bily.figury[i].fig) {
		case BPES:
			v += HPES;
			break;
		case BJEZ:
			v += HJEZ;
			break;
		case BSTR:
			v += HSTR;
			break;
		case BVEZ:
			v += HVEZ;
			break;
		case BDAM:
			v += HDAM;
			break;
		}
		switch (H->cerny.figury[i].fig) {
		case CPES:
			v -= HPES;
			break;
		case CJEZ:
			v -= HJEZ;
			break;
		case CSTR:
			v -= HSTR;
			break;
		case CVEZ:
			v -= HVEZ;
			break;
		case CDAM:
			v -= HDAM;
			break;
		}
	}
	if (H->natahu == BILYH)
		return v;
	else
		return -v;
}
