|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.06.2010, 23:20 | #1 |
Форумчанин
Регистрация: 14.03.2010
Сообщений: 362
|
ОПЕРЕЖАЮЩИЕ ОПИСАНИЯ ПРОЦЕДУР
Подскажите пожалуйста как зделать в моей программе ОПЕРЕЖАЮЩИЕ ОПИСАНИЯ ПРОЦЕДУР
Вот схема как делать игру(гетерархия): USES CRT,Graph; VAR все переменные опишем именно здесь, а не внутри процедур ОПЕРЕЖАЮЩИЕ ОПИСАНИЯ процедур PROCEDURE ZAVERSHENIE_IGRI; Здесь анализируем, насколько успешно стрелял игрок, отмечаем мелодией, цветом и текстом его достижения, затем спрашиваем, будет ли игрок играть еще. Если да, то вызываем про-цедуру NACHALO, иначе закрываем графический ре-жим и - Halt. PROCEDURE NE_PORA_LI; Здесь увеличиваем счетчик торпед. Если он>10, то вызываем процедуру ZAVERSHENIE_IGRI, иначе процедуру RISUNOK. PROCEDURE NEPOPAL; Здесь программируем все эф-фекты в случае промаха, после чего вызываем проце-дуру NE_PORA_LI. PROCEDURE POPAL; Здесь программируем все эф-фекты в случае попадания, после чего вызываем про-цедуру NE_PORA_LI. PROCEDURE ATAKA; Здесь плывут одновременно ко-рабль и торпеда. Затем в зависимости от ситуации вы-зываются процедуры POPAL или NEPOPAL. Учтите также ситуацию, когда вы просто забыли выстрелить. PROCEDURE KORABL; Здесь плывет корабль до вы-стрела, который вызывает процедуру ATAKA. PROCEDURE RISUNOK; Здесь рисуем береговую ли-нию, указываем на экране имя игрока, счетчики торпед и подбитых кораблей. Затем вызываем процедуру KORABL. PROCEDURE RISUNOK;Здесь устанавливаем в нуль счетчики торпед и подбитых кораблей, спрашиваем имя игрока и делаем все прочее, что нужно делать один раз за всю игру в самом ее начале. Затем прямо из процедуры NACHALO вызываем процедуру RISUNOK. BEGIN инициализация графического режима; DirectVideo:=false; NACHALO END. ___________________________________ ______________________________ А вот сама задача к игре: Наверху экрана слева направо плывет вражеский корабль. Внизу притаился ваш торпедный аппарат. В подходящий момент времени вы нажимаете клавишу - и торпеда плывет вверх. Если вы попали, то видна вспышка от взрыва, может быть, на мгновение виден и сам взрыв, раздается коротенькая радостная мелодия, на экране - коротенький поздравительный текст, счетчик подбитых кораблей на экране увеличивается на 1. Если не попали, то зрительные и звуковые эффекты - совсем другие. В любом случае увеличивается на 1 счетчик выпущенных торпед. Когда торпеды у вас кончатся (скажем, их было 10), игра заканчивается. Программа анализирует ваши успехи и в зависимости от них выдает на экран текст, скажем “Мазила!”, если вы не попали ни разу из 10, или “Профессионал!”, если вы попали 8 раз. Затем спрашивает, будете ли вы играть еще. Если у всех кораблей будет одинаковая скорость, то попадать будет слишком просто, а значит и играть неинтересно. Сделайте скорость кораблей случайной. Конечно, не совсем уж (скажем, в условных единицах скорости диапазон от 0 до 10 – это слишком), а в пределах разумного (скажем, от 4 до 8 – это нормально). Причем не нужно менять скорость одного и того же ко-рабля в процессе движения. Пусть она остается посто-янной, а то все будет зависеть не от мастерства, а от везения. Различаются скорости только разных кораблей. ___________________________________ _____________________________
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
|
07.06.2010, 23:21 | #2 |
Форумчанин
Регистрация: 14.03.2010
Сообщений: 362
|
Ну и наконец, моя программа(игра)
Код:
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
|
07.06.2010, 23:24 | #3 |
Форумчанин
Регистрация: 14.03.2010
Сообщений: 362
|
что-то не выходит у меня
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
|
09.06.2010, 15:15 | #4 |
Форумчанин
Регистрация: 14.03.2010
Сообщений: 362
|
Ну помогите пожлуйста
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
|
09.06.2010, 16:20 | #5 |
Форумчанин
Регистрация: 05.04.2010
Сообщений: 410
|
Не пойму в чем вопрос? Как ввести опережающее описание процедуры?
Если да, то делается это следующим образом: допустим в вашем коде есть две процедуры А и В. Причем вначале описана процедура А, а уже за ней процедура В. Процедура В может вызвать процедуру А, т. к. та описана ранее. А вот из процедуры А вызвать В нельзя (В описана ниже). Для того чтобы это стало возможным вводится опережающее описание. Для этого перед описанием процедуры А прописывается имя процедуры В со списком формальных параметров, а за тем после ; пишется forward. Пример: procedure B(x,y: integer); forward; procedure A(z,m: integer); begin ... end; procedure B(x,y: integer); begin ... end; И еще, я конечно в ваш код сильно не вникал, но первое что бросилось в глаза PROCEDURE NEPOPALI; begin if torpeda_c>10 then procedure zaverhenie igri; else procedure risunok; end; По логике этой процедуры должно происходить следующее: если torpeda_c>10 то вызвать процедуру zaverhenie_igri, если нет, то вызвать risunok. Перед именем процедуры слово procedure не пишится и еще перд else не ставится ;. Должно быть так: PROCEDURE NEPOPALI; begin if torpeda_c>10 then zaverhenie_igri else risunok; end;
ICQ: 593-013-807
|
09.06.2010, 20:45 | #6 | |
Форумчанин
Регистрация: 14.03.2010
Сообщений: 362
|
Цитата:
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
|
|
11.06.2010, 00:23 | #7 |
Форумчанин
Регистрация: 14.03.2010
Сообщений: 362
|
Вот я все сделал как ты сказал,запускаю программку, и на экране ничего не появляется,что это может быть?
вот код ___________________________________ ____________ Код:
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
|
11.06.2010, 01:58 | #8 | |
Форумчанин
Регистрация: 05.04.2010
Сообщений: 410
|
Цитата:
в твоем коде гигантское количество ошибок. Возми хотя бы процедуру NACHALO которая вызывается из основного блока. Ну вызвал ты ее, ну обнулила она две переменные torpeda_c и corapl_s, ну вывела она строку ''What was the name gamer''. А дальше то что???? Конец программы??? Она ведь не вызывает других процедур!!! Отлажывайте каждую процедуру в отдельности!!!
ICQ: 593-013-807
|
|
11.06.2010, 02:21 | #9 | |
Форумчанин
Регистрация: 14.03.2010
Сообщений: 362
|
Цитата:
Чем больше моя слава, тем я больше тупею; и таково, несомненно, общее правило.(А.Эйнштейн)
|
|
11.06.2010, 02:41 | #10 | |
Форумчанин
Регистрация: 05.04.2010
Сообщений: 410
|
Цитата:
begin device:=0; mode:=0; initgraph(device,mode,'c:\bp\bgi'); {если корневой коталог паскаля на диске С} DirectVideo:=false; Nachalo; {вызов процедуры Nachalo} end; 2) в процедуре начало должно быть введено имя игрока, установлено количество торпед, количество кораблей. Код:
ICQ: 593-013-807
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Библиотека процедур | Paradoxer | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 19 | 14.09.2010 12:12 |
outlook и VBA. Как создать событие в календаре с форматированием описания? | Snark | Microsoft Office Excel | 0 | 28.09.2009 15:34 |
Массив процедур | garik | Общие вопросы Delphi | 0 | 18.03.2009 21:08 |
объявить класс для описания клиеннтского потока. с атрибутами String. | Sargon | Работа с сетью в Delphi | 4 | 23.12.2007 23:36 |
Создание процедур | Viteef | Общие вопросы Delphi | 3 | 11.05.2007 01:25 |