⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 evalmove.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lintstatic	char sccsid[] = "@(#)evalmove.c 1.1 92/07/30 Copyr 1985 Sun Micro";#endif/* * Determines the value of a move (0-1000) */#include <stdio.h>extern int	board[26];		/* board:  negative values are white,				   positive are red */extern int	p[5];			/* starting position of moves */extern int	g[5];			/* ending position of moves (goals) */extern int	cturn;			/* whose turn it currently is:					-1 = white					 1 = red					 0 = just quitted					-2 = white just lost					 2 = red just lost */extern int	bar;			/* position of bar for current player */extern int	home;			/* position of home for current player */extern int	*offptr;		/* pointer to off for current player */extern int	*inptr;			/* pointer to in for current player */extern int	mvlim;			/* 'move limit':  max. number of moves */extern int	race;			/* game reduced to a race */extern FILE *logfd;#define	bay(x)		((abs(x) - 1) / 6)#define	baypos(x)	(bay(x) * bay(x))#define	pos(x)		(abs(x) * abs(x) / 24)/* * returns a number between 0 and 1000 which is the value of this move * 1000 is the best move possible. */evalmove(){	register int	i, em;	int val = 0;	int openmen;	/* number of open men */	int openpos;	/* open men distance 0 - 100 */	int chance;	/* chance of getting hit  0 - 100 */	int points;	/* number of points controlled */	int pointpos;	/* number of points controlled 0 - 100 */	int distance;	/* distance from home range 0 - 100 */	int menoff;	/* men off board */	int menin;	/* men in home area */	int barmen;	/* bad guys on the bar */	int homefilled;	/* number of points held in our home */	int hisfilled;	/* number of points held in his home */	int inpos;	/* men in position to build blocked points in home */	int myblock;	/* points in a row blocked (1-6) */	int hisblock;	/* points in a row he has blocked (1-6) */	odds(0, 0);	chance = openmen = openpos = points = pointpos = 0;	homefilled = hisfilled = barmen = 0;	if (!race)  {		for (i = 1; i < 25; i++)  {			if (board[i] == cturn) {				openpos += baypos(bar-i);				chance = canhit(i,1);				openmen++;			}		}		if (chance == 0) {			chance = openmen;		}		openpos = openpos * 7;		for (i = bar+cturn; i != home; i += cturn) {			if (board[i]*cturn > 1) {				pointpos += baypos(bar-i);				points++;			}		}		pointpos = (pointpos * 4) / 3;		homefilled = filled(home);		hisfilled = filled(bar);		barmen = abs(board[home]);		inpos = readytofill(home);		myblock = blockage(home);		hisblock = blockage(bar);	}	distance = 0;	for (em = bar; em != home; em += cturn)  {		if (board[em]*cturn > 0) {			distance += pos(home-em) * board[em]*cturn;		}	}	distance = distance / 2;	menin = *inptr;	menoff = *offptr;	if (menoff < 0) {		menoff = 0;	}	if (menoff == 15) {		/*		 * all men off, best move!		 */		val = 10000;	} else if (race)  {		/*		 * The race is on		 */		if (menin + menoff == 15) {			/*			 * all men in, go for men off, or distance.			 */			val = 1000 + menoff * 200 - distance;		} else {			/*			 * all men not in, move furthest man			 */			val = 200 - distance;		}	} else  {		/*		 * no race		 */		if (homefilled == 6 && barmen) {			/*			 * he is trapped			 */			val = 3000 + menoff * 100 - distance;		} else {			val = homefilled * 150			    + menoff * 50			    + inpos * 30			    + pointpos * 4			    + points * 3			    + menin			    + (barmen * homefilled * homefilled * (110 - openpos)) / 2			    - distance * 2			    - ((chance * openpos * hisfilled * hisfilled * hisfilled) / 200)			    + 3 * myblock			    - hisblock;		}	}	if (logfd != NULL) {		for (i = 0; i < mvlim; i++)  {			fprintf(logfd, "%d-%d ", p[i], g[i]);		}		fprintf(logfd, "= %d\n", val);		fprintf(logfd,"race %d openmen %d openpos %d chance %d points %d pointpos %d inpos %d distance %d\nmenoff %d menin %d, barmen %d homefilled %d hisfilled %d myblock %d hisblock %d\n",race, openmen, openpos, chance, points, pointpos, inpos, distance, menoff, menin, barmen, homefilled, hisfilled, myblock, hisblock);		fflush(logfd);	}	return(val);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -