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

📄 mainunit.pas

📁 game ve co tuong moi ca ban don xem
💻 PAS
📖 第 1 页 / 共 3 页
字号:
				if a mod CrossPiece_Size.X>=2*k then
					P2.x:=P2.x+1
				else
					if a mod CrossPiece_Size.x>=k then OK:=false;
			if b>=0 then
				if b mod CrossPiece_Size.y>=2*l then
					P2.y:=P2.y+1
				else
					if b mod CrossPiece_Size.y>=l then OK:=false;
			str(p2.X,s);

		end
		else
			OK:=false;
	end;

	procedure TMainForm.Hard1Click(Sender: TObject);
begin
NewGame;
MAX_FLY:=4;
ShowMessage('Cấp độ khó ruig>Chúc bạn may mắn!');
end;

procedure TMainForm.Hardest1Click(Sender: TObject);
begin
NewGame;
MAX_FLY:=7;
ShowMessage(' Bạn sẽ không bao giờ thắng nổi tôi!');
end;

procedure TMainForm.hngtintcgi1Click(Sender: TObject);
  var
tt:TICTU_K5H;
begin
tt:=TICTU_K5H.Create(Application);
tt.ShowModal;
end;
procedure TMainForm.hot1Click(Sender: TObject);
begin
 close;
end;

Function TMainForm.KingFace(Source,Dest:Integer):Boolean;
    var i,k,t:integer;
	begin
        KingFace:=false;
        i:=Source mod 9;
        if i=0 then i:=9;
        if (i>=4) and (i<=6) and (Piece[dest]<>KING) then
        begin
            t:=Piece[dest];
            Piece[Dest]:=Piece[Source];
            Piece[Source]:=EMPTY;
            i:=1;
            repeat
                k:=KingPalace[i];
                inc(i);
            Until Piece[k]=KING;
            k:=k+SIZE_X;
            while (k<BOARD_SIZE) and (Piece[k]=EMPTY) do
                k:=k+SIZE_X;
            if Piece[k]=KING then KingFace:=true;
            Piece[Source]:=Piece[Dest];
            Piece[Dest]:=t;
        end;
	end;

	procedure TMainForm.Level11Click(Sender: TObject);
begin
  NewGame;
 MAX_FLY:=1;
 ShowMessage('Bạn đang chọn trình độ gà nhất!');
end;

procedure TMainForm.Level21Click(Sender: TObject);
begin
      Newgame;
      MAX_FLY:=2;
      ShowMessage('Trình  mới tập chơi.Muốn học hỏi.');
end;

procedure TMainForm.Level31Click(Sender: TObject);
begin
NewGame;
MAX_FLY:=3;
ShowMessage('Bạn đã đạt đẳng cấp Beginer.Chúc thắng lợi nhé!.Hí hí');
end;

