LINUX.ORG.RU

Мой новогодний тетрис :)


0

0

Смотрю вроде как зима пришла, решил потрясти винт и выложить свою старую зимнюю поделку :) Эт мой первый и последний в жизни ColorTetris в зимнем исполнении(за графику не бить, честно скажу - очень понравилась Santa Hanta :)).

бинарники(1.1Мб) - http://andru.2x4.ru/games/happytrix/happytrix.tar.bz2

Исходный код(41Кб, Win32/Linux, Delphi/FreePascal)- http://andru.2x4.ru/games/happytrix/happytrix_src.7z

ЗЫ: пользователям видеокарт ATI - сколько не шаманил над сырцами двигла, но гарантировать стабильность и скорость пока не могу... хотя на относительно новых видеокартах и дровах все вроде бы ок, и даже на Radeon 9100 удавалось запустить :)

>>> Просмотр (808x627, 52 Kb)

★★★★

Проверено: Pi ()

respect за pascal (: без иронии
да и вообще приятно смотрится.

divenvrsk
()

неделя программистов на ЛОРе :) Надо будет тоже выложить что-нибудь из своего :)

по теме - не фанат паскаля, но за игру зачет - симпатично

lester ★★★★
()
Ответ на: комментарий от divenvrsk

что-то вроде:

if Block[ 1 ].X > l_X * 40 - 40 Then Block[ 1 ].X := l_X * 40 - 40;

или

Text_Draw( rFontM, s_X + ( ( 800 - s_X ) - Text_GetWidth( rFontM, rsbmScore ) ) / 2 + 4, 600 - rSanta.Height - 60, rsbmScore, 1, 0, 155, $000000 );
Text_Draw( rFontM, s_X + ( ( 800 - s_X ) - Text_GetWidth( rFontM, rsbmScore ) ) / 2, 600 - rSanta.Height - 64, rsbmScore, 1, 0, 255, $00FF00 );

?

хотя этот комментарий порадовал :)

//============================================================================= =
// С А М Ы Й Б Е З У М Н Ы Й К У С О К К О Д А
// Н Е И С П О Л Ь З О В А Т Ь П О Д О Б Н Ы Й П О Д Х О Д Н И К О Г Д А :)
//============================================================================= =
// проверка пересичений трех и более шаров

ну и код действительно хорошо оформлен, обычно люди, которые пишут на паскале, про форматирование вообще забывают, тут же все читабельно

lester ★★★★
()
Ответ на: комментарий от lester

есть немного кода который с первого раза сложно понять постороннему, но все обьяснимо :) Там где TexT_Draw, это просто избытки вызова функций в функции, чтоб центрировать/сместить текст, предварительно получая его длину в пикселах 8)

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

ЗЫ: кстати на хомяге есть и сырцы двигла, на соплях которого все это счастье держится :)

Andru ★★★★
() автор топика
Ответ на: комментарий от Andru

да нет - все понятно, код в целом красивый и легко читаемый, просто я имел ввиду, что тут дублирование и кода и вычислений, ИМХО нехорошо :)

lester ★★★★
()

> Тетрис

> гарантировать стабильность и скорость пока не могу... хотя на относительно новых видеокартах и дровах все вроде бы ок,

Это потому что паскаль?

ChALkeR ★★★★★
()
Ответ на: комментарий от ChALkeR

>>Это потому что паскаль?

Нет конечно ) Просто пока не особо освоился с OpenGL под Linux, и видать инит где-то кривой... часто бывает X'ы матюгаются на смену разрешения экрана(юзаю функции XF86*), а был случай игруха просто тормозила безбожно(не, не третрис :) кое-чего другое, но то кажись дело было в большом количестве партиклов с блендом, а карточка старая). Вообщем написал сию фразу т.к. пока на данный момент двиг проходит стадию testing :)

Andru ★★★★
() автор топика

