Problem z funkcją

0

Witam. Mam problem z napisaniem algorytmu, który będzie sprawdzał wszystkie możliwości ruchu w grze kółko i krzyżyk. Chciałbym, aby po każdym warunku funkcja sprawdzała, czy dokonały się jakieś zmiany, a jak dokonały, żeby funkcja się przerwała. Na razie napisałem coś takiego, tylko głównym problemem jest to, że podczas przycisku danego speedbuttona program się całkowicie wiesza. Proszę o pomoc. Z góry dziekuje

function Tkolkoikrzyzyk.bot(n:integer):boolean;
var
wybor2:integer;
begin
wybor2:= random(9);
gracz2.down:=true;
 while true do
  begin
      if ((p2.caption='x') and (p3.caption='x') and (p1.Caption='')) or
      ((p4.caption='x') and (p7.caption='x') and (p1.Caption='')) or
       ((p5.caption='x') and (p9.caption='x') and (p1.Caption=''))
       {or ((wybor2= 0 )and (p1.caption='' )) } then
       begin
       p1Click(kolkoikrzyzyk);
       break;
       end;


       if ((p1.caption='x') and (p3.caption='x') and (p2.Caption='')) or
      ((p5.caption='x') and (p8.caption='x') and (p2.Caption='')) {or
       ((p.caption='x') and (p9.caption='x') and (p2.Caption=''))} {or ((wybor2= 1 )and (p2.caption='' ))} then
       begin
       p2Click(kolkoikrzyzyk)
       break;
       end;

       if ((p1.caption='x') and (p2.caption='x') and (p3.Caption='')) or
      ((p6.caption='x') and (p9.caption='x') and (p3.Caption='')) or
       ((p5.caption='x') and (p7.caption='x') and (p3.Caption='')) {or ((wybor2= 2 )and (p3.caption='' )) }then
        begin
       p3Click(kolkoikrzyzyk);
       break;
       end;


       if ((p1.caption='x') and (p7.caption='x') and (p4.Caption='')) or
      ((p5.caption='x') and (p6.caption='x') and (p4.Caption='')) {or
       ((p5.caption='x') and (p9.caption='x') and (p4.Caption='')) }{or ((wybor2= 3 )and (p4.caption='' )) }then
       begin
       p4Click(kolkoikrzyzyk);
       break;
       end;

       if ((p4.caption='x') and (p6.caption='x') and (p5.Caption='')) or
      ((p2.caption='x') and (p8.caption='x') and (p5.Caption='')) or
       ((p3.caption='x') and (p7.caption='x') and (p5.Caption='')){or ((wybor2= 4 )and (p5.caption='' ))  }then
       begin
       p5Click(kolkoikrzyzyk);
       break;
       end;

       if ((p4.caption='x') and (p5.caption='x') and (p6.Caption='')) or
      ((p3.caption='x') and (p9.caption='x') and (p6.Caption='')) or
       ((p1.caption='x') and (p9.caption='x') and (p6.Caption='')) {or ((wybor2= 5 )and (p6.caption='' )) }then
       begin
       p6Click(kolkoikrzyzyk);
       break;
       end;


       if ((p8.caption='x') and (p9.caption='x') and (p7.Caption='')) or
      ((p4.caption='x') and (p1.caption='x') and (p7.Caption='')) or
       ((p5.caption='x') and (p3.caption='x') and (p7.Caption='')) {or ((wybor2= 6 )and (p7.caption='' ))}then
       begin
       p7Click(kolkoikrzyzyk);
       break;
       end;

       if ((p7.caption='x') and (p9.caption='x') and (p8.Caption='')) or
      ((p2.caption='x') and (p5.caption='x') and (p8.Caption='')) {or
       ((p5.caption='x') and (p9.caption='x') and (p8.Caption=''))  }{or ((wybor2= 7 )and (p8.caption='' )) }then
       begin
       p8Click(kolkoikrzyzyk);
       break;
       end;

       if ((p7.caption='x') and (p8.caption='x') and (p9.Caption='')) or
      ((p3.caption='x') and (p6.caption='x') and (p9.Caption='')) or
       ((p1.caption='x') and (p5.caption='x') and (p9.Caption='')){or ((wybor2= 8 )and (p9.caption='' ))}  then
       begin
       p9Click(kolkoikrzyzyk);
       break;
       end
       else

       //dla 0
        if ((p2.caption='0') and (p3.caption='0') and (p1.Caption='')) or
      ((p4.caption='0') and (p7.caption='0') and (p1.Caption='')) or
       ((p5.caption='0') and (p9.caption='0') and (p1.Caption='')){or ((wybor2= 0 )and (p1.caption='' )) } then
       begin
       p1Click(kolkoikrzyzyk);
       break;
       end;

       if ((p1.caption='0') and (p3.caption='0') and (p2.Caption='')) or
      ((p5.caption='0') and (p8.caption='0') and (p2.Caption='')) {or
       ((p.caption='x') and (p9.caption='x') and (p2.Caption=''))} {or ((wybor2= 1 )and (p2.caption='' ))} then
       begin
       p2Click(kolkoikrzyzyk);
       break;
       end;

       if ((p1.caption='0') and (p2.caption='0') and (p3.Caption='')) or
      ((p6.caption='0') and (p9.caption='0') and (p3.Caption='')) or
       ((p5.caption='0') and (p7.caption='0') and (p3.Caption='')) {or ((wybor2= 2 )and (p3.caption='' )) } then
       begin
       p3Click(kolkoikrzyzyk);
       break;
       end;

       if ((p1.caption='0') and (p7.caption='0') and (p4.Caption='')) or
      ((p5.caption='0') and (p6.caption='0') and (p4.Caption='')) {or
       ((p5.caption='0') and (p9.caption='0') and (p4.Caption='')) }{or ((wybor2= 3 )and (p4.caption='' )) }then
       begin
       p4Click(kolkoikrzyzyk);
       break;
       end;

       if ((p4.caption='0') and (p6.caption='0') and (p5.Caption='')) or
      ((p2.caption='0') and (p8.caption='0') and (p5.Caption='')) or
       ((p3.caption='0') and (p7.caption='0') and (p5.Caption='')){or ((wybor2= 4 )and (p5.caption='' ))  }then
       begin
       p5Click(kolkoikrzyzyk);
       break;
       end;

       if ((p4.caption='0') and (p5.caption='0') and (p6.Caption='')) or
      ((p3.caption='0') and (p9.caption='0') and (p6.Caption='')) or
       ((p1.caption='0') and (p9.caption='0') and (p6.Caption='')) {or ((wybor2= 5 )and (p6.caption='' )) }then
       begin
       p6Click(kolkoikrzyzyk);
       break;
       end;

       if ((p8.caption='0') and (p9.caption='0') and (p7.Caption='')) or
      ((p4.caption='0') and (p1.caption='0') and (p7.Caption='')) or
       ((p5.caption='0') and (p3.caption='0') and (p7.Caption='')) {or ((wybor2= 6 )and (p7.caption='' ))}then
       begin
       p7Click(kolkoikrzyzyk);
       break;
       end;

       if ((p7.caption='0') and (p9.caption='0') and (p8.Caption='')) or
      ((p2.caption='0') and (p5.caption='0') and (p8.Caption='')) {or
       ((p5.caption='0') and (p9.caption='0') and (p8.Caption=''))  }{or ((wybor2= 7 )and (p8.caption='' )) }then
       begin
       p8Click(kolkoikrzyzyk);
       break;
       end;

       if ((p7.caption='0') and (p8.caption='0') and (p9.Caption='')) or
      ((p3.caption='0') and (p6.caption='0') and (p9.Caption='')) or
       ((p1.caption='0') and (p5.caption='0') and (p9.Caption='')){or ((wybor2= 8 )and (p9.caption='' ))}  then
        begin
       p9Click(kolkoikrzyzyk);
       break;
       end;



  if ((wybor2= 0 )and (p1.caption='' ))then
  begin
  p1.caption:='0' ;
  end;
  if ((wybor2= 1 )and (p2.caption='' ))then
  begin
  p2.caption:='0' ;
  end;
  if ((wybor2= 2 )and (p3.caption='' ))then
  begin
  p3.caption:='0' ;
  break;
  end;
  if ((wybor2= 3 )and (p4.caption='' ))then
  begin
  p4.caption:='0' ;
  break;
  end;
  if ((wybor2= 4 )and (p5.caption='' ))then
  begin
  p5.caption:='0' ;
  break;
  end;
  if ((wybor2= 5 )and (p6.caption='' ))then
  begin
  p6.caption:='0' ;
  break;
  end;
  if ((wybor2= 6 )and (p7.caption='' ))then
  begin
  p7.caption:='0' ;
  break;
  end;
  if ((wybor2= 7 )and (p8.caption='' ))then
  begin
  p8.caption:='0' ;
  break;
  end;
  if ((wybor2= 8 )and (p9.caption='' ))then
  begin
  p9.caption:='0' ;
  break;
  end;

  end;


  gracz1.Down:=true;
