Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритм хода компютера в крестиках-ноликах 
V
    Опции темы
americanets
Дата 6.6.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



задача простая, крестики нолики 3 х 3 , человек - компьютер

никак не могу придумать как ходить компьютеру (он не должен проигрывать) 





--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Rennigth
Дата 6.6.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



americanets, Тебе алгоритм или код? 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
americanets
Дата 6.6.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



код, вобщем-то все сделать смог, а вот как научить компьютер ходить и выбирать правильный по ситуации ход я не знаю

Это сообщение отредактировал(а) americanets - 6.6.2008, 17:53


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
pseud
Дата 6.6.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 10
Всего: 40



а поискать
крестики-нолики


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
americanets
Дата 6.6.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



у меня ссылка не открывается

Добавлено через 8 минут и 10 секунд
поискал , но реализации не нашел


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 6.6.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



для вывода использую Panel(1,2,3...)

Как можно программно задать номер panel попробую через цыкл, просто с Delphi 2 день, задали на завтра сделать игру, вот мучаюсь как сделать 
Код

PanelX.caption:= 
чтоб х можно было задавать, а то пока все ошибки, что нет такого панел


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
americanets
Дата 6.6.2008, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



делаю топорно , но как могу

сначала
Код


if(Panel1.Caption='') then begin Panel1.Caption:=val end
else if(Panel2.Caption='') then Panel2.Caption:=val
else if(Panel3.Caption='') then Panel3.Caption:=val
else if(Panel4.Caption='') then Panel4.Caption:=val
else if(Panel5.Caption='') then Panel5.Caption:=val
else if(Panel6.Caption='') then Panel6.Caption:=val
else if(Panel7.Caption='') then Panel7.Caption:=val
else if(Panel8.Caption='') then Panel8.Caption:=val
else if(Panel9.Caption='') then Panel9.Caption:=val;


потом просчитаю ситуации когда юзер ставит нолики или крестики рядом


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
THandle
Дата 6.6.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



americanets, а не лучше ли тут что то такое:

Код

var
  i : integer;
begin
  for i := 0 to ComponentCount - 1 do
    if Components[i] is TPanel then
      if TPanel(Components[i]).Caption = '' then
        begin
          TPanel(Components[i]).Caption := Val;
          break;
        end;
end;


???

Это сообщение отредактировал(а) THandle - 6.6.2008, 19:35
PM   Вверх
mr.Anderson
Дата 6.6.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Я рисовал в свое время крестики-нолики на делфях. Делал анализом всех возможных игровых ситуаций на поле и в зависимости от этого делал ход. При поле 3х3 этих ситуаций не так уж и много.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
americanets
Дата 6.6.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



THandle, да, так конечно рациональней, но тогда "компьютер" легко проигрывает? цикл заменяет только простой перебор, а как в нево включить ситуации когда юзер ставит крестики рядом, 



mr.Anderson, 

просчитываю вручную

Код

// просчитаем все по диагноли  
if(Panel1.Caption<>'')and(Panel3.Caption<>'')and(Panel1.Caption<>val)and(Panel2.Caption='') then Panel2.Caption:=val 
else if(Panel4.Caption<>'')and(Panel6.Caption<>'')and(Panel4.Caption<>val)and(Panel5.Caption='') then Panel5.Caption:=val
else if(Panel7.Caption<>'')and(Panel9.Caption<>'')and(Panel7.Caption<>val)and(Panel8.Caption='') then Panel8.Caption:=val

else if(Panel1.Caption<>'')and(Panel2.Caption<>'')and(Panel1.Caption<>val)and(Panel3.Caption='') then Panel3.Caption:=val 
else if(Panel4.Caption<>'')and(Panel5.Caption<>'')and(Panel4.Caption<>val)and(Panel6.Caption='') then Panel6.Caption:=val
else if(Panel7.Caption<>'')and(Panel8.Caption<>'')and(Panel7.Caption<>val)and(Panel9.Caption='') then Panel9.Caption:=val

else if(Panel3.Caption<>'')and(Panel2.Caption<>'')and(Panel3.Caption<>val)and(Panel1.Caption='') then Panel1.Caption:=val 
else if(Panel6.Caption<>'')and(Panel5.Caption<>'')and(Panel6.Caption<>val)and(Panel4.Caption='') then Panel4.Caption:=val
else if(Panel9.Caption<>'')and(Panel8.Caption<>'')and(Panel9.Caption<>val)and(Panel7.Caption='') then Panel7.Caption:=val

