如题,有的同志请PM我,谢谢!100分!

解决方案 »

  1.   

    呵呵,偶好多同学都用delphi编出来了,智商不高也不低
      

  2.   

    unit main;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, ScktComp, Grids, Menus, StdCtrls, ExtCtrls;type
      Tmainform = class(TForm)
        Panel1: TPanel;
        DrawGrid1: TDrawGrid;
        Memo1: TMemo;
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        Timer3: TTimer;
        Timer4: TTimer;
        next: TButton;
        exit: TButton;
        procedure FormCreate(Sender: TObject);
        procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormShow(Sender: TObject);
        procedure Timer3Timer(Sender: TObject);
        procedure Timer4Timer(Sender: TObject);
        procedure exitClick(Sender: TObject);
        procedure nextClick(Sender: TObject);
      private
        { Private declarations }
        Tag:array[0..18,0..18]of integer;
        {0 for none,1 for black,2 for white}
        IsBlack:boolean;
      public
        { Public declarations }
        function IsWin(IsBlack:boolean):boolean; //whether win
      end;var
      mainform: Tmainform;
      left1,left2:integer;
      step:integer;
      count1,count2:integer;
      times:integer;implementationuses Unit1;{$R *.DFM}function Tmainform.IsWin(IsBlack:boolean):boolean;
    label exit1;
    var
      i,j:integer;
      wtag:integer;
    begin
      IsWin:=false;
      if IsBlack then
        wtag:=1 else
        wtag:=2;
      for i:=0 to 18 do
        for j:=0 to 14 do
        begin
          {是否有行连成}
          if (i<15)
          and(Tag[i,j]=wtag)
          and(Tag[i+1,j]=wtag)
          and(Tag[i+2,j]=wtag)
          and(Tag[i+3,j]=wtag)
          and(Tag[i+4,j]=wtag)
          then
          begin
            IsWin:=True;
            goto exit1;
          end;
          {是否有列连成}
          if (Tag[i,j]=wtag)
          and(Tag[i,j+1]=wtag)
          and(Tag[i,j+2]=wtag)
          and(Tag[i,j+3]=wtag)
          and(Tag[i,j+4]=wtag)
          then
          begin
            IsWin:=True;
            goto exit1;
          end;
          {是否有主对角线连成}
          if (i<15)
          and(Tag[i,j]=wtag)
          and(Tag[i+1,j+1]=wtag)
          and(Tag[i+2,j+2]=wtag)
          and(Tag[i+3,j+3]=wtag)
          and(Tag[i+4,j+4]=wtag)
          then
          begin
            IsWin:=True;
            goto exit1;
          end;
          {是否有副对角线连成}
          if (Tag[i,j]=wtag)
          and(Tag[i-1,j+1]=wtag)
          and(Tag[i-2,j+2]=wtag)
          and(Tag[i-3,j+3]=wtag)
          and(Tag[i-4,j+4]=wtag)
          then
          begin
            IsWin:=True;
            goto exit1;
          end;
        end;
      exit1:
    end;procedure Tmainform.FormCreate(Sender: TObject);
    var
      i,j:integer;
    begin
      for i:=0 to 18 do
        for j:=0 to 18 do
        begin
          Tag[i,j]:=0;
        end;
      IsBlack:=true;
      DrawGrid1.Canvas.Pen.Color :=clBlack;
      DrawGrid1.Canvas.Brush.Color :=clBlack;
      left1:=3*60*1000;
      left2:=3*60*1000;
      edit1.Clear;
      edit2.Clear;
      timer3.Enabled:=true;
      timer4.Enabled:=false;
      step:=0;
      next.Enabled:=false;
    end;procedure Tmainform.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      DrawGrid1.Canvas.Pen.Color :=clBlack;
      DrawGrid1.Canvas.Brush.Color :=clBlack;
      if tag[acol,arow]=1 then
      begin
        DrawGrid1.Canvas.Ellipse(acol*21,arow*21,(acol+1)*21,(arow+1)*21);
      end
        else if tag[acol,arow]=2 then
          DrawGrid1.Canvas.Arc(acol*21,arow*21,(acol+1)*21,(arow+1)*21,acol*21,arow*21,acol*21,arow*21)
          else
          begin
            DrawGrid1.Canvas.Pen.Color :=clWhite;
            DrawGrid1.Canvas.Brush.Color :=clWhite;
            DrawGrid1.Canvas.Ellipse(acol*21,arow*21,(acol+1)*21,(arow+1)*21);
          end;
    end;procedure Tmainform.DrawGrid1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      col,row:integer;
      i,j:integer;
    begin
      step:=step+1;
      if step>400 then
      begin
        showmessage('比赛时间到'+#13+challege+'用了'+inttostr(count1)+'秒'+#13+headon+'用了'+inttostr(count2)+'秒');
        if count1>count2 then
        begin
        showmessage('白方胜');
        next.Enabled:=true;
        end
        else
        begin
        showmessage('黑方胜');
        next.Enabled:=true;
        end;
      end;
      DrawGrid1.Canvas.Pen.Color :=clBlack;
      DrawGrid1.Canvas.Brush.Color :=clBlack;
      DrawGrid1.MouseToCell(x,y,col,row);
      if tag[col,row]=0 then
      begin
        if IsBlack then
        begin
          DrawGrid1.Canvas.Ellipse(col*21,row*21,(col+1)*21,(row+1)*21);
          tag[col,row]:=1;
          left2:=3*60*1000;
          timer3.Enabled:=false;
          timer4.Enabled:=true;
        end
        else
        begin
          DrawGrid1.Canvas.Arc(col*21,row*21,(col+1)*21,(row+1)*21,col*21,row*21,col*21,row*21);
          tag[col,row]:=2;
          left1:=3*60*1000;
          timer4.Enabled:=false;
          timer3.Enabled:=true;
        end;
        if IsWin(IsBlack) then
        begin
          if IsBlack then
            if MessageDlg('黑方胜利',mtInformation,[mbOK],0)=mrOK then
            begin
              for i:=0 to 18 do
                for j:=0 to 18 do
                begin
                  tag[i,j]:=0;
                end;
              DrawGrid1.Invalidate;
              next.Enabled:=true;
            end;
          if not IsBlack then
            if MessageDlg('白方胜利',mtInformation,[mbOK],0)=mrOK then
            begin
              for i:=0 to 18 do
                for j:=0 to 18 do
                begin
                  tag[i,j]:=0;
                end;
              DrawGrid1.Invalidate;
            end;
            next.Enabled:=true;
          end;
          IsBlack:=not IsBlack;
        end;
    end;procedure Tmainform.FormShow(Sender: TObject);
    begin
      Form1.ShowModal;
      label1.Caption:=challege+'  还有';
      label2.Caption:=headon+'  还有';
    end;procedure Tmainform.Timer3Timer(Sender: TObject);
    var
    left11:integer;
    begin
    left1:=left1-1000;
    left11:=left1 div 1000;
    edit1.Text:=inttostr(left11)+  '秒';
    count1:=count1+1;
    if left1=0 then
    begin
      MessageDlg('时间到,白方胜利',mtInformation,[mbOK],0);
      timer3.Enabled:=false;
      next.Enabled:=true;
    end;
    end;procedure Tmainform.Timer4Timer(Sender: TObject);
    var
      left22:integer;
    begin
    left2:=left2-1000;
    left22:=left2 div 1000;
    edit2.Text:=inttostr(left22)+  '秒';
    count2:=count2+1;
    if left2=0 then
    begin
      MessageDlg('时间到,黑方胜利',mtInformation,[mbOK],0);
      timer4.Enabled:=false;
      next.Enabled:=true;
    end;
    end;procedure Tmainform.exitClick(Sender: TObject);
    begin
    close;
    end;procedure Tmainform.nextClick(Sender: TObject);
    begin
    times:=times+1;
    next.Enabled:=false;
    if times>3 then
      begin
      showmessage('三局比赛已经完毕');
      close;
      end;
    end;end.
      

  3.   

    http://soft.56kc.com/FileDown.aspx?FID=94
      

  4.   

    http://qihang.1517.net/qihang/open_info.asp?info_path=soft/gobang.zip这是我们当年比赛的作品,因为作品提交晚了,所以最后没能进入比赛。所以留着也没什么用处,拿出来大家共享吧,这个是单机版人机对战的,有源码,注释和文档。