Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ Игруха! (нужна модификация)

Автор: punkska 10.06.2005 20:45

Игра: c верхней части экрана падают шары. Управляя ловушкой, игрок должен собрать как можно больше шаров за одну минуту. С течением времени плотность падения шаров уменьшиться, а скорость увеличивается. По истечении времени (1 мин.) на экран выводиться колво пойманных шаров.10 лучших храняться в файле и выводятся на экран по запросу пользователя.

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

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

игра ниже!


Прикрепленные файлы
Прикрепленный файл  trap.rar ( 22.34 килобайт ) Кол-во скачиваний: 299

Автор: virt 11.06.2005 1:36

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

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

ЗЫ2
все ясно из-за чего.


Прикрепленные файлы
Прикрепленный файл  objOrient.rar ( 3.75 килобайт ) Кол-во скачиваний: 218

Автор: volvo 11.06.2005 2:12

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

blink.gif А конструкторы где?
Читай здесь: http://forum.pascal.net.ru/index.php?showtopic=2085&view=findpost&p=17920

Автор: punkska 2.09.2005 0:36

unsure.gif выручайте!!! горит!!!

Автор: volvo 10.09.2005 5:09

Цитата(punkska @ 10.06.05 16:45)
Игра: c верхней части экрана падают шары. Управляя ловушкой, игрок должен собрать как можно больше шаров за одну минуту. С течением времени плотность падения шаров уменьшиться, а скорость увеличивается. По истечении времени (1 мин.) на экран выводиться колво пойманных шаров. 10 лучших храняться в файле и выводятся на экран по запросу пользователя.


Вот она же, только немного с другим оформлением, и с объектами...


Прикрепленные файлы
Прикрепленный файл  trap.rar ( 27.78 килобайт ) Кол-во скачиваний: 224

Автор: punkska 12.09.2005 15:40

Огромное спасибо!!!!! :rose:

Вот посмотрите эту же игру...
помогите в ней создать наследование... что-то не как не получаеться=(((


Прикрепленные файлы
Прикрепленный файл  CreateTableOfChampions.PAS ( 569 байт ) Кол-во скачиваний: 293

Автор: Volvo as guest 12.09.2005 15:58

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

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

Автор: punkska 12.09.2005 16:04

я не то отправил!!!


Прикрепленные файлы
Прикрепленный файл  Program.PAS ( 10.87 килобайт ) Кол-во скачиваний: 281

Автор: Дож 12.09.2005 21:22

lol.gif lol.gif lol.gif lol.gif lol.gif

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


Думаю, что здесь и вправду лишнее нагромождение проги(я про 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 что это за модуль? unsure.gif

Автор: Дож 13.09.2005 23:22

Ассемблерная процедура для установки BGI шрифта.

Автор: volvo 13.09.2005 23:35

Дож,
давай ты будешь отвечать, ТОЛЬКО когда на 100% уверен в том, что ты отвечаешь правильно !!! angry.gif Какая

Цитата
Ассемблерная процедура для установки 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, и ...
Цитата
binobj EGAVGA.BGI EGAVGA.OBJ EGAVGADriverProc
, и присоединяем к EXE-шнику:
{$L EGAVGA.OBJ}
Procedure EGAVGADriverProc; External;
Теперь (после компиляции) можно не заботиться о том, чтобы на компьютере, где будет запускаться игра, обязательно присутствовали эти 2 файла, они уже есть внутри EXE... То есть преимущество: ты передаешь получателю 1 файл вместо 3-х, а чем меньше файлов - тем меньше вероятность сбоя программы...

Автор: Shura 16.09.2005 2:19

Вот это уже интересно! Думаю это многим будет полезно! Я, например, не знал... Так а можно любой файл прилинковать?

Автор: volvo 16.09.2005 2:37

Да... Любой файл данных, где-то были даже примеры прилинковки PCX-файлов, с последующим их отображением из программы...

Автор: punkska 16.09.2005 23:12

Спасибо volvo! Ты Суровый Профи !!! :flowers:

Автор: Дож 17.09.2005 0:22

Теперь, понял...
И вправду интересно.

Автор: punkska 17.09.2005 1:36

возкли некоторые вопросы...

Код
{$L EGAVGA.OBJ}
Procedure EGAVGADriverProc; External;
{$L LITT.OBJ}
Procedure LittFontProc; External;


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

и что такое 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 (очистка графического экрана) ...