IPB

Здравствуйте, гость ( Вход | Регистрация )

> Крестики-нолики на Delphi
Splend
сообщение Mar 4 2007, 21:14
Сообщение #1


Member
**

Группа: Members
Сообщений: 53
Регистрация: 25.11.2006
Пользователь №: 26681



Вопщем нужна помощь с алгоритмом. Никак не могу найти подходящего. Нужен алгоритм для реализации бота для игры крестики-нолики на Delphi. Поле 40х40, пять в ряд (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif) Кто-нить может помочь? =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Splend
сообщение Mar 15 2007, 14:19
Сообщение #2


Member
**

Группа: Members
Сообщений: 53
Регистрация: 25.11.2006
Пользователь №: 26681



Код
unit anatoly;



uses gamer;



interface



procedure anatoly_step (field : matrix; who : byte; var x, y : byte);



implementation



procedure anatoly_step;

var i, j : byte;

    n : array [1..8] of byte;

    m : array [1..8] of byte;

    s, e : integer;

    max : real;

    t, h : byte;

begin

randomize;

for j := 1 to 40 do begin

  for i := 1 to 40 do begin

     if field[i, j] = 2 then begin

//**************Оценка собственной выгоды****************

       n[1] := 1;

       while (field[i+n[1],j-n[1]] = who) and (i+n[1]<=40) and (j-n[1]>0) do n[1]:=n[1]+1;

       n[2] := 1;

       while (field[i-n[2],j+n[2]] = who) and (i-n[2]>0) and (j+n[2]<=40) do n[2]:=n[2]+1;

       n[3] := 1;

       while (field[i-n[3],j-n[3]] = who) and (i-n[3]>0) and (j-n[3]>0) do n[3]:=n[3]+1;

       n[4] := 1;

       while (field[i+n[4],j+n[4]] = who) and (i+n[4]<=40) and (j+n[4]<=40) do n[4]:=n[4]+1;

       n[5] := 1;

       while (field[i-n[5],j] = who) and (i-n[5]>0)  do n[5]:=n[5]+1;

       n[6] := 1;

       while (field[i+n[6],j] = who) and (i+n[6]<=40)  do n[6]:=n[6]+1;

       n[7] := 1;

       while (field[i,j-n[7]] = who) and (j-n[7]>0)  do n[7]:=n[7]+1;

       n[8] := 1;

       while (field[i,j+n[8]] = who) and (j+n[8]<=40)  do n[8]:=n[8]+1;



       n[1]:=n[1]+n[2]-1;

       n[3]:=n[3]+n[4]-1;

       n[5]:=n[5]+n[6]-1;

       n[7]:=n[7]+n[8]-1;



       if (n[1] >= 5) or (n[3] >= 5) or (n[5] >= 5) or (n[7] >= 5) then begin

         max := 1000;

         x := i; y := j;

       end;



       s := n[1]*n[1] + n[3]*n[3]+ n[5]*n[5]+ n[7]*n[7];



//**************Оценка выгоды противника****************

       m[1] := 1;

       while (field[i+m[1],j-m[1]] <> 2)and(field[i+m[1],j-m[1]] <> who) and (i+m[1]<=40) and (j-m[1]>0) do m[1]:=m[1]+1;

       m[2] := 1;

       while (field[i-m[2],j+m[2]] <> 2)and(field[i-m[2],j+m[2]] <> who) and (i-m[2]>0) and (j+m[2]<=40) do m[2]:=m[2]+1;

       m[3] := 1;

       while (field[i-m[3],j-m[3]] <> 2)and(field[i-m[3],j-m[3]] <> who) and (i-m[3]>0) and (j-m[3]>0) do m[3]:=m[3]+1;

       m[4] := 1;

       while (field[i+m[4],j+m[4]] <> 2)and(field[i+m[4],j+m[4]] <> who) and (i+m[4]<=40) and (j+m[4]<=40) do m[4]:=m[4]+1;

       m[5] := 1;

       while (field[i-m[5],j] <> 2)and(field[i-m[5],j] <> who) and (i-m[5]>0)  do m[5]:=m[5]+1;

       m[6] := 1;

       while (field[i+m[6],j] <> 2)and(field[i+m[6],j] <> who) and (i+m[6]<=40)  do m[6]:=m[6]+1;

       m[7] := 1;

       while (field[i,j-m[7]] <> 2)and(field[i,j-m[7]] <> who) and (j-m[7]>0)  do m[7]:=m[7]+1;

       m[8] := 1;

       while (field[i,j+m[8]] <> 2)and(field[i,j+m[8]] <> who) and (j+m[8]<=40)  do m[8]:=m[8]+1;



       m[1]:=m[1]+m[2]-1;

       m[3]:=m[3]+m[4]-1;

       m[5]:=m[5]+m[6]-1;

       m[7]:=m[7]+m[8]-1;



       if ((m[1] >= 4) or (m[3] >= 4) or (m[5] >= 4) or (m[7] >= 4))and (max<>1000) then begin

         max := 500;

         x := i; y := j;

       end;



       e := m[1]*m[1] + m[3]*m[3]+ m[5]*m[5]+ m[7]*m[7];

       //******************************************************

     if max < s +  0.8 * e then begin

       x := i; y := j;

       max := s + 0.8*e;

     end;

   end;

   s := 0; e := 0;

   n[1]:=0; n[2]:=0;

   n[3]:=0; n[4]:=0;

   n[5]:=0; n[6]:=0;

   n[7]:=0; n[8]:=0;

  end; // for i := 1

end;  // for j := 1

if max < 8 then begin

  repeat

    x := random(39)+1;

    y := random(39)+1;

  until field[x, y] = 2;

end;  

end; //anatoly_step





end.


Вот что от меня требовалось ))) Примерную идею взял отсюда. Просто для каждой клетки считал сумму квадратов длин рядов, которые получатся, если сюда ставим и крестик, и нолик, и выбирал клетку с наибольшим значением. Вот )))

А учусь я (не сочтите за понты (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif) ) в лучшей физико-технической школе Питера (м.б. даже и России))))

ЗЫ Еще раз всем спасибо (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Splend   Крестики-нолики на Delphi   Mar 4 2007, 21:14
- - Alder   Цитата(Splend;31419)Вопщем нужна помощь с алгоритм...   Mar 5 2007, 03:37
- - @ндрюха!   Splend, ты с помощью канваса делаешь?   Mar 6 2007, 23:44
- - Splend   Alder, спасибо))) но это не совсем то))) таких сай...   Mar 7 2007, 12:58
- - Alder   Цитата(Splend;31491)...алгоритм оценки клетки. А.....   Mar 8 2007, 20:42
- - Bender   вот нашел   Mar 8 2007, 21:53
- - Splend   Alder, в том то и проблема))) Везде алгоритмы таки...   Mar 9 2007, 00:05
- - @ндрюха!   Splend, вообще реализация реального бота с которым...   Mar 9 2007, 01:40
- - Splend   @ндрюха!, Пиво рулит))) Но мне типа на дом задано ...   Mar 9 2007, 15:35
- - Alder   Вот еще нарыл: http://davesource.com/Projects/Tic/...   Mar 11 2007, 16:07
- - Splend   Спасибо всем кто помогал =) +репы всем ))) Я уже н...   Mar 14 2007, 13:46
- - Alder   Цитата(Splend;31718)Спасибо всем кто помогал =) +р...   Mar 14 2007, 20:57
- - @ндрюха!   Цитата(Splend;31718)Спасибо всем кто помогал =) +р...   Mar 15 2007, 00:33
- - Splend   Кодunit anatoly; uses gamer; interface pr...   Mar 15 2007, 14:19
- - @ндрюха!   Splend а кем ты будеш в будуюшем? физико=техником ...   Mar 16 2007, 01:49
- - Splend   Ну как... Это я учусь в школе с конкретным уклоном...   Mar 16 2007, 08:13
- - Alder   за алгоритм +1   Mar 17 2007, 01:32
- - Splend   Пасиба   Mar 18 2007, 19:40
- - Serebrjany mir   Очень нужна игра на языке Си не си крестики нолик...   Oct 12 2009, 11:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 7th July 2025 - 05:07