|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.05.2011, 20:53 | #1 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
как избежать подвисания
Решил тут написать игру "Пять камней" с целью попробовать силы в игровом АИ, но наткнулся на проблему: ход компьютера скорее всего будет занимать некоторое время, и окошко не должно подвисать. Вынес раздумия компьютера в отдельный поток, но все равно не знаю, как обойтись без Sleep в ожидании его хода.
Есть глобальные переменные cx, cy, после хода игрока равные -1. Код в процедуре соображания: Код:
Код:
Nobody expects Spanish Inquisition!
|
18.05.2011, 21:05 | #2 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 489
|
пробуй через Timer, конечно не самый лучший подход, но все-таки
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
|
18.05.2011, 21:29 | #3 |
Форумчанин
Регистрация: 25.11.2010
Сообщений: 164
|
А смысл отказываться от Sleep? Тем более, что всё это делается в потоке. Попробуй ещё в поток вставить Application.ProcessMessages, мб и поможет.
Возможно Я Быдлокодер ©.
|
18.05.2011, 21:50 | #4 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
А вообще есть такая вещт как События.. делается оно так: В приложении делаем глоб. переменную Код:
Код:
создаём на форме что-то чтро будет ждать при помощит этого: Код:
Код:
далее не забываем закрыть ивент: Код:
Последний раз редактировалось Человек_Борща; 18.05.2011 в 22:02. |
|
18.05.2011, 21:53 | #5 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
Смысл отказываться от Sleep в том, что от нее приложение зависат. Попробуй на нажатие кнопки написать Sleep(5000) и потом сдвинуть окно.
Nobody expects Spanish Inquisition!
|
18.05.2011, 22:03 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Sleep() усыпляет поток(отсрочивает действие) а смысла то нет. Исп. события(Написал выше).
Держи. Переделал твой проект. Прога не зависает, комп думает находу.. Теперь все работает через aEvent. И исправил 1 баг(Ты создовал потоки но не освобождал их). Надеюсь за помощь хотябы + ЗюЫю если надо чтобы комп думал медленно(в пределах 1 сеунды), делаем так: Код:
Последний раз редактировалось Человек_Борща; 18.05.2011 в 22:31. |
18.05.2011, 22:33 | #7 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
Человек_Борща, спасибо, не тоже неправильно работает.
Поставь в procedure AIThread.Think в начале Sleep(100) и в результате будет сообщение о том, что компьютер не смог сходить нормально, он не успевает изменить переменные.
Nobody expects Spanish Inquisition!
|
18.05.2011, 22:41 | #8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Ну значит вы ошиблись в просчёте коээфициета ошибки ПК. Поток работает нормально и считает ок. Ошибка в том что ПК ходит по тем клеткам по котрым уже ходили.. и часто пытается попасть в одно и тоже место..
задерживать поток на 100 мс нет смысла =) ПРавьте алгоритм. Ищите свободные клнетки и рандомно выбирайте одну. Последний раз редактировалось Человек_Борща; 18.05.2011 в 22:45. |
18.05.2011, 22:48 | #9 |
Форумчянин
Форумчанин
Регистрация: 05.04.2009
Сообщений: 446
|
Он работает нормально только если он работает очень недолго. Даже после Sleep(10) ошибка каждый ход. И она возникает не потому, что он не туда ходит, а потому, что координаты остаются -1;-1 это можно отследить через ShowMessage.
Nobody expects Spanish Inquisition!
|
18.05.2011, 22:55 | #10 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Ну тебе судить =) Я сильно не углублялся в алгоритмы проги.. просто приделал работу через Events....
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как избежать конфликта строковых функций? | Trust_357 | Visual C++ | 2 | 09.04.2011 15:09 |
Как избежать повтор строк в тексте | Federal | Помощь студентам | 3 | 19.10.2010 14:38 |
Как избежать Selection? | Мультипликатор | Microsoft Office Word | 10 | 21.06.2010 17:15 |
Бот - как избежать слежки? | boris-blade | Win Api | 9 | 28.12.2009 09:11 |
как избежать кэширования в Опере | rolling | PHP | 3 | 01.12.2009 18:34 |