unit Main;
interface
uses Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, Buttons, Graphics, mmsystem;
type TForm1 = class(TForm) StatusBar1: TStatusBar; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Panel1: TPanel; Label1: TLabel; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Label3: TLabel; Label4: TLabel; BitBtn3: TBitBtn; Image1: TImage; Image2: TImage; Label5: TLabel; Label2: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Timer1: TTimer; Label11: TLabel; procedure BitBtn2Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Label11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
private { Private declarations } public { Public declarations } end;
FiveChess_Struct=record x1 : integer; y1 : integer; x2 : integer; y2 : integer; state : byte; end; FiveChess_Data=array [0..14,0..14] of FiveChess_Struct;
Player = ( NON,White,Black);
var Form1: TForm1; Start_Flag : Boolean; FiveChess_Array:FiveChess_Data ; Online: player; whitewin,blackwin:byte; whitetime,blacktime:integer; px1,px2,py1,py2 : integer;
Undo_i,Undo_j : integer; function Ini_Main():Boolean ; implementation
uses Option;
{$R *.DFM} //{$R AOE.RES}
procedure Ini_FiveChess_Array(); var i , j,k: integer; begin
For i:=0 to 14 do begin For j:=0 to 14 do begin FiveChess_Array[i,j].x1:=16+25*j; FiveChess_Array[i,j].y1:=16+25*i; FiveChess_Array[i,j].x2:=36+25*j; FiveChess_Array[i,j].y2:=36+25*i; FiveChess_Array[i,j].state:=0; end; end; end;
procedure Draw_qipan(); var i,j : integer; begin Form1.Image2.Canvas.Brush.Color:=RGB(247,207,16); Form1.Image2.Canvas.FillRect(Rect(0,0,400,400)); Form1.Image2.Canvas.pen.Color:=RGB(0,0,0); for i:=1 to 16 do begin Form1.Image2.Canvas.MoveTo(0,25*i); Form1.Image2.Canvas.LineTo (400,25*i); Form1.Image2.Canvas.MoveTo(25*i,0); Form1.Image2.Canvas.LineTo (25*i,400); end;
end;
procedure Undo_Run(); var x1,x2,y1,y2 : integer; begin
if (Undo_i<>-1) and (Undo_j<>-1) then begin FiveChess_array[Undo_i,Undo_j].state :=0; x1:= FiveChess_Array[Undo_i,Undo_j].x1-2; y1:= FiveChess_Array[Undo_i,Undo_j].y1-2; x2:= FiveChess_Array[Undo_i,Undo_j].x2+2; y2:= FiveChess_Array[Undo_i,Undo_j].y2+2; Form1.Image2.Canvas.Brush.Color:=RGB(247,207,16); Form1.Image2.Canvas.FillRect(rect(x1,y1,x2,y2)); Form1.Image2.Canvas.pen.Color:=RGB(0,0,0); Form1.Image2.Canvas.MoveTo((x1+x2)div 2-1 , y1); Form1.Image2.Canvas.LineTo((x1+x2)div 2-1 , y2); Form1.Image2.Canvas.MoveTo(x1,(y1+y2)div 2-1); Form1.Image2.Canvas.LineTo(x2,(y1+y2)div 2-1);
end;
If Online=black then Online:=White else Online:=Black;
end;
function Ini_Main():Boolean ;
begin
Result:=true;
px1:=0; px2:=0; py1:=0; py2:=0;
Undo_i:=-1; Undo_j:=-1;
whitetime:=0; blacktime:=0;
form1.Label9.Caption :=inttostr(whitewin); form1.Label10.Caption :=inttostr(blackwin);
Ini_FiveChess_Array; Draw_Qipan; end;
Function Judge_Success_on_off (X,Y,State:integer):Boolean; var i,j,k,count : integer; begin Count:=0; Result:=false;
// 判断竖列 For i:=X-4 to X+4 do if (i>=0) and (i<=15) then begin if FiveChess_array[i,y].state=state then begin Inc(Count) ; if count=5 then begin result:=true; break; end; end else Count:=0; end; //判断横行 count:=0; For j:=y-4 to y+4 do if (j>=0) and (j<=15) then begin if FiveChess_array[X,j].state=state then begin Inc(Count) ; if count=5 then begin result:=true; break; end; end else Count:=0; end; //判断'\'方向 count:=0; For k:=-4 to 4 do begin i:=X+k; j:=Y+k; if (j>=0) and (j<=15) And(i>=0) and(i<=15) then begin if FiveChess_array[i,j].state=state then begin Inc(Count) ; if count=5 then begin result:=true; break; end; end else Count:=0; end; end; //判断'/'方向 count:=0; For k:=-4 to 4 do begin i:=X+k; j:=Y-k; if (j>=0) and (j<=15) And(i>=0) and(i<=15) then begin if FiveChess_array[i,j].state=state then begin Inc(Count) ; if count=5 then begin result:=true; break; end; end else Count:=0; end; end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject); begin Application.Terminate ; end;
procedure TForm1.BitBtn1Click(Sender: TObject); begin Start_Flag:=true; If Start_Flag then begin Form1.Image2.Enabled := true; Form1.Timer1.Enabled := true; Ini_Main;
end;
end;
function Draw_Qizi_White(X,Y : Integer):boolean; var i,j,x1,x2,y1,y2 : integer; begin result := false; for i:=0 to 14 do For j:=0 to 14 do begin if (X> FiveChess_Array[i,j].x1)and(X<FiveChess_Array[i,j].x2) and (y> FiveChess_Array[i,j].y1)and(y<FiveChess_Array[i,j].y2) and (FiveChess_Array[i,j].state=0) then begin if FiveChess_Array[Undo_i,Undo_j].state<>0 then begin Form1.Image2.Canvas.Brush.Color:=Rgb(100,100,100); Form1.Image2.Canvas.FillRect (Rect(px1,py1,px2,py2)); end;
Form1.Image2.Canvas.Brush.Color:=Rgb(255,255,255); Form1.Image2.Canvas.Ellipse ( FiveChess_Array[i,j].x1, FiveChess_Array[i,j].y1,FiveChess_Array[i,j].x2,FiveChess_Array[i,j].y2); Form1.Image2.Canvas.Brush.Color:=RGB(255,255,255); Form1.Image2.Canvas.Ellipse ( FiveChess_Array[i,j].x1-2, FiveChess_Array[i,j].y1-2,FiveChess_Array[i,j].x2-2,FiveChess_Array[i,j].y2-2); FiveChess_array[i,j].state:=1;
Undo_i:=i; Undo_j:=j;
Form1.Image2.Canvas.Brush.Color:=clred; px1:= FiveChess_Array[i,j].x1+3; py1:= FiveChess_Array[i,j].y1+3; px2:= FiveChess_Array[i,j].x2-7; py2:= FiveChess_Array[i,j].y2-7; Form1.Image2.Canvas.Ellipse (px1,py1,px2,py2);
if Judge_Success_on_off(i,j, FiveChess_Array[i,j].state) then begin whitewin:=whitewin+1; if whitewin>1 then Application.MessageBox ('臭棋篓!比鱼头还臭!','胜败乃兵家常事',0) else Application.MessageBox ('白方已胜利!','胜败乃兵家常事',0);
form1.label9.caption:=inttostr(whitewin); form1.Image2.Enabled :=false; Form1.Timer1.Enabled := false; end;
Result := true; break; end; end; end;
function Draw_Qizi_Black(X,Y : Integer): boolean; var i,j,x1,x2,y1,y2 : integer; begin result:=false; for i:=0 to 14 do for j:=0 to 14 do begin if (X> FiveChess_Array[i,j].x1)and(X<FiveChess_Array[i,j].x2) and (y> FiveChess_Array[i,j].y1)and(y<FiveChess_Array[i,j].y2) and (FiveChess_Array[i,j].state=0) then begin if FiveChess_Array[Undo_i,Undo_j].state<>0 then begin Form1.Image2.Canvas.Brush.Color:=Rgb(255,255,255); Form1.Image2.Canvas.FillRect (Rect(px1,py1,px2,py2)); end; Form1.Image2.Canvas.Brush.Color:=RGB(0,0,0); Form1.Image2.Canvas.Ellipse ( FiveChess_Array[i,j].x1, FiveChess_Array[i,j].y1,FiveChess_Array[i,j].x2,FiveChess_Array[i,j].y2); Form1.Image2.Canvas.Brush.Color:=RGB(100,100,100); Form1.Image2.Canvas.Ellipse ( FiveChess_Array[i,j].x1-2, FiveChess_Array[i,j].y1-2,FiveChess_Array[i,j].x2-2,FiveChess_Array[i,j].y2-2);
FiveChess_array[i,j].state := 2;
Undo_i:=i; Undo_j:=j;
Form1.Image2.Canvas.Brush.Color:=clred; px1:= FiveChess_Array[i,j].x1+3; py1:= FiveChess_Array[i,j].y1+3; px2:= FiveChess_Array[i,j].x2-7; py2:= FiveChess_Array[i,j].y2-7; Form1.Image2.Canvas.Ellipse (px1,py1,px2,py2);
if Judge_Success_on_off(i,j, FiveChess_Array[i,j].state) then begin blackwin:=blackwin+1; if blackwin>1 then Application.MessageBox ('不会吧!难道比鱼头还臭!','胜败乃兵家常事',0) else Application.MessageBox ('黑方已胜利!','胜败乃兵家常事',0);
form1.label10.caption:=inttostr(blackwin); form1.Image2.Enabled :=false; Form1.Timer1.enabled := False; end; Result:=true; break; end; end; end;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin if Online = White then begin if draw_Qizi_white(X,Y) then Online := Black end else if draw_Qizi_Black(X,Y) then Online:=White;
end;
procedure TForm1.FormCreate(Sender: TObject); begin Online:=white; form1.Label11.Caption :='人不到伤痕累累'#13+'就不会懂得后悔!'; Start_Flag:=false; Form1.Image2.Enabled := false;
end;
procedure TForm1.BitBtn3Click(Sender: TObject); begin form2.show;
end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if online=white then whitetime:=whitetime +1 else blacktime:=blacktime +1;
Form1.Label7.caption:=inttostr(whitetime); Form1.Label8.caption:=inttostr(blacktime);
end;
procedure TForm1.Label11MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbleft) and (ssShift in shift) And (form1.Image2.Enabled = true)then Undo_Run;
end;
end.
end;
//////////////////////////
unit Option;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;
type TForm2 = class(TForm) GroupBox1: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; BitBtn1: TBitBtn; BitBtn2: TBitBtn; GroupBox2: TGroupBox; RadioButton3: TRadioButton; RadioButton4: TRadioButton; RadioButton5: TRadioButton; procedure FormCreate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form2: TForm2;
implementation
uses Main; {$R *.DFM}
procedure TForm2.FormCreate(Sender: TObject); begin form2.RadioButton1.Checked := true; form2.RadioButton3.Checked := true; end;
procedure TForm2.BitBtn1Click(Sender: TObject); begin if form2.RadioButton1.Checked = true then Online := White else Online := Black;
if form2.RadioButton3.Checked then begin whitewin:=0; blackwin:=0; end ;
Ini_main;
form2.close;
end;
procedure TForm2.BitBtn2Click(Sender: TObject); begin form2.Close ; end;
end.
|