end;
0

o rany... no tak, tradycyjnie.. masa kodu prawie niczym nierozniacego sie od siebie ktory dalo by sie skrocic pewnie o 85%.
powiem tak: w internecie znajdziesz setke roznych "kolko i krzyzyk" wraz z kodami zrodlowymi. zobacz jak to ludzie robia, nie wiem jak Twoj nauczyciel ale ja bym Ci tego nie zaliczyl.
a co do samego problemu: prawdopodobnie niegdy nie opuszczasz petli while - stad zwiecha.

0

Jeżeli nie potrafisz rozwiązać problemu to może byłoby lepiej jakbyś nie pisał. Z programowaniem mam do czynienia od września, dlatego też nie potrafię tego skrócić o 85%.Szukam tylko jasnej odpowiedzi na pytanie.

1

Jak znasz stan początkowy i stan aktualny, to możesz je porównać i wtedy wiesz czy zaszły zmiany

if (stanPoczatkowy <> stanAktualny)
begin
  {zaszły zmiany}
end;

Funkcję w delphi można zakończyć o ile dobrze pamiętam za pomocą exit. No i tak jak napisali koledzy wyżej - ten kod do niczego się tak naprawdę nie nadaje. Spróbuj całość zrealizować na tablicy dwuwymiarowej.

1
rock12s66 napisał(a)

Z programowaniem mam do czynienia od września
programujesz 8 miesięcy i nie potrafisz nawet zastosować poprawnie pętli? Coś kiepski masz ten progres. Może poćwicz na logo najpierw?

1 użytkowników online, w tym zalogowanych: 0, gości: 1