Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 153
от 13.04.2006, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 168, Экспертов: 48
В номере:Вопросов: 1, Ответов: 2


Вопрос № 39682: Здравствуйте. Пишу игру и возникла необходимость реализовать возможность поставить игру на паузу. Паузу написал см. прил процедура Pause1. Ну это очень неудобно...пользователь не видит стоит ли программа на паузе или нет. Я решил сделать ...

Вопрос № 39.682
Здравствуйте.
Пишу игру и возникла необходимость реализовать возможность поставить игру на паузу.
Паузу написал см. прил процедура Pause1.
Ну это очень неудобно...пользователь не видит стоит ли программа на паузе или нет. Я решил сделать чтоб выводилось Pause , a при повторном нажатии на P экран возвращался в первоначальное состояние...Вобщем написал Pause2 - теперь программа виснет.
Предполагаю что причина в неверном выделении памяти...но сам
найти ошибку не могу.
Подскажите где я набажил.

И ещё как заставить работать клавишу Pause...т.е. какой у нее скан код...а то я не могу найти в книжке. Сам же написав программку
получаю 0 0 - что заведомо неверно :(

Приложение:

Отправлен: 07.04.2006, 22:04
Вопрос задал: Denton (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Артём Шегеда
Здравствуйте, Denton!

Зачастую, достаточно сложные задачи выдумываются новичками :) Эта - одна из них. Почему виснет программа? - Не имею малейшего представления. Очень похоже, что ты напутал с координатами прямоугольника, скорее всего, подразумевалось
  GetMaxX div 2 - 70, GetMaxY div 2 - 70, GetMaxX div 2 + 70, GetMaxY div 2 +70

Ну а с клавишей Pause будет намного сложнее... Средствами языка здесь ничего не сделаешь.
1. Перехватываем клавиатурное прерывание (int 9)
2. Заводим переменную PauseFlag, которую контролируем в основном цикле программы
3. В прерывании отслеживаем нажатие Pause (точнее, скан-кода, являющегося одним из серии для клавиши Pause - $45)
4. После завершения программы возвращаем обработчик прерывания на место.

Предупреждение: игры с векторами прерываний под чистым DOS чреваты перезагрузкой ;) Поэтому сохраняйся почаще (а лучше, поставь автосохранение). А вообще, ты резко стартанул и находишься на той черте, после которой или остаются с паскалем, или переходят на ассемблер :)

Приложение:

Ответ отправил: Артём Шегеда (статус: 5-ый класс)
Ответ отправлен: 07.04.2006, 23:38
Оценка за ответ: 5
Комментарий оценки:
пасиб

Отвечает: EPDSota
Здравствуйте, Denton!

Ассемблер - мощный язык))... Скан-код можно получить так:

function ScanCod:byte;assembler;asm in al,60h;end;{возвращается скан-код последней клавиша, изменившая свой статус}
В итоге пауза будет выглядеть:

procedure pause;
begin
{это место как исправить - см. предыдущий ответ}
repeat until (ScanCod<>29)and(ScanCod<>29+$80) ;{задрежка идет пока последняя нажатая-отжатая клавиша - break}
...
end;
begin
while(ScanCod<>29)do;{просто ждем кнопки пауза}
writeln('paused');
pause;
writeln('end');
end.


---------
Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 08.04.2006, 10:09
Оценка за ответ: 5
Комментарий оценки:
спасиба


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.30 (beta) от 09.04.2006
Яндекс Rambler's Top100

В избранное