Avatar billede blomme Nybegynder
30. december 2001 - 14:45 Der er 13 kommentarer og
3 løsninger

Kunstig intelligens - hjælp til sourcecode

Hej,

Jeg er virkelig presset, da jeg skal være færdig med denne kode inden d. 2/1 2002. Derfor bliver jeg nødt til at anmode om direkte hjælp til min allerede eksisterende kildekode. Hjælp, der fører til færdiggørelse af programmet, belønnes med 700 point.

Programmet er et typisk \"kryds og bolle\" spil, hvor det simpelthen gælder om at få 3 på stribe. Problemet ligger dermed i, at jeg skal have computeren til selv at udtænke hvordan den placerer sine brikker bedst muligt. Som man kan se i koden, har jeg allerede forsøgt at lave en sådan algoritme, men computeren fungerer langt fra optimalt. Hvis nogen har lyst til at se på koden og svare mig med hjælp, evt. kodestumper eller helt optimalt - rettelse af koden, gå da ind på:

http://www.blackcare.webpunkt.dk/kunstig.zip

Hvis nogen vil kritisere min måde at bede om hjælpe på (hvilket jeg godt kan forstå hvis I vil), så er min e-mail blomme@post.com -

- Thomas
Avatar billede ziron Nybegynder
30. december 2001 - 14:50 #1
hmmm lyder da okay. men din zip fil virker ikke, ked af at fortælle dig det :)

/ZIRON
Avatar billede hirayz Nybegynder
30. december 2001 - 14:55 #2
missing 11 bytes i zip file
Avatar billede blomme Nybegynder
30. december 2001 - 14:56 #3
*argh !* - ej, tak for meddelelsen - uploader lige en der virker... til samme destination:

http://www.blackcare.webpunkt.dk/kunstig.zip
Avatar billede ziron Nybegynder
30. december 2001 - 14:59 #4
der mangler stadig noget. som fx main.pas...
Avatar billede hirayz Nybegynder
30. december 2001 - 14:59 #5
det går fremad
missing 2 bytes i zip file
Avatar billede blomme Nybegynder
30. december 2001 - 15:08 #6
argh... sådan går det vel når man bruger ftp.exe i WinXP :-) prøver med

http://www.blackcare.webpunkt.dk/ai.zip

(uploaded with Cute FTP)
Avatar billede stoney Nybegynder
30. december 2001 - 15:42 #7
Avatar billede morten_s Nybegynder
30. december 2001 - 16:05 #8
Den ligger her, bare i Java

http://java.about.com/library/weekly/aa061101a.htm

Men det burde være til at oversætte
Avatar billede morten_s Nybegynder
30. december 2001 - 16:11 #9
Jeg er begyndt at oversætte du får det lidt senere
Avatar billede blomme Nybegynder
30. december 2001 - 16:43 #11
Bruger ApoX^\'s svar. I andre får 200-250 for besværet !

- Thomas
Avatar billede morten_s Nybegynder
30. december 2001 - 16:43 #12
Hov hov, er næsten færdig med oversættelsen
Avatar billede morten_s Nybegynder
30. december 2001 - 16:43 #13
Skal jeg gøre den færdig ?
Avatar billede morten_s Nybegynder
30. december 2001 - 16:58 #14
Her har du et stykke af vejen, sig til hvis jeg skal fortsætte


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    ButNytSpil: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure ButNytSpilClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function DetectWin(Sender: TObject) : String;
    function PickRandom(Sender: TObject) : Integer;
    procedure ComputerMove(Sender: TObject);
    procedure EndGame(Sender : TObject);
  end;

var
  Form1: TForm1;
  SquaresRemining : Integer = 9;
  Winner : String;

implementation

{$R *.dfm}

procedure TForm1.ComputerMove(Sender: TObject);
begin
//
end;