Function TMainForm.Eval:Integer;
		const PieceValue:array[1..7] of integer=(10,20,20,40,45,90,100);
	    pointtable: array[1..7, 1..2, 1..90] of byte =
	    (((0,  0,  0,  0,  0,  0,  0,  0,  0, 			{ tốt xanh }
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
	   10,  0, 12,  0, 15,  0, 12,  0, 10,
	   10,  0, 13,  0, 10,  0, 13,  0, 10,
	   20, 20, 20, 20, 20, 20, 20, 20, 20,
	   20, 21, 21, 22, 22, 22, 21, 21, 20,
	   20, 21, 21, 23, 23, 23, 21, 21, 20,
	   20, 21, 21, 23, 22, 23, 21, 21, 20,
	   11, 12, 13, 14, 14, 14, 13, 12, 11),

	  (11, 12, 13, 14, 14, 14, 13, 12, 11,          { Tốt đỏ }
	   20, 21, 21, 23, 22, 23, 21, 21, 20,
	   20, 21, 21, 23, 23, 23, 21, 21, 20,
	   20, 21, 21, 22, 22, 22, 21, 21, 20,
	   20, 20, 20, 20, 20, 20, 20, 20, 20,
	   10,  0, 13,  0, 10,  0, 13,  0, 10,
	   10,  0, 12,  0, 15,  0, 12,  0, 10,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0)),

	  ((0,  0,  0, 20,  0, 20,  0,  0,  0, 			{sĩ xanh }
		0,  0,  0,  0, 22,  0,  0,  0,  0,
		0,  0,  0, 19,  0, 19,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0),

	   (0,  0,  0,  0,  0,  0,  0,  0,  0,          { Sĩ đỏ }
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0, 19,  0, 19,  0,  0,  0,
		0,  0,  0,  0, 22,  0,  0,  0,  0,
		0,  0,  0, 20,  0, 20,  0,  0,  0)),

	  ((0,  0, 25,  0,  0,  0, 25,  0,  0, 			{ Tịnh xanh }
		0,  0,  0,  0,  0,  0,  0,  0,  0,
	   23,  0,  0,  0, 28,  0,  0,  0, 23,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0, 22,  0,  0,  0, 22,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0),

	   (0,  0,  0,  0,  0,  0,  0,  0,  0,          { Tịnh đỏ }
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0, 22,  0,  0,  0, 22,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
	   23,  0,  0,  0, 28,  0,  0,  0, 23,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0, 25,  0,  0,  0, 25,  0,  0)),

	  ((40, 35, 40, 40, 40, 40, 40, 35, 40, 		{Mã xanh}
		40, 41, 42, 40, 20, 40, 42, 41, 40,
		40, 42, 43, 40, 40, 40, 43, 42, 40,
		40, 42, 43, 43, 43, 43, 43, 42, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 41, 42, 42, 42, 42, 42, 41, 40,
		40, 40, 40, 40, 40, 40, 40, 40, 40),

	   (40, 40, 40, 40, 40, 40, 40, 40, 40, 		{ Mã đỏ }
		40, 41, 42, 42, 42, 42, 42, 41, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 43, 44, 44, 44, 44, 44, 43, 40,
		40, 42, 43, 43, 43, 43, 43, 42, 40,
		40, 42, 43, 40, 40, 40, 43, 42, 40,
		40, 41, 42, 40, 20, 40, 42, 41, 40,
		40, 35, 40, 40, 40, 40, 40, 35, 40)),

	  ((50, 50, 50, 50, 50, 50, 50, 50, 50, 		{ Pháo xanh}
		50, 50, 50, 50, 50, 50, 50, 50, 50,
		50, 51, 53, 53, 55, 53, 53, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 51, 51, 51, 51, 51, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 50, 50, 50, 50, 50, 50, 50, 50),

	   (50, 50, 50, 50, 50, 50, 50, 50, 50, 		{ Pháo đỏ }
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 51, 51, 51, 51, 51, 51, 50,
		50, 51, 50, 50, 50, 50, 50, 51, 50,
		50, 51, 53, 53, 55, 53, 53, 51, 50,
		50, 50, 50, 50, 50, 50, 50, 50, 50,
		50, 50, 50, 50, 50, 50, 50, 50, 50)),


	  ((89, 92, 90, 90, 90, 90, 90, 92, 89, 		{ Xe xanh }
		91, 92, 90, 93, 90, 93, 90, 92, 91,
		90, 92, 90, 91, 90, 91, 90, 92, 90,
		90, 91, 90, 91, 90, 91, 90, 91, 90,
		90, 94, 90, 94, 90, 94, 90, 94, 90,
		90, 93, 90, 91, 90, 91, 90, 93, 90,
		90, 91, 90, 91, 90, 91, 90, 91, 90,
		90, 91, 90, 90, 90, 90, 90, 91, 90,
		90, 92, 91, 91, 90, 91, 91, 92, 90,
		90, 90, 90, 90, 90, 90, 90, 90, 90),

	   (90, 90, 90, 90, 90, 90, 90, 90, 90, 		{ Xe đỏ }
		90, 92, 91, 91, 90, 91, 91, 92, 90,
		90, 91, 90, 90, 90, 90, 90, 91, 90,
		90, 91, 90, 91, 90, 91, 90, 91, 90,
		90, 93, 90, 91, 90, 91, 90, 93, 90,
		90, 94, 90, 94, 90, 94, 90, 94, 90,
		90, 91, 90, 91, 90, 91, 90, 91, 90,
		90, 92, 90, 91, 90, 91, 90, 92, 90,
		91, 92, 90, 93, 90, 93, 90, 92, 91,
		89, 92, 90, 90, 90, 90, 90, 92, 89)),

	  ((0,  0,  0, 30, 35, 30,  0,  0,  0, 			{ Tướng xanh}
		0,  0,  0, 15, 15, 15,  0,  0,  0,
		0,  0,  0,  1,  1,  1,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0),

	   (0,  0,  0,  0,  0,  0,  0,  0,  0,          { Tướng đỏ }
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  0,  0,  0,  0,  0,  0,
		0,  0,  0,  1,  1,  1,  0,  0,  0,
		0,  0,  0, 15, 15, 15,  0,  0,  0,
		0,  0,  0, 30, 35, 30,  0,  0,  0)));
		var i,s:integer;
    function Bonous: integer;
    const pn: array[0..6] of integer = (0,-2, -3, -3, -4, -4, -5); { There is not King }
    var bn: array[1..2, 0..6] of integer;
        i: integer;
        s:longint;
    begin
    	for i := 0 to 6 do
        begin
              bn[DARK, i] := pn[i];
              bn[RED, i] := pn[i];
        end;

    	for i := 1 to 2 do
        begin			{ Scan DARK and RED }
    		if materialnumber[i, BISHOP] < 2 then
            begin
    			inc(bn[3-i, ROOK], 4);
    			inc(bn[3-i, KNIGHT], 2);
    			inc(bn[3-i, PAWN], 1);
    		end;

    		if materialnumber[i, ELEPHANT] < 2 then
            begin
	    		inc(bn[3-i, ROOK], 2);
    			inc(bn[3-i, CANNON], 2);
    			inc(bn[3-i, PAWN], 1);
	    	end;
    	end;
    	if (piececolor[1]=DARK) and (PieceColor[2]=DARK) and (Piece[1]=ROOK) and (Piece[2]=KNIGHT) then
    	   	dec(bn[DARK, 0], 10);
    	if (PieceColor[8]=DARK) and (PieceColor[9]=DARK) and (Piece[9]=ROOK) and (Piece[8]=KNIGHT) then
    		dec(bn[DARK, 0], 10);
    	if (PieceColor[82]=RED) and (PieceColor[83]=RED) and (Piece[82]=ROOK) and (Piece[83]=KNIGHT) then
    		dec(bn[RED, 0], 10);
    	if (PieceColor[89]=RED) and (PieceColor[90]=RED) and (Piece[90]=ROOK) and (Piece[89]=KNIGHT) then
    		dec(bn[RED, 0], 10);
    	s := bn[DARK, 0] - bn[RED, 0];
    	for i := 1 to 6 do
	    	s := s  +	materialnumber[DARK,  i] * bn[DARK,  i]
				-	materialnumber[RED, i] * bn[RED, i];
	    Bonous := s;
    end;
	begin
        inc(EvalCOunt);
        s := 0;
	    for i := 1 to BOARD_SIZE do
        begin
          //  a:=Piece[i] div 10;
	    	if  PieceColor[i]= DARK then s := s + PieceValue[Piece[i]]+pointtable[Piece[i], DARK, i]
	    	else if PieceColor[i] = RED then s := s - PieceValue[Piece[i]]-pointtable[Piece[i], RED, i];;
        end;
    	Eval := s + Bonous;
	end;
	Function TMainForm.AlphaBeta(Alpha,Beta:Integer;Depth:byte):integer;
		Var i,Best,Value,p,j,n,k,fcannon,x,y,t:Integer;
    Procedure Common(s,d:integer);
    var FACEKING:boolean;
        CL,PIE:byte;
    begin
        if KingFace(s,d) then exit;
        FACEKING:=(Piece[D]=KING);
        PIE:=Piece[d];
        CL:=PieceColor[d];
        Piece[d]:=Piece[s];
        Piece[s]:=EMPTY;
        PieceColor[d]:=PieceColor[s];
        PieceColor[s]:=EMPTY;
        side:=3-side;
        if FACEKING then value:=1000-MAX_FLY+Depth
        else value:=-AlphaBeta(-Beta,-Alpha,Depth-1);
        side:=3-side;
        Piece[s]:=Piece[d];
        Piece[d]:=PIE;
        PieceColor[s]:=PieceCOlor[d];
        PieceColor[d]:=CL;
        if value>best then
        begin
            best:=value;
            if Depth=Max_Fly then
            begin
                NewMove.Source:=i;
                NewMove.dest:=y;
            end;
        end;

⌨️ 快捷键说明

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