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

📄 changelog

📁 一款运行在linux上的象棋游戏。用GTK/GNOME环境下用GLADE开发。
💻
📖 第 1 页 / 共 3 页
字号:
Version 1.0 (17 Feb 96)		(Chua Kong Sian)	This version plays a legal game of chess.  It supports all the	special moves (en passant, castling and promotion/underpromotion).	It uses the standard PVS search algorithm and incorporates the	fail-soft alpha-beta enhancement which gives tighter alpha-beta	bounds.  All evaluations are only done at the end-points.	Move ordering is by captures first and also history heuristics.Version 1.1 (19 Feb 96)	Added in the NULL move heuristics.  Currently the null move	depth reduction is 2.Version 1.2 (13 Jul 96)	For sort captures, a recapture is always tried before another	capture of the same value.  This gives slightly better pruning.	Material for white & black is updated incrementally in make/unmake	move.  This speeded up the program significantly.  Stalemates are 	recognized during the search and a score of 0 is returned.Version 1.3 (16 Jul 96)	For null moves, if the current material+pawn value is less than	alpha, then we don't try the null move test.  The reason is that	since our position is already so poor, when playing a null move,	our score is going to be less (unless the position is zugzwang).	So its not going to be a beta-cut neither is it likely to improve	alpha.  This appears to reduce the nodecount.  Added a flag.ended 	variable to the flag structure.  When this is true, the game has 	ended and typing go will produce nothing.  Version 1.4 (19 Jul 96)	Check for repetition in search (code currently not working).	Added in transposition table code.  Currently there is no rehashing	done.  The whole PV was returned to the top of the tree. Version 1.5 (29 Jul 96)	Mate stored in the transposition table need to be offset by (+-ply).	Pruning via killer moves has been improved.  A new HistoryStore()	is created for code dealing with history & killer.  InChk and 	GenMoves() are no longer needed in quiesce().  All that work is the 	responsibility of the full-width search.  Much improved pruning.  	The flag structure was replaced by an unsigned long.  Got rid of the 	ExScore variable.  Now all calls to Evaluate() will yield the exact 	score.Version 1.6 (2 Aug 96)	When displaying the PV and the end is reached, see if the rest of	the line can be found from the transposition table.  The random 	number generator is taken from Knuth.  FilterIllegalMoves is called 	to cull out illegal moves.  This prunes enough branches such that 	it turns out to be a gain.  Speeded up FilterIllegalMoves().  	Converted board.ep to short rather than using a BitBoard.  Also	fast evaluation is done in Evaluate() rather than quiesce.  Got rid	of epsq variable in leaf structure; it wasn't needed as a board.ep	already exists.  A bug was introduced when the new random number	generator was added; the top ten bits of the hashkey was being  	corrupted; this is now fixed.  Speeded up null.c code and MakeMove()	UnmakeMove() routines.  Got rid of piececap in leaf{} structure;	It has been integrated in the the leaf.flag variable.  The leaf.f	and leaf.t variable has been merged into the leaf.mv variable.Version 1.7 (5 Aug 96)	A nullhashcode was added so that a null move will change the 	HashKey (a bad bug!).  Repetition code is now working correctly.	The enpassant and castling hash codes are now 64 bit hash values	instead of being bits in the HashKey.  A lone king evaluator is	added in.  This allows the program to perform elementary mates.	Got rid of FilterIllegalMoves() in search.  Now all pseudo-legal 	moves are tried; they are immediately rejected if it is determined	that they are illegal.  An EvaluateDraw() routine is called early	in the Search() and Quiesce(); if the position is a known draw 	(e.g. not enough mating material), no searching is done.  A KBNK() 	mating routine is added; this seems to be working fine.Version 1.8 (12 Aug 96)	A lot of leaf struct variables are converted to int, making the	program slightly faster.  Search extension for pushing pawns to	7th rank.  The SANMove() code is now responsible for determining	if a checking move is mate and adds the '#' sign accordingly.	This is much cleaner.  Added passed-pawn evaluations.  Fix bug	in eval.c where EnemyKing was wrongly initialized.  Added KingSq[]	array to help King stay in the corner.  Added primitive development	code; if bishops and knights are on original squares, penalize.	Got rid of Material() and substitute a macro MATERIAL for speed.Version 1.9 (17 Aug 96)	Change the way check/recapture extensions are tested; previously	check extensions only take place at <= Idepth*2.  Now a total of	Idepth+1 check extensions are allowed.  For recapture, a total 	of 2 extensions are allowed.  This makes the program search deeper.	Fix bug whereby a promotion move (e.g. d8=Q or d8Q) was considered	illegal if the opponent tried to enter it on the command line.  	Fixed a bug in the PVS search.Version 1.10 (29 Aug 96)	KBBK with bishops of the same colour are now recognized as draws.	Matescore now starts from 32767 instead of 9999.  INFINITY 	extended to 32767.  Added Ctrl-C trap so that the search will end        instead of aborting the program.  Originally the move returned by        a hash probe is added to the history score.  This is removed and	the program show much improved pruning.Version 1.11 (21 Nov 97)        Nulls can be toggled on/off.  Worstscore[] is now initialized to        -100 instead of infinity.  EvaluateDraw() is called after iterative        deepening is over to see if the game is a draw.  New routine        ScoreDev() to calculate development separately; "show eval" command        will print development score.  Got rid of Developed[2] global variable.        Some tweaking in search.c.  The decision to print '&' or '+' for a        PV is now in ShowLine().Version 1.12 (27 Dec 97)        When a mate in n-ply is found, the search will never go deeper than        n-2 ply.  Fix some bugs in search.c.  Mate scores in hashtables are 	now always flag as EXACTSCORE, fixing some bugs in mates.  At ply 1,	we now don't return the hash score if it is an exact score as we	need to search the rest of the moves.  In ttable.c, SANMove() should	not be called as GenMoves(ply) was never called.  This affected the	debug code.  Now algebraic moves are printed rather than SANMove for	ttable debug code.  Fix repetition code, now gmg1.ci/42 can be solved.	In iterate.c, foundPV should be set to false when a research is 	being done.  A Hashmv variable is used to store the move return from	probing the hash table.  This is use for move sorting.  Version 1.13 (1 Jan 98)	Got rid of history.c.  Killer is stored only if it is a beta cut.	Fix bug in pawn eval for isolated pawns and passed pawns.  Functions	like ScoreDev & MATERIAL now return the score for side to move instead	of score for white.  This also fixed a bug in the null move condition	whereby MATERIAL was only seen from white point of view when it should	be from the side-to-move view.  Got rid of SlowEval variable speeding	up things quite a bit.  GenAtaks() was NOT called in Evaluate(); this	is now fixed.Note:  From this point on, changes within a release are labelled as a-z.  Thisis also reflected in version.cVersion 1.14 (3 Jan 98)	a. Fixed bug in solve.c whereby the test for a correct solution is not	   correctly done (pointed out by Stuart).	b. When searching for mates, eval just return MATERIAL saving time.	c. Uses EPD format rather than FEN; also clean up ParseEPD; fen.c	   now called epd.c	d. io.c renamed to output.c.  Game phase is now 1-8 (opening-ending).	e. In quiesce(), if a capture cannot bring the score near alpha,	   don't search it, speeding things up.	f. If we have a rootscore much worst that our previous iteration	   rootscore, we continuing searching.  (Fix from Stuart).	g. Got rid of nxtline, bstline way of updating the PV.  Instead use	   the method in cheops, resulting in much cleaner code. 	h. Got rid of savePVar[] array and all the code related to it.  	   What its for, I can't remember.	i. SortMoves() takes into account moves towards the centre.  Pruning	   is slightly improved.	j. AttackFrom() function is added.  This returns the bitboard of 	   squares attacked by a piece.  Remove GenAtaks() and other code	   in eval.c which required the use of attack tables.	k. Bug in ScoreDev() whereby an early Queen move which should be 	   penalized isn't.  Various bug fixes & tuning in eval code.	l. PGNReadFromFile() is able to read the 1st game in a pgn file.	m. In the null move, instead of searching with window [alpha,beta],	   we search with [beta-1,beta].	n. Added in a directions[][] array.  This array is used in swap.c 	   when checking for x-ray pieces.  Added AddXrayPiece() routine	   which is used in the static evaluator. 	o. Got rid of foundPV variable.  It isn't really necessary.	p. Don't flag mate score in ttable as exact score; they aren't.	q. Change some (best >= alpha) code to (best > alpha) in Search().	   What was I thinking of then!?Version 1.15 (16 Jan 1998)	a. Convert AlgbrMove() to return char * rather than void.	b. In the quiescent search, use SwapOff() to see if a capture is	   futile and prune it.  Removed as it wasn't working well.	c. Big bonus for connected passed pawns on the 6/7th rank.  Solves	   WAC/2 easily.	d. Bug fix and clean up of code in sort.c.  Results in improve capture	   sorting and better pruning.  Got rid of DeepExtCnt; not used.	e. For search extensions, limit capture to maximum of 2 and checks to	   maximum of Idepth, the iteration depth.	f. SwapOff() wasn't working for non-captures as pointed out by Stuart.	   Fixed SwapOff(); appears to be okay now. Used SwapOff() in capture 	   move ordering; seems to help a bit.	g. In Search(), move the Quiesce() call before the ttable probe.  	   Slight improvement in pruning and ttable stats are now much higher.	h. Still another bug in AddXrayPiece() was fixed.  	i. Slight change in GenMoves() to speed it up slightly.	j. Implemented pawn hash table.  Achieves good increase in nps (25%).	k. Added in a SquarePawnMask[] array.  This is to determine if a king	   is able to stop a passed in a king and pawns only endgame.	l. Material values of 100,350,350,550,1100.  Also some optimizations	   in move.c.  PHASE modified for new material values.	m. Implemented a two-tier transposition table.  Minimal gain in tree	   size reduction.	n. Only store non-captures as killers; try killers after captures	   in sort.  This gives more than 30% reductions in nodes searched.	   Also fix a bug in SortMoves().	o. Only give bonus for rook on 7th rank if enemy king is on 8th rank	   or there are enemy pawns on 7th rank.  Other bug fixes and tuning	   in eval.	p. Recognize and penalize backward pawns.Version 1.16 (26 Jan 98)	a. Added a Mvboard[] array which returns the number of times a piece	   on [sq] have moved.  Use it for penalizing early Q moves.	b. ScoreDev() returns only development of side-to-move instead of	   white-black.	c. Separate Search() into a SearchRoot() which is called at ply==1	   and Search().  Some modifications in search.	d. Added back GenAtaks() into evaluate when doing slow evaluation.	   Modifications in the ScoreX() routines to make use of attack tables.	e. Fixed a bug in UnmakeNullMove whereby the board.ep variable wasn't	   correctly restored.  	f. Added the passed BitBoard into the pawn hash table allowing us 	   to save the passed pawn board into the table.	g. In evaluate, when one side has no mating material, make sure the	   score is never > 0.	h. Added in Square of the pawn evaluation.  Fix a bug in ScoreP whereby	   passed pawns information was being changed.  In EvaluateDraw(),	   fix a bug whereby 2N vs 2N wasn't a draw.	i. Fix a bug which sometimes put an illegal move in the PV.  This	   was happening when an EXACTSCORE was returned, but the PVlen was	   incorrectly set.	j. Lots of changes/tuning to eval.c.	k. Added in an IsLegalMove() function to test if a move is legal.

⌨️ 快捷键说明

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