А позволь поинтересоваться, нафига тебе OpenGL для отрисовки двумерной графики?

anonymous
()
Ответ на: комментарий от anonymous

>>А позволь поинтересоваться, нафига тебе OpenGL для отрисовки двумерной графики?

Я понимаю что можно юзать стандартные возможности иксов, но эт издержки двигла(который работает и под вендой с рендерами dx8/gl) + меня посещают жуткие сомнения по поводу возможностей/скорости стандартных функций(все что видел из игрушек не использующих opengl - это что-то довольно простое, без кучи партиклов с альфой, большого количества обьектов произвольно крутящихся и т.д.), т.к. на двиге не только тетрисы пишу :) Да и помимо прочего есть маленькая надстройка аля 3D-плагин, и её работу тоже надо сделать возможной. Вообщем я вполне понимаю что тетрис на OpenGL, это всеравно что вместо кружки пить из ведра, и если какой-либо проект потребует подхода "простенькая картинка; обязательно запустить везде", то попробую освоить новый API. А от показанной поделки этого не требовалось, и она довольно старая и писалась когда-то под венду) щаз просто решил выложить ее под линух :)

Andru ★★★★
() автор топика
Ответ на: комментарий от anonymous

> А позволь поинтересоваться, нафига тебе OpenGL для отрисовки двумерной графики?

Обычная практика в наше время. Легче делается, быстрее работает.

mv ★★★★★
()

музон зачетный :) да и графа порадовала. Оставило исключительно положительные эмоции :)

ferhiord ★★
()
Ответ на: комментарий от mv

> Обычная практика в наше время. Легче делается, быстрее работает.

Нет, не легче. Один SDL_BlitSurface vs. весь набор с проекциями, текстурными координатами и прочим. OpenGL для 2D имеет смысл использовать только если нужен alpha blending и другие эффекты. А использование нормального 2D дает возможность запускать игру на КПК без 3D ускорения и несчастным с кривыми дровами/vesa/svgalib. У меня на старой работе, например, невозможно было играть в crack-attack, даже на минимальной детализации, ибо он OpenGL. Приходилось работать.

По софтине.. ну, симпатично. С Pascal все и так понятно. BTW, почему некоторые снежинки обрезаны?

AMDmi3
()
Ответ на: комментарий от AMDmi3

>>С Pascal все и так понятно

Принцип... С/С++ я владею, просто если пишу чего "для души" то исключительно на паскале :)

>>BTW, почему некоторые снежинки обрезаны?

Скрин делал по PrintScreen и видать не попал в такт с рендером(VSync не включал).

Andru ★★★★
() автор топика
Ответ на: комментарий от Andru

Я, конечно, никогда таких вещей не писал, но всегда думал, что писать их надо на SDL, которая, кажется, ровно для этого и предназначена.

anonymous
()
Ответ на: комментарий от anonymous

>>Я, конечно, никогда таких вещей не писал, но всегда думал, что писать их надо на SDL, которая, кажется, ровно для этого и предназначена.

Когда пишешь "для себя", то в большинстве случаев просто интересно разобраться с внутренностями того API на котором пишешь, нежели изучать SDL и ему подобные либы. Хотя в данном случаи я использовал свои наработки, сделав порт под Linux :) Как говориться - своё роднее)

Andru ★★★★
() автор топика
Ответ на: комментарий от anonymous

врядли это поможет компиляцией исходников... нужны нормальные дрова. Если и компилить, то нужно двиг - http://andru.2x4.ru/omega/omegalinux_src.tar.bz2, он отвечает за вывод графики и т.д.

Andru ★★★★
() автор топика
Ответ на: комментарий от anonymous

> 4.1

OMG это ж 2002 год! Срочно обновляться! Тут да, наверное и перекомпиляция не поможет...

anonymous
()
Ответ на: комментарий от anonymous

>>> кстати Mesa какой версии?

>>4.1

