Здравствуйте, гость ( Вход | Регистрация )
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) Кто-нить может помочь? =)
|
|
|
|
![]() |
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) |
|
|
|
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 а кем ты будеш в будуюшем?
физико=техником ... 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![]() ![]() |
| Текстовая версия | Сейчас: 25th November 2025 - 19:32 |