Помощь - Поиск - Пользователи - Календарь
Полная версия: Игруха! (нужна модификация)
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
punkska
Игра: c верхней части экрана падают шары. Управляя ловушкой, игрок должен собрать как можно больше шаров за одну минуту. С течением времени плотность падения шаров уменьшиться, а скорость увеличивается. По истечении времени (1 мин.) на экран выводиться колво пойманных шаров.10 лучших храняться в файле и выводятся на экран по запросу пользователя.

вот она сделанная! тока без объектов!!!

помогите переписать! что надо
сделать модуль где будут храниться объекты (необходимо наследование)...
хелп!!!!
и очень хороше бы использовать глючный модуль граф...

игра ниже!
virt
пока писал столкнулся с одной проблемой ,если делать метод виртуальным ,то при исполнении прога вылетает с ошибкой NTVDM ,из-за чего и как все-таки реализовать виртуальные методы?

ЗЫ
смотрите файл в аттаче.

ЗЫ2
все ясно из-за чего.
volvo
Цитата(virt @ 10.06.05 21:36)
если делать метод виртуальным ,то при исполнении прога вылетает с ошибкой NTVDM ,из-за чего и как все-таки реализовать виртуальные методы?

blink.gif А конструкторы где?
Читай здесь: FAQ: Виртуальные методы - Конструкторы и деструкторы
punkska
unsure.gif выручайте!!! горит!!!
volvo
Цитата(punkska @ 10.06.05 16:45)
Игра: c верхней части экрана падают шары. Управляя ловушкой, игрок должен собрать как можно больше шаров за одну минуту. С течением времени плотность падения шаров уменьшиться, а скорость увеличивается. По истечении времени (1 мин.) на экран выводиться колво пойманных шаров. 10 лучших храняться в файле и выводятся на экран по запросу пользователя.


Вот она же, только немного с другим оформлением, и с объектами...
punkska
Огромное спасибо!!!!! :rose:

Вот посмотрите эту же игру...
помогите в ней создать наследование... что-то не как не получаеться=(((
Volvo as guest
blink.gif Дык... А какое же там наследование? В программе 33 строки, зачем тебе здесь наследование понадобилось? По-моему, это будет просто искусственное нагромождение конструкций.

Наследование и ООП вообще, конечно, мощная штука, но пользоваться ей бездумно не стОит... Это же просто "из пушки по воробьям" получается.
punkska
я не то отправил!!!
Дож
lol.gif lol.gif lol.gif lol.gif lol.gif

Цитата
помогите в ней создать наследование...


Думаю, что здесь и вправду лишнее нагромождение проги(я про Program.pas), НО если усовершенствовать игру, например, добавить шары разного типа- с бомбой(взрывающие все остальные шары), добавляющие жизнь,с ловушкой(при поимке забираются очки) и т.д., то можно использовать наследование. Т.е. если игрок поймал шар, то вызывается метод PlayerCatch, который реагирует по-разному в зависимости от типа шара. Тогда объект TBall будет иметь виртуальный метод PlayerCatch и все разновидности мяча будут наследниками этого объекта.
punkska
Может ловушку попытаться сделать ОбъетоМ ..тока что наследовать ловушке от шарика я хз=) помогите в этом не лёгком вопросе!
Дож
Цитата
..тока что наследовать ловушке от шарика

Да, нечего наследовать. Но и шарик и ловушка могут иметь одного общего родителя, например, TGameObj, котрый хранит координату на экране и умеет ею манипулировать, внешний вид(в любом виде- цвет, тип формы, спрайт или даже 3D модель, если хочешь), активность(существует ли в данный момент шар или с ним ничего не нужно делать) и т.д.
volvo
punkska, ты мою программу вообще смотрел, или ты думаешь, что я просто так ее делал, чтобы только на форум выложить? :no: Там же наследование один к одному, как Дож говорит ...

Исходники я для чего дал? Для красоты?
punkska
модуль 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
Добавь
{$N+, E+}
самой первой строкой основной программы и перекомпилируй всё (Build All) ...

Ну или menu -> Options -> Compiler -> оба пункта в "Numeric processing" должны быть отмечены...
punkska
С П А С И Б О!!!
а модуль Litt что это за модуль? unsure.gif
Дож
Ассемблерная процедура для установки BGI шрифта.
volvo
Дож,
давай ты будешь отвечать, ТОЛЬКО когда на 100% уверен в том, что ты отвечаешь правильно !!! angry.gif Какая
Цитата
Ассемблерная процедура для установки BGI шрифта
? Это простой LITT.CHR, для удобства (чтобы не таскать за собой постоянно лишний CHR-файл) переконвертированный в OBJ-файл и прилинкованный к программе. Точно так же, кстати, как и EGAVGA.BGI переконвертирован в OBJ...
Дож
Цитата
Это простой LITT.CHR, для удобства (чтобы не таскать за собой постоянно лишний CHR-файл)


Инересно, а какая разница между тем, что таскть- *.bgi или *.obj?
punkska
что то совсем непонятно для чего и что это за файлик.. =(
volvo
Цитата(Дож @ 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, и ...
Цитата
binobj EGAVGA.BGI EGAVGA.OBJ EGAVGADriverProc
, и присоединяем к EXE-шнику:
{$L EGAVGA.OBJ}
Procedure EGAVGADriverProc; External;
Теперь (после компиляции) можно не заботиться о том, чтобы на компьютере, где будет запускаться игра, обязательно присутствовали эти 2 файла, они уже есть внутри EXE... То есть преимущество: ты передаешь получателю 1 файл вместо 3-х, а чем меньше файлов - тем меньше вероятность сбоя программы...
Shura
Вот это уже интересно! Думаю это многим будет полезно! Я, например, не знал... Так а можно любой файл прилинковать?
volvo
Да... Любой файл данных, где-то были даже примеры прилинковки PCX-файлов, с последующим их отображением из программы...
punkska
Спасибо volvo! Ты Суровый Профи !!! :flowers:
Дож
Теперь, понял...
И вправду интересно.
punkska
возкли некоторые вопросы...
Код
{$L EGAVGA.OBJ}
Procedure EGAVGADriverProc; External;
{$L LITT.OBJ}
Procedure LittFontProc; External;


External; ??? это что такое??? объясните...

и что такое cleardevice; я конечно догадываюсб =) но хотелось определение получить!
volvo
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 (очистка графического экрана) ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.