У вас какой давности линукс стоит? 8) Вырезка с офф сайте месы:

>>October 29, 2002, Mesa 4.1 has been released.

Ну а в апреле 2004 какую-то багу решили :) - fixed glOrtho bug found with gcc 3.2.2 (RH9)

Просто по логу ошибки игруля не может найти нужную функцию glOrtho в стандартной либе GLU...

Andru ★★★★
() автор топика
Ответ на: комментарий от Andru

> У вас какой давности линукс стоит? 8) Вырезка с офф сайте месы:

Ну так эта меса с XFree 4.4 идет.

А может можно как-то без этой функции обойтись?

anonymous
()

Может кто статически соберет?

anonymous
()
Ответ на: комментарий от anonymous

>>Ну кто-нибудь помогите бедному анонимусу, а то очень поиграть хочецца

хм, попробовал пересобрать so-шку рендера без либы GLU, вот файлег: http://andru.2x4.ru/tmp/libomega.so.tar.bz2 (475Кб, увы так много т.к. к либе подключено довольно много костылей плюс FreePascal вносит свою лепту :) Сейчас переписываю много чего, и новые сборки уже будут весить на порядок меньше)

ЗЫ: если эта либа не поможет, то я уже незнаю чего можно еще сделать как кроме обновиться. Кстати, а хоть малейшее ускорение на карточке есть? 8) А то ща если запуститься, а в системе голое 2Д еле-еле дышит, то вряд ли игра будет идти с приемлемым уровнем смены кадров.

Andru ★★★★
() автор топика

не могу играть, запустилось в полноекранном - надал на OPtions - повисло.. прописал в окне чтоб пускалось - ошибка An unhandled exception occurred at $B778A9E3 : EDivByZero : Division by zero $B778A9E3 $B7713F7B $B7714453

baltazor
()
Ответ на: комментарий от baltazor

>>не могу играть, запустилось в полноекранном - надал на OPtions - повисло.. прописал в окне чтоб пускалось - ошибка An unhandled exception occurred at $B778A9E3 : EDivByZero : Division by zero $B778A9E3 $B7713F7B $B7714453

хм, это все что пишется в консоли? А что в Log.htm есть(напиши то что до загрузки текстур следует(если конечно они вообще начали загружаться))? Ну и желательно узнать какая система, платформа x86/x86_64, видуха и дрова :) Хотя зависания в меню опций врядли к жлезу относиться... да и запуск в окне вродь тож ничем таким не должен выделятся, а какая DE?

Andru ★★★★
() автор топика
Ответ на: комментарий от Andru

Ubuntu 7.10
XFCE4
Intel i915 видео
х86
из лога
[00000079ms]engine: Start in windowed mode: 800 x 600 x 32
[00000101ms]engine: ### XF86VidModeQueryVersion v.2.2
[00000102ms]engine: ### XF86VidModeGetAllModeLines count = 7
[00000103ms]engine: ### Current Resolution = 1280x800
[00000104ms]engine: ### Current Dir = /home/miroslav/games/happytrix/
[00000104ms]engine: Successful creating of window:
[00000113ms]engine: Successful initializing of OpenGL
[00000175ms]engine: ### Mode to set = 1280x800[0]
[00000222ms]engine: GL_VERSION: 1.3 Mesa 7.0.1
[00000223ms]engine: GL_VENDOR: Tungsten Graphics, Inc
[00000223ms]engine: GL_RENDERER: Mesa DRI Intel(R) 915GM 20061017 x86/MMX/SSE2
[00000224ms]engine: GL_DIRECT_RENDER: TRUE
[00000225ms]engine: GL_ARB_texture_compression: TRUE
[00000226ms]engine: GL_EXT_bgra: TRUE
[00000227ms]engine: GL_MAX_TEXTURE_SIZE: 2048 x 2048
[00000228ms]engine: GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: 2

baltazor
()

