Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу обработчик события и отсечение
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Capitan Blood Capitan Blood вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.12.2007
По умолчанию 16.12.2007, 20:23

приветствую
делаю сему на VIP 5.2 и вот уже оставалось сделать вывод сообщения о победе/поражения ка кнаткнулся на страный глюк понять какоторый так и не смог

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

реализовал весь интерфейс, всё логику, и тормознулся на следующем:
есть обработчик кнопок игрового поля, вот его код:

task_win_eh(_Win, e_control(ID, wc_PushButton, _, _), 0) :-
%player1
move(...1...),

checkExistingMoves(2),

%player2
move(...2...),

checkExistingMoves(1),
!;

not(checkExistingMoves(2)),
winMessage(1), !;

not(checkExistingMoves(1)),
winMessage(2), !.

предикаты winMessage выводят сообщение в зависимости от параметра, функция move делает ход, а функция checkExistingMoves проверяет есть ли у указаного игрока варианты хода

в процессе и гры всё отлично работает, а глюк случается когда у одного из игроков нету ходов(т .е. он проигрывает)

посидев в дебагере получил следующее:

проходиом move для первого игрока, делаем проверку на варианты ходов и после проверки переходим не на следующий предикат а в самое неожиданое место - в середину предиката move

board - факты о занятых клетка
compareMove - проверка на корректность хода

Код:
checkExistingMoves(PlayerID) :- 
        player(PlayerID, Cell, _),
        CellRect = win_GetOuterRect(Cell),
        CellRect = rct(CellX, CellY, _, _),
        convertToLogic(CellX, CellY, PlayerX, PlayerY),
        searchAvalibaleMoves(0, 0, PlayerX, PlayerY, 0, MvsCnt),
        MvsCnt <> 0.

    searchAvalibaleMoves(X, Y, PlayerX, PlayerY, CurMvsCnt, MvsCnt) :-
        X < 8,
        NextX = X + 1,
        compareMove(X, Y, PlayerX, PlayerY),
        not(board(X, Y)),
        NCurMvsCnt = CurMvsCnt + 1,
        searchAvalibaleMoves(NextX, Y, PlayerX, PlayerY, NCurMvsCnt, MvsCnt);

        X = 8,
        Y < 7,
        NextX = 0,
        NextY = Y + 1,
        searchAvalibaleMoves(NextX, NextY, PlayerX, PlayerY, CurMvsCnt, MvsCnt);

        X < 8,
        NextX = X + 1,
        not(compareMove(X, Y, PlayerX, PlayerY)),
        searchAvalibaleMoves(NextX, Y, PlayerX, PlayerY, CurMvsCnt, MvsCnt);

        X < 8,
        NextX = X + 1,
        compareMove(X, Y, PlayerX, PlayerY),
        board(X, Y),
        searchAvalibaleMoves(NextX, Y, PlayerX, PlayerY, CurMvsCnt, MvsCnt);

        Y = 7, 
        MvsCnt = CurMvsCnt,
        !.
надеюсь на вашу помощь
Ответить с цитированием
  (#2 (permalink)) Старый
Capitan Blood Capitan Blood вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.12.2007
По умолчанию 17.12.2007, 23:22

закрываем вопрос - разобрался, установил точку отсечения в метсте куда он возвращзается и всё стало отлично
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик события как его создать Шкет .NET 2 14.07.2011 22:05
Задача на отсечение greep Prolog 1 08.06.2010 22:18
Обработчик для кнопки Eugenio DHTML, JavaScript, VBScript 1 02.09.2009 08:07
Разложение линии в растр и отсечение Kinoman Delphi 3 01.12.2008 18:30
отсечение toshkaexe Prolog 6 24.12.2006 19:30
Печать МЕМО. Обработчик события Dimson C++ Builder 1 13.10.2006 06:35
Как написать обработчик события для BitBtn на главной форме BSV C++ Builder 1 28.10.2005 12:14
Как делать отсечение объекта #Andrew Программирование графики 10 03.02.2005 16:01
Обработчик ошибок для ADO Skiff C++ Builder 0 12.01.2005 17:26
Обработчик события для динамически создаваемого объекта vanya C++ Builder 2 23.09.2004 12:59
Отсечение glClipPlane как с ними работать _Cyclope Программирование графики 2 20.07.2004 16:17
Как при щелчке на CheckBox сделать обработчик события OnClick Semus Вопросы начинающих программистов 1 14.01.2004 16:24



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов