dos_compilers/Borland Turbo Pascal v55/CHESS/INIT.PAS
2024-07-04 06:10:07 -07:00

124 lines
5.4 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{****************************************************************************}
{* INIT.PAS: this file contains the routines which initialize the global *}
{* variables. *}
{****************************************************************************}
{****************************************************************************}
{* Init Possible Moves: put the constant values into the data structure *}
{* which gives the possible moves for each piece, the point values for *}
{* capturing enemy pieces, and the opposite color to the given one. *}
{****************************************************************************}
procedure InitPossibleMoves;
var index: integer;
begin
PossibleMoves [BISHOP].NumDirections := 4;
PossibleMoves [BISHOP].MaxDistance := 7;
PossibleMoves [BISHOP].UnitMove[1].DirRow := 1;
PossibleMoves [BISHOP].UnitMove[1].DirCol := -1;
PossibleMoves [BISHOP].UnitMove[2].DirRow := 1;
PossibleMoves [BISHOP].UnitMove[2].DirCol := 1;
PossibleMoves [BISHOP].UnitMove[3].DirRow := -1;
PossibleMoves [BISHOP].UnitMove[3].DirCol := -1;
PossibleMoves [BISHOP].UnitMove[4].DirRow := -1;
PossibleMoves [BISHOP].UnitMove[4].DirCol := 1;
PossibleMoves [KNIGHT].NumDirections := 8;
PossibleMoves [KNIGHT].MaxDistance := 1;
PossibleMoves [KNIGHT].UnitMove[1].DirRow := 1;
PossibleMoves [KNIGHT].UnitMove[1].DirCol := -2;
PossibleMoves [KNIGHT].UnitMove[2].DirRow := 2;
PossibleMoves [KNIGHT].UnitMove[2].DirCol := -1;
PossibleMoves [KNIGHT].UnitMove[3].DirRow := 2;
PossibleMoves [KNIGHT].UnitMove[3].DirCol := 1;
PossibleMoves [KNIGHT].UnitMove[4].DirRow := 1;
PossibleMoves [KNIGHT].UnitMove[4].DirCol := 2;
PossibleMoves [KNIGHT].UnitMove[5].DirRow := -1;
PossibleMoves [KNIGHT].UnitMove[5].DirCol := 2;
PossibleMoves [KNIGHT].UnitMove[6].DirRow := -2;
PossibleMoves [KNIGHT].UnitMove[6].DirCol := 1;
PossibleMoves [KNIGHT].UnitMove[7].DirRow := -2;
PossibleMoves [KNIGHT].UnitMove[7].DirCol := -1;
PossibleMoves [KNIGHT].UnitMove[8].DirRow := -1;
PossibleMoves [KNIGHT].UnitMove[8].DirCol := -2;
PossibleMoves [ROOK].NumDirections := 4;
PossibleMoves [ROOK].MaxDistance := 7;
PossibleMoves [ROOK].UnitMove[1].DirRow := 1;
PossibleMoves [ROOK].UnitMove[1].DirCol := 0;
PossibleMoves [ROOK].UnitMove[2].DirRow := 0;
PossibleMoves [ROOK].UnitMove[2].DirCol := -1;
PossibleMoves [ROOK].UnitMove[3].DirRow := 0;
PossibleMoves [ROOK].UnitMove[3].DirCol := 1;
PossibleMoves [ROOK].UnitMove[4].DirRow := -1;
PossibleMoves [ROOK].UnitMove[4].DirCol := 0;
PossibleMoves [QUEEN].NumDirections := 8;
PossibleMoves [QUEEN].MaxDistance := 7;
PossibleMoves [KING].NumDirections := 8;
PossibleMoves [KING].MaxDistance := 1;
for index := 1 to 4 do begin
PossibleMoves [QUEEN].UnitMove[index] := PossibleMoves [BISHOP].UnitMove[index];
PossibleMoves [KING].UnitMove[index] := PossibleMoves [BISHOP].UnitMove[index];
end;
for index := 1 to 4 do begin
PossibleMoves [QUEEN].UnitMove[index + 4] := PossibleMoves [ROOK].UnitMove[index];
PossibleMoves [KING].UnitMove[index + 4] := PossibleMoves [ROOK].UnitMove[index];
end;
CapturePoints[BLANK] := 0;
CapturePoints[PAWN] := 10;
CapturePoints[KNIGHT] := 35;
CapturePoints[BISHOP] := 35;
CapturePoints[ROOK] := 50;
CapturePoints[QUEEN] := 90;
CapturePoints[KING] := 2000;
EnemyColor[C_WHITE] := C_BLACK;
EnemyColor[C_BLACK] := C_WHITE;
end;
{****************************************************************************}
{* Startup Initialize: set the default player info and options, and set *}
{* valid and invalid squares of the board. *}
{****************************************************************************}
procedure StartupInitialize;
var row, col: RowColType;
begin
Randomize;
InitPossibleMoves;
DefaultFileName := 'EXAMPLE';
{*** default options ***}
Game.TimeLimit := 0;
Game.EnPassentAllowed := true;
Game.SoundFlag := true;
Game.FlashCount := 2;
Game.WatchDelay := 600;
{*** default player attributes ***}
with Player[C_WHITE] do begin
Name := 'PERSON';
IsHuman := true;
LookAhead := 3;
PosEval := false;
end;
with Player[C_BLACK] do begin
Name := 'COMPUTER';
IsHuman := false;
LookAhead := 3;
PosEval := false;
end;
{*** initialize board ***}
for col := -1 to 10 do
for row := -1 to 10 do
with Board[row, col] do begin
image := BLANK;
color := C_WHITE;
HasMoved := false;
ValidSquare := false;
end;
for col := 1 to BOARD_SIZE do
for row := 1 to BOARD_SIZE do
Board[row, col].ValidSquare := true;
end;
{*** end of INIT.PAS include file ***}