Красотяяя... Жаль только что слинковано с alsasound. Пришлось ставить alsa-lib и alsa-plugins и заворачивать вывод в pcm.oss. Кстати я так и не понял логику удаления шариков, кроме принципа "цвет-к-цвету".

Stiletto
()
Ответ на: комментарий от Andru

> Просто пока не особо освоился с OpenGL под Linux

И чего только люди не делают, дабы не использовать готовые движки. Чем не угодил для этой игры SDL? Понадобилось аппаратное ускорение? Так возьмите врапер glSDL от David Olofson - http://olofson.net/

anonymous
()
Ответ на: комментарий от Andru

> хм, попробовал пересобрать so-шку рендера без либы GLU, вот файлег: http://andru.2x4.ru/tmp/libomega.so.tar.bz2

Не помогло, у этой библиотеке даже размер такойже как у той что был в архиве. Ускорение есть. Может ее вместе с GLU статикой собрать?

anonymous
()
Ответ на: комментарий от anonymous

>>И чего только люди не делают, дабы не использовать готовые движки. Чем не угодил для этой игры SDL? Понадобилось аппаратное ускорение? Так возьмите врапер glSDL от David Olofson - http://olofson.net/

чукча... брр... анонимус не читатель, анонимус писатель? 8) Я вроде пару постами чуть ниже объяснил почему не использую SDL. Для вас личное пояснение дам:

Я отлично знаю OpenGL, правда под Linux есть еще некоторые трудности с инитом. Игра использует собственный движок, который работает и под вендой на рендерах dx8/gl, в нем есть все что мне надо и является очень удобным :) SDL - хороший врапер над API, но таскать его ради инициализации и пр. с собой я не намерян, т.к. пишу "для души" и разберусь со всем лучше сам, а для остальных целей он мне не катит - привык к своим надстройкам. Плюс он написан на C++, я же пишу на FreePascal, и SDL для меня не труЪ(если уже язвить красноглазием :)) Понимаю если бы я писал коммерческий проект, и мне потребовалось уложится в сроки и т.д., тогда бы возможно выбор был бы SDL, т.к. своя поделка еще не готова. Но пока выгодные для кошелька игры, делаю только для вантузов.

>>Да и ещё: а что это за музыка?

>>Stiletto (*) (20.12.2007 18:19:21)

Музыку взял на сайте прекрасного трекерного сообщества modarchive.org :)

>>baltazor * (*) (20.12.2007 17:01:59)

Даж незнаю чего скзаать... а точно в Settings.ini было вписано FullScreen = false, а не FullScreen = 0? :)

Andru ★★★★
() автор топика
Ответ на: комментарий от anonymous

>>Не помогло, у этой библиотеке даже размер такойже как у той что был в архиве. Ускорение есть. Может ее вместе с GLU статикой собрать?

Да, размер получился тот-же, но я впринципе выкинул только использование функции gluOrtho2D, и заменил ее на glOrtho, которая находиться в libGL.so. И сейчас libGLU.so даже не используется, т.е. сборка статически не поможет... А ошибка точно таже осталась? Просто только ща задумался почему поиск функции glOrtho идет в libGLU, а не в libGL... видать выход один - обновиться дистрибутивом, или Mes'ой. А я уже что-то закачивать не могу - трафик кончился...

Andru ★★★★
() автор топика
Ответ на: комментарий от Andru

Ошибка: ./Happytrix: symbol lookup error: /usr/X11R6/lib/libGLU.so.1: undefined symbol: glOrtho

anonymous
()

Молодец! Респект!

Даже и не знаю, пробовать или нет. Всё-таки для неё придётся FreePascal ставить. Жаль, что она не на С/С++.

php-coder ★★★★★
()
Ответ на: комментарий от Andru

>>Andru завелось после удаления и распаковки поновой игры... хз че произошло там, но видать после первого зависания что-то не так пошло как нада.. игруха рулез!!!!

baltazor
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.