Форум «Всё о Паскале» _ Написание игр _ Игруха! (нужна модификация)
Автор: punkska 10.06.2005 20:45
Игра: c верхней части экрана падают шары. Управляя ловушкой, игрок должен собрать как можно больше шаров за одну минуту. С течением времени плотность падения шаров уменьшиться, а скорость увеличивается. По истечении времени (1 мин.) на экран выводиться колво пойманных шаров.10 лучших храняться в файле и выводятся на экран по запросу пользователя.
вот она сделанная! тока без объектов!!!
помогите переписать! что надо сделать модуль где будут храниться объекты (необходимо наследование)... хелп!!!! и очень хороше бы использовать глючный модуль граф...
пока писал столкнулся с одной проблемой ,если делать метод виртуальным ,то при исполнении прога вылетает с ошибкой NTVDM ,из-за чего и как все-таки реализовать виртуальные методы?
если делать метод виртуальным ,то при исполнении прога вылетает с ошибкой NTVDM ,из-за чего и как все-таки реализовать виртуальные методы?
А конструкторы где? Читай здесь: http://forum.pascal.net.ru/index.php?showtopic=2085&view=findpost&p=17920
Автор: punkska 2.09.2005 0:36
выручайте!!! горит!!!
Автор: volvo 10.09.2005 5:09
Цитата(punkska @ 10.06.05 16:45)
Игра: c верхней части экрана падают шары. Управляя ловушкой, игрок должен собрать как можно больше шаров за одну минуту. С течением времени плотность падения шаров уменьшиться, а скорость увеличивается. По истечении времени (1 мин.) на экран выводиться колво пойманных шаров. 10 лучших храняться в файле и выводятся на экран по запросу пользователя.
Вот она же, только немного с другим оформлением, и с объектами...
Дык... А какое же там наследование? В программе 33 строки, зачем тебе здесь наследование понадобилось? По-моему, это будет просто искусственное нагромождение конструкций.
Наследование и ООП вообще, конечно, мощная штука, но пользоваться ей бездумно не стОит... Это же просто "из пушки по воробьям" получается.
Думаю, что здесь и вправду лишнее нагромождение проги(я про Program.pas), НО если усовершенствовать игру, например, добавить шары разного типа- с бомбой(взрывающие все остальные шары), добавляющие жизнь,с ловушкой(при поимке забираются очки) и т.д., то можно использовать наследование. Т.е. если игрок поймал шар, то вызывается метод PlayerCatch, который реагирует по-разному в зависимости от типа шара. Тогда объект TBall будет иметь виртуальный метод PlayerCatch и все разновидности мяча будут наследниками этого объекта.
Автор: punkska 12.09.2005 23:05
Может ловушку попытаться сделать ОбъетоМ ..тока что наследовать ловушке от шарика я хз=) помогите в этом не лёгком вопросе!
Автор: Дож 13.09.2005 19:10
Цитата
..тока что наследовать ловушке от шарика
Да, нечего наследовать. Но и шарик и ловушка могут иметь одного общего родителя, например, TGameObj, котрый хранит координату на экране и умеет ею манипулировать, внешний вид(в любом виде- цвет, тип формы, спрайт или даже 3D модель, если хочешь), активность(существует ли в данный момент шар или с ним ничего не нужно делать) и т.д.
Автор: volvo 13.09.2005 19:18
punkska, ты мою программу вообще смотрел, или ты думаешь, что я просто так ее делал, чтобы только на форум выложить? :no: Там же наследование один к одному, как Дож говорит ...
Исходники я для чего дал? Для красоты?
Автор: punkska 13.09.2005 22:18
модуль objs не могу скомпилировать пишит ошибка 116 must in 8087 mode to compile this.
Procedure TBox.Recalc; Begin Inc(pos_y, Trunc(v_speed * box_mult ) ); (ЧТО-ТО В ЭТОЙ СТРОЧКЕ ПАСКАЛЮ НЕ НРАВИТЬСЯ) out_of_game := out_of_game or (pos_y > GetMaxY) End;
что я не так делаю? как скомпелировать ?
Автор: volvo 13.09.2005 22:35
Добавь
{$N+, E+}
самой первой строкой основной программы и перекомпилируй всё (Build All) ...
Ну или menu -> Options -> Compiler -> оба пункта в "Numeric processing" должны быть отмечены...
Автор: punkska 13.09.2005 22:56
С П А С И Б О!!! а модуль Litt что это за модуль?
Автор: Дож 13.09.2005 23:22
Ассемблерная процедура для установки BGI шрифта.
Автор: volvo 13.09.2005 23:35
Дож, давай ты будешь отвечать, ТОЛЬКО когда на 100% уверен в том, что ты отвечаешь правильно !!! Какая
Цитата
Ассемблерная процедура для установки BGI шрифта
? Это простой LITT.CHR, для удобства (чтобы не таскать за собой постоянно лишний CHR-файл) переконвертированный в OBJ-файл и прилинкованный к программе. Точно так же, кстати, как и EGAVGA.BGI переконвертирован в OBJ...
Автор: Дож 14.09.2005 21:21
Цитата
Это простой LITT.CHR, для удобства (чтобы не таскать за собой постоянно лишний CHR-файл)
Инересно, а какая разница между тем, что таскть- *.bgi или *.obj?
Автор: punkska 16.09.2005 1:02
что то совсем непонятно для чего и что это за файлик.. =(
Автор: volvo 16.09.2005 1:24
Цитата(Дож @ 14.09.05 17:21)
Инересно, а какая разница между тем, что таскть- *.bgi или *.obj?
Нет, Дож, ты не понял... Во время компиляции OBJ-файл линкуется к EXE и тебе не надо его таскать за собой, он уже внутри EXE-шника. А попробуй сделать программу, использующую EGAVGA.BGI, откомпилировать ее у себя, а запустить EXE-шник на компе, где файла EGAVGA.BGI нету. Что будет? Можешь не пытаться, я тебе и так скажу:
Цитата
Graph Error (-2): Driver not found
punkska
Цитата
что то совсем непонятно для чего и что это за файлик
Еще раз: LITT.OBJ - это файл LITT.CHR (файл, содержащий мелкий шрифт - smallFont), только переконвертированный в LITT.OBJ вот такой командой:
Цитата
binobj LITT.CHR LITT.OBJ LittFontProc
, и присоединенный к исполнимому файлу, как внешняя процедура:
{$L LITT.OBJ} Procedure LittFontProc; External;
С EGAVGA.OBJ - то же самое: берем EGAVGA.BGI, и ...
Теперь (после компиляции) можно не заботиться о том, чтобы на компьютере, где будет запускаться игра, обязательно присутствовали эти 2 файла, они уже есть внутри EXE... То есть преимущество: ты передаешь получателю 1 файл вместо 3-х, а чем меньше файлов - тем меньше вероятность сбоя программы...
Автор: Shura 16.09.2005 2:19
Вот это уже интересно! Думаю это многим будет полезно! Я, например, не знал... Так а можно любой файл прилинковать?
Автор: volvo 16.09.2005 2:37
Да... Любой файл данных, где-то были даже примеры прилинковки PCX-файлов, с последующим их отображением из программы...
и что такое cleardevice; я конечно догадываюсб =) но хотелось определение получить!
Автор: volvo 17.09.2005 2:41
punkska, ответы внимательнее читаем ;)
Цитата(volvo @ 15.09.05 21:24)
Еще раз: LITT.OBJ - это файл LITT.CHR (файл, содержащий мелкий шрифт - smallFont), только переконвертированный в LITT.OBJ вот такой командой: , и присоединенный к исполнимому файлу, как внешняя процедура:
{$L LITT.OBJ} Procedure LittFontProc; External;
С EGAVGA.OBJ - то же самое ...
Фактически External говорит компилятору, что процедуры с таким именем в PAS файле не будет, а находится эта процедура где-то во внешнем OBJ файле. Кстати, именно поэтому обычно Extern и {$L ...} располагаются рядом (для удобства программиста, чтобы не забыть прилинковать OBJ), хотя могут быть в любом месте программы.
При наличии такого объявления на этапе компиляции Паскаль не будет искать процедуры с именами EGAVGADriverProc и LittFontProc в текущем PAS-файле. Они будут искаться только на этапе линковки (редактирования связей) во всех файлах, описанных в {$L ...}
А насчет ClearDevice и иже с ними - это можно посмотреть в Help-е на Turbo Pascal, т.к. это стандартная процедура модуля Graph (очистка графического экрана) ...