// расчитаем все по вертикали
else if(Panel1.Caption<>'')and(Panel7.Caption<>'')and(Panel1.Caption<>val)and(Panel4.Caption='') then Panel4.Caption:=val

else if(Panel2.Caption<>'')and(Panel8.Caption<>'')and(Panel2.Caption<>val)and(Panel5.Caption='') then Panel5.Caption:=val
else if(Panel3.Caption<>'')and(Panel9.Caption<>'')and(Panel3.Caption<>val)and(Panel6.Caption='') then Panel6.Caption:=val

else if(Panel1.Caption<>'')and(Panel4.Caption<>'')and(Panel1.Caption<>val)and(Panel7.Caption='') then Panel7.Caption:=val
else if(Panel2.Caption<>'')and(Panel5.Caption<>'')and(Panel2.Caption<>val)and(Panel8.Caption='') then Panel8.Caption:=val
else if(Panel3.Caption<>'')and(Panel6.Caption<>'')and(Panel3.Caption<>val)and(Panel9.Caption='') then Panel9.Caption:=val

else if(Panel7.Caption<>'')and(Panel4.Caption<>'')and(Panel7.Caption<>val)and(Panel4.Caption='') then Panel4.Caption:=val
else if(Panel8.Caption<>'')and(Panel5.Caption<>'')and(Panel8.Caption<>val)and(Panel2.Caption='') then Panel2.Caption:=val
else if(Panel9.Caption<>'')and(Panel6.Caption<>'')and(Panel9.Caption<>val)and(Panel3.Caption='') then Panel3.Caption:=val

// проверим все по иксам

else if(Panel1.Caption<>'')and(Panel9.Caption<>'')and(Panel1.Caption<>val)and(Panel5.Caption='') then Panel5.Caption:=val
else if(Panel1.Caption<>'')and(Panel5.Caption<>'')and(Panel1.Caption<>val)and(Panel9.Caption='') then Panel9.Caption:=val
else if(Panel5.Caption<>'')and(Panel9.Caption<>'')and(Panel5.Caption<>val)and(Panel1.Caption='') then Panel1.Caption:=val


else if(Panel3.Caption<>'')and(Panel7.Caption<>'')and(Panel3.Caption<>val)and(Panel5.Caption='') then Panel5.Caption:=val
else if(Panel3.Caption<>'')and(Panel5.Caption<>'')and(Panel3.Caption<>val)and(Panel7.Caption='') then Panel7.Caption:=val
else if(Panel5.Caption<>'')and(Panel7.Caption<>'')and(Panel5.Caption<>val)and(Panel3.Caption='') then Panel3.Caption:=val





// простой перебор
//else
//begin
 else if(Panel1.Caption='') then Panel1.Caption:=val
else if(Panel2.Caption='') then Panel2.Caption:=val
else if(Panel3.Caption='') then Panel3.Caption:=val
else if(Panel4.Caption='') then Panel4.Caption:=val
else if(Panel5.Caption='') then Panel5.Caption:=val
else if(Panel6.Caption='') then Panel6.Caption:=val
else if(Panel7.Caption='') then Panel7.Caption:=val
else if(Panel8.Caption='') then Panel8.Caption:=val
else if(Panel9.Caption='') then Panel9.Caption:=val;
//end



все нормально, но почемуто плохо работает с первой графой Panel (1 4 7) и диагональю 1 4 9

Это сообщение отредактировал(а) americanets - 6.6.2008, 20:52


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
krwlr
Дата 6.6.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 6.12.2006

Репутация: нет
Всего: 51



тему не читал, топы не читал, тока название темы читал...
думаю: 
почему не сделать массив A, типа

X X X
X X X
X X X

и перемещаться по нему a[i+1] и т.д?


хотя простите меня дурика...


--------------------
убрал
PM   Вверх
americanets
Дата 6.6.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



krwlr, ну просто приткнуть ход робота уже придумали как, а вот как просчитать ситуации когда юзер стремится к выигрышу ?


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
Данкинг
Дата 6.6.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Вот вам всем! smile  smile  smile 

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  SuperKre.rar 584,36 Kb


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
americanets
Дата 7.6.2008, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



Спасибо, попробую разобраться что а как


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
THandle
Дата 7.6.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Данкинг, шо это за скины там? Без них нельзя делать что ли? smile 

Кода 1000 строк, можно раза в 2 сократить. Не запускал. По первой причине.

Кстати, там шахматы или что то другое? smile 
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.