function TForm1.DetectWin(Sender: TObject): String;
begin
    //Check topRow
    if ( (Label1.Caption = Label2.Caption) and (Label1.Caption = Label3.Caption) and (Label1.Caption <> \'*\') ) then
    begin
      Result := Label1.Caption;
      ShowMessage(\'The winner is: \'+Result);
      exit;
    end;

    // check middle row
    if ( (Label4.Caption = Label5.Caption) and (Label4.Caption = Label6.Caption) and (Label4.Caption <> \'*\') ) then
    begin
      Result := Label4.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;


  // check bottom row
  if ( (Label7.Caption = Label8.Caption) and (Label7.Caption = Label9.Caption) and (Label7.Caption <> \'*\') ) then
    begin
      Result := Label7.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check left col
    if ( (Label1.Caption = Label4.Caption) and (Label1.Caption = Label7.Caption) and (Label1.Caption <> \'*\') ) then
    begin
      Result := Label1.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check middle col
    if ( (Label2.Caption = Label5.Caption) and (Label2.Caption = Label8.Caption) and (Label2.Caption <> \'*\') ) then
    begin
      Result := Label2.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check right col
  if ( (Label3.Caption = Label6.Caption) and (Label3.Caption = Label9.Caption) and (Label3.Caption <> \'*\') ) then
    begin
      Result := Label3.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check upper-left to lower-right diagonal
      if ( (Label1.Caption = Label5.Caption) and (Label1.Caption = Label9.Caption) and (Label1.Caption <> \'*\') ) then
    begin
      Result := Label1.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

    // check upper-right to lower-left diagonal
    if ( (Label3.Caption = Label5.Caption) and (Label3.Caption = Label7.Caption) and (Label3.Caption <> \'*\') ) then
    begin
      Result := Label3.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;


end;

procedure TForm1.EndGame(Sender: TObject);
begin

end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  Label1.Caption := \'*\';
  Label2.Caption := \'*\';
  Label3.Caption := \'*\';
  Label4.Caption := \'*\';
  Label5.Caption := \'*\';
  Label6.Caption := \'*\';
  Label7.Caption := \'*\';
  Label8.Caption := \'*\';
  Label9.Caption := \'*\';
  Randomize;
end;

procedure TForm1.Label1Click(Sender: TObject);
var
  ClickLabel : TLabel;
begin
  if (Sender is TLabel) then
  begin
    ClickLabel := (Sender as TLabel);
    if (ClickLabel.Caption = \'X\') or (ClickLabel.Caption = \'0\') then
      Exit;
    ClickLabel.Caption := \'X\';
    Dec(SquaresRemining);
    Winner := \'-\';
    Winner := DetectWin(Sender);
    if (Winner = \'X\') or (Winner = \'0\') then
      EndGame(Sender)
    else
      if ( SquaresRemining <= 0 ) then
        EndGame(Sender) // Tie Game
      else begin  // computer makes a move
        ComputerMove(Sender);
        Dec(SquaresRemining);
        Winner := DetectWin(Sender);
        if (Winner = \'X\') or (Winner = \'0\') or (SquaresRemining <= 0) then
            EndGame(Sender); // if winner or tie
      end;

  end;
end;

procedure TForm1.ButNytSpilClick(Sender: TObject);
begin
  OnActivate(Sender);
end;

function TForm1.PickRandom(Sender: TObject): Integer;
var
  Found : Boolean;
  PickedSquare : Integer;
begin
Found := false;
PickedSquare := -1;
pickedSquare := Random(10);  // 0 to 8
case PickedSquare of
  0 : PickRandom(Sender);
  1 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  2 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  3 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  4 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  5 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  6 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  7 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  8 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  9 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  10 : PickRandom(Sender);
end;
end;

end.
Avatar billede blomme Nybegynder
31. december 2001 - 18:31 #15
morten_s >> Jeg kan som bekendt ikke give dig flere point, men kunne egentlig godt tænke mig din oversatte kode.

- Thomas
Avatar billede morten_s Nybegynder
01. januar 2002 - 14:27 #16
Hej Thomas

Her har du hvad jeg har lavet af det, jeg har ikke gjort det helt færdigt.

Jeg har bare sat 9 labels på en form


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    ButNytSpil: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Label1Click(Sender: TObject);
    procedure ButNytSpilClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function DetectWin(Sender: TObject) : String;
    function PickRandom(Sender: TObject) : Integer;
    function MakeWin(Sender: TObject) : Integer;
    function MakeBlock(Sender: TObject) : Integer;
    procedure ComputerMove(Sender: TObject);
    procedure EndGame(Sender : TObject);
  end;

var
  Form1: TForm1;
  SquaresRemining : Integer = 9;
  Winner : String;

implementation

{$R *.dfm}

procedure TForm1.ComputerMove(Sender: TObject);
var
  PickedSquare : Integer;
begin
pickedSquare := makeWin(Sender);          // if not successful, try make a block
if ( pickedSquare = -1 ) then
  pickedSquare := makeBlock(Sender);          // if not successful, just pick random
if ( pickedSquare = -1 ) then
  pickedSquare := PickRandom(Sender);
case PickedSquare of
  1 : Label1.Caption := \'0\';          // mark the picked square as \"O\"
  2 : Label1.Caption := \'0\';
  3 : Label1.Caption := \'0\';
  4 : Label1.Caption := \'0\';
  5 : Label1.Caption := \'0\';
  6 : Label1.Caption := \'0\';
  7 : Label1.Caption := \'0\';
  8 : Label1.Caption := \'0\';
  9 : Label1.Caption := \'0\';
end;
end;


function TForm1.DetectWin(Sender: TObject): String;
begin
    //Check topRow
    if ( (Label1.Caption = Label2.Caption) and (Label1.Caption = Label3.Caption) and (Label1.Caption <> \'*\') ) then
    begin
      Result := Label1.Caption;
      ShowMessage(\'The winner is: \'+Result);
      exit;
    end;

    // check middle row
    if ( (Label4.Caption = Label5.Caption) and (Label4.Caption = Label6.Caption) and (Label4.Caption <> \'*\') ) then
    begin
      Result := Label4.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;


  // check bottom row
  if ( (Label7.Caption = Label8.Caption) and (Label7.Caption = Label9.Caption) and (Label7.Caption <> \'*\') ) then
    begin
      Result := Label7.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check left col
    if ( (Label1.Caption = Label4.Caption) and (Label1.Caption = Label7.Caption) and (Label1.Caption <> \'*\') ) then
    begin
      Result := Label1.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check middle col
    if ( (Label2.Caption = Label5.Caption) and (Label2.Caption = Label8.Caption) and (Label2.Caption <> \'*\') ) then
    begin
      Result := Label2.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check right col
  if ( (Label3.Caption = Label6.Caption) and (Label3.Caption = Label9.Caption) and (Label3.Caption <> \'*\') ) then
    begin
      Result := Label3.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

  // check upper-left to lower-right diagonal
      if ( (Label1.Caption = Label5.Caption) and (Label1.Caption = Label9.Caption) and (Label1.Caption <> \'*\') ) then
    begin
      Result := Label1.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;

    // check upper-right to lower-left diagonal
    if ( (Label3.Caption = Label5.Caption) and (Label3.Caption = Label7.Caption) and (Label3.Caption <> \'*\') ) then
    begin
      Result := Label3.Caption;
      ShowMessage(\'The winner is: \'+Result);
      Exit
    end;


end;

procedure TForm1.EndGame(Sender: TObject);
begin

end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  Label1.Caption := \'*\';
  Label2.Caption := \'*\';
  Label3.Caption := \'*\';
  Label4.Caption := \'*\';
  Label5.Caption := \'*\';
  Label6.Caption := \'*\';
  Label7.Caption := \'*\';
  Label8.Caption := \'*\';
  Label9.Caption := \'*\';
  Randomize;
end;

procedure TForm1.Label1Click(Sender: TObject);
var
  ClickLabel : TLabel;
begin
  if (Sender is TLabel) then
  begin
    ClickLabel := (Sender as TLabel);
    if (ClickLabel.Caption = \'X\') or (ClickLabel.Caption = \'0\') then
      Exit;
    ClickLabel.Caption := \'X\';
    Dec(SquaresRemining);
    Winner := \'-\';
    Winner := DetectWin(Sender);
    if (Winner = \'X\') or (Winner = \'0\') then
      EndGame(Sender)
    else
      if ( SquaresRemining <= 0 ) then
        EndGame(Sender) // Tie Game
      else begin  // computer makes a move
        ComputerMove(Sender);
        Dec(SquaresRemining);
        Winner := DetectWin(Sender);
        if (Winner = \'X\') or (Winner = \'0\') or (SquaresRemining <= 0) then
            EndGame(Sender); // if winner or tie
      end;

  end;
end;

procedure TForm1.ButNytSpilClick(Sender: TObject);
begin
  OnActivate(Sender);
end;

function TForm1.PickRandom(Sender: TObject): Integer;
var
  Found : Boolean;
  PickedSquare : Integer;
begin
Found := false;
PickedSquare := -1;
pickedSquare := Random(10);  // 0 to 8
case PickedSquare of
  0 : PickRandom(Sender);
  1 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  2 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  3 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  4 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  5 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  6 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  7 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  8 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  9 : if (Label1.Caption <> \'*\') then PickRandom(Sender);
  10 : PickRandom(Sender);
end;
end;

function TForm1.MakeBlock(Sender: TObject): Integer;
begin

end;

function TForm1.MakeWin(Sender: TObject): Integer;
begin

end;

end.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester