IPB

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

 
Reply to this topicStart new topic
> Крестики-нолики на 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
Alder
сообщение Mar 5 2007, 03:37
Сообщение #2


Grand Member
****

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



Цитата(Splend;31419)
Вопщем нужна помощь с алгоритмом. Никак не могу найти подходящего. Нужен алгоритм для реализации бота для игры крестики-нолики на Delphi. Поле 40х40, пять в ряд (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif) Кто-нить может помочь? =)

Так с наскока поискал:
http://www.torry.ru/apps/games/representations/puzz.zip
http://delphiforfun.org/Programs/tic_tac_toc_machine.htm
http://www.planetsourcecode.com/vb/scripts...=10450&lngWId=3 [на С++, но алгоритм подправить труда я думаю не составит]
Go to the top of the page
 
+Quote Post
@ндрюха!
сообщение Mar 6 2007, 23:44
Сообщение #3


Advanced Member
***

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



Splend, ты с помощью канваса делаешь?
Go to the top of the page
 
+Quote Post
Splend
сообщение Mar 7 2007, 12:58
Сообщение #4


Member
**

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



Alder, спасибо))) но это не совсем то))) таких сайтов я тоже много нашел. Я хотел найти конкретно по пунктам алгоритм оценки клетки.

@ндрюха!, мне нужен только алгоритм бота) реализация - не проблема)
Go to the top of the page
 
+Quote Post
Alder
сообщение Mar 8 2007, 20:42
Сообщение #5


Grand Member
****

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



Цитата(Splend;31491)
...алгоритм оценки клетки.

А..Ну так бы сразу и сказал (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif) Я думал тебе весь алгоритм нужен.
Поищу...
З.Ы. С/С++ понимаешь,если что?
Go to the top of the page
 
+Quote Post
bender
сообщение Mar 8 2007, 21:53
Сообщение #6


Grand Member
****

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



вот нашел
Go to the top of the page
 
+Quote Post
Splend
сообщение Mar 9 2007, 00:05
Сообщение #7


Member
**

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



Alder, в том то и проблема))) Везде алгоритмы такие: примените ко всем пустым клеткам оценочную функцию и выберите клетку с наибольшем значением этой функции. А эту функцию придумайте сами)
А в С/С++ коде я разберусь)))

Bender, там вроде алгоритм только для поля 3x3 ))) Хотелось бы побольше)))
Go to the top of the page
 
+Quote Post
@ндрюха!
сообщение Mar 9 2007, 01:40
Сообщение #8


Advanced Member
***

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



Splend, вообще реализация реального бота с которым можно играть тебе очь дорого обойдеццо. Тяжело оч сделать номаного! А не проше сделать игру по сети, найти кого нить кто хорошо играет и на пиво играть? интереснее же будетЪ! да и по сети по ходу легче сделать
Go to the top of the page
 
+Quote Post
Splend
сообщение Mar 9 2007, 15:35
Сообщение #9


Member
**

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



@ндрюха!, Пиво рулит))) Но мне типа на дом задано написать модуль бота. И это же задано остальному классу))) Потом этих ботов подключают к программе-визуализатору, и они соревнуются)))
Go to the top of the page
 
+Quote Post
Alder
сообщение Mar 11 2007, 16:07
Сообщение #10


Grand Member
****

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



Вот еще нарыл:
http://davesource.com/Projects/Tic/tictactoe.c (англ.,прога+описание алгоритма)
Go to the top of the page
 
+Quote Post
Splend
сообщение Mar 14 2007, 13:46
Сообщение #11


Member
**

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



Спасибо всем кто помогал =) +репы всем ))) Я уже написал, сдал, получил 4 =)

ЗЫ тему можно закрыть )))
Go to the top of the page
 
+Quote Post
Alder
сообщение Mar 14 2007, 20:57
Сообщение #12


Grand Member
****

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



Цитата(Splend;31718)
Спасибо всем кто помогал =) +репы всем ))) Я уже написал, сдал, получил 4 =)

ЗЫ тему можно закрыть )))

Делись алгоритмом своим (IMG:http://forum.iseekyou.im/style_emoticons/default/wink.gif) Или скажи на основе какого материала делал
Go to the top of the page
 
+Quote Post
@ндрюха!
сообщение Mar 15 2007, 00:33
Сообщение #13


Advanced Member
***

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



Цитата(Splend;31718)
Спасибо всем кто помогал =) +репы всем ))) Я уже написал, сдал, получил 4 =)

ЗЫ тему можно закрыть )))

А где это ТАКОЕ задают?
Go to the top of the page
 
+Quote Post
Splend
сообщение Mar 15 2007, 14:19
Сообщение #14


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
@ндрюха!
сообщение Mar 16 2007, 01:49
Сообщение #15


Advanced Member
***

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



Splend а кем ты будеш в будуюшем?
физико=техником чель? эт че за профессия? че делать в будующем?
Go to the top of the page
 
+Quote Post
Splend
сообщение Mar 16 2007, 08:13
Сообщение #16


Member
**

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



Ну как... Это я учусь в школе с конкретным уклоном в сторону там физики, математики, программирования и английского. А дальше могу пойти на любой технический факультет, на любую специальность, которая греет: программист, связист, инженер и т.д. по списку... да хоть космонавт))) (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif)
Go to the top of the page
 
+Quote Post
Alder
сообщение Mar 17 2007, 01:32
Сообщение #17


Grand Member
****

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



за алгоритм +1 (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif)
Go to the top of the page
 
+Quote Post
Splend
сообщение Mar 18 2007, 19:40
Сообщение #18


Member
**

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



Пасиба (IMG:http://forum.iseekyou.im/style_emoticons/default/smile.gif)
Go to the top of the page
 
+Quote Post
Serebrjany mir
сообщение Oct 12 2009, 11:40
Сообщение #19


Junior Member
*

Группа: Members
Сообщений: 11
Регистрация: 12.9.2009
Из: Russia
Пользователь №: 30418



Очень нужна игра на языке Си не си крестики нолики на бесконечность, выигрыш 5 в ряд, игра с интелектуальным компом тобишь чтобы он не рандомом ставил, на СИ под DOS. Может у кого есть или кто нить сможет написать? в инете полазил, вроде ничего рабочего не нашёл. заранее спасибо
Go to the top of the page
 
+Quote Post

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

 



Текстовая версия Сейчас: 1st January 2025 - 17:55