LINUX.ORG.RU

оцените код


1

0

Доброго времени суток.

Понемножку учусь программировать, когда время находится, вот нацарапал клон астероидов.

Хотелось бы услышать конструктивную критику и советы по поводу общей адекватности программы, читаемости кода и т.п.

Собственно, сам код(~1700 строчек, не стал разбивать): http://pastebin.com/Jn6M2ZAi (другой пастбин)

Выглядит у меня это безобразие как то так(vim, lubuntu):
http://a.imageshack.us/img802/7849/201008151605161024x768s.png
http://a.imageshack.us/img405/6287/201008151603291024x768s.png
http://a.imageshack.us/img121/5639/201008151604391024x768s.png



Последнее исправление: ozkriff (всего исправлений: 1)

We are currently upgrading our software, we will return in a few minutes.We are currently upgrading our software, we will return in a few minutes.We are currently upgrading our software, we will return in a few minutes.No database selected

ahonimous
()

Из того, что бросилось в глаза - имена глобальных переменных в верхнем регистре. Вроде как по негласной традиции UPPERCASE имена как правило отводятся под константы и макросы, поэтому для других целей их лучше не использовать.

runtime ★★★★
()

+ к глобальным переменным ниже. Мне лично не нрравится стиль офрмления в котором под '{' отводится отдельная строчка и где возвращаемый тип функции идёт отдельной строчкой. Это всё увеличивает «мусорность» кода для беглого восприятия.

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

Мне лично не нрравится стиль офрмления в котором под '{' отводится отдельная строчка и где возвращаемый тип функции идёт отдельной строчкой.

Это вроде в стиле GNU, по крайней мере в glibc так.

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

2runtime:
спасибо, учту.
Я думал не помешает лишний раз подметить глобальные переменные, т.к. макросов и констант у меня нету здесь практически.

ozkriff
() автор топика

для данной задачи (с учётом объёма кода, сложности задачи и т.п.) ничё так код выглядит, при беглом пролистывании глаз ни за что не зацепился

внешний вид игры, конечно ещё полировать и полировать :)

hint на развитие (если интересно): всегда хотел в такой игре что-нибудь 3-х типов судов - быстрое, мощно стреляющее и с хорошей защитой, ну или статы + прокачку (так даже лучше), сюжетец тоже можно не сильно умный прикрутить (типа спасать личинок космонавтов затерявшихся в звёздных просторах и осевших тут и там), круто будет добавить карту звёздного неба с точками в которых экшн происходит

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

блин, самому что-нибудь такое что-ли наваять под ондроед :)

shty ★★★★★
()

Судя по скрину, программа прожорлива, что странно для такой небольшой проргаммы.
Глобальные переменные - зло.
И да, лучше б это на С++ смотрелось.
Мейкфайла нет, вбивать длинную команду для сборки - дурацкая затея.
А в целом ниче так..

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

Для такого размера проекта глобальные переменные вполне адекватное средство и плюсы будут оверкилом, который только добавит неясности в код.

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


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

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

Сразу писать грамотно нельзя, этому учатся в процессе многих переписываний и рефакторинга своего кода. И что самое интересное, плюсы в этом никак не помогут.

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

>Судя по скрину, программа прожорлива, что странно для такой небольшой проргаммы.

SDL_Delay в main loop можно вставить, чтоб процессор не жрало

Esh ★★★★
()

Код на удивление неплох для новичка, даже не знаю, к чему придраться.

Разве что, в некоторых местах уровень вложенности слишком велик (например, в функции events):

while (...) {
    if (...) {
        switch (...) {
            case ...:
                if (...) {
Стоит подумать о том, как его уменьшить (например, вынести вложенный код в отдельные функции).

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

O.o Терминал lxterminal. Шрифт, вроде, 'Liberation Mono'.

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

>> внешний вид игры, конечно ещё полировать и полировать :)

Я думал оставить простой аскетично-схематичный вид. Это ж астероиды, а не bellethell-shmup. Да и с системой частиц и вспышками, по моему, в движении довольно приятно выглядит.

hint на развитие (если интересно): всегда хотел в такой игре что-нибудь 3-х типов судов - быстрое, мощно стреляющее и с хорошей защитой, ну или статы + прокачку (так даже лучше), сюжетец тоже можно не сильно умный прикрутить (типа спасать личинок космонавтов затерявшихся в звёздных просторах и осевших тут и там), круто будет добавить карту звёздного неба с точками в которых экшн происходит


Разные типы судов сделать, конечно, просто (хотя смотря что подразумевать под защитой корабля) как и прокачку, но для этого уже нужен чуть мене кастрированный гуи, чем пара функций для отображения текста + очень все усложнит вообще.

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

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

Я сейчас думал парочку баблшутеров и простенький варгейм. Тут уже может только TODO(который наверху) сделаю и все.

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

>> Судя по скрину, программа прожорлива, что странно для такой небольшой проргаммы.

Это потому, что я решил не оптимизировать все, а пытаться написать понятный код насколько смогу.
Тут рисование ведется через glBegin(GL_LINES)\glEnd(). Да и я думаю, что дрова для встроенной интеловской видяхи те еще. Как и видяха.
Все объекты хранятся в одном списке(включая частицы, которых может быть до 1000), что сказывается при вложенных циклах .
Память выделяется для каждого объекта и отдается сразу при его смерти(помногу в каждом цикле).

Ну и + это отладочный(-g -pg) режим с генерацией инфы для профилятора на достаточно слабом ноуте.
grpof: http://pastebin.com/33X2KHjv


Глобальные переменные - зло.


Я не знаю как мне тут от них избавиться(без значительного переусложнения кода), если они нужны по всей программе. Разве что get\set'ы писать на 300 строк для всех или разбить на несколько объектных файлов и делать статиками для них. Мне правда очень интересно узнать, как их еще локализовать.


И да, лучше б это на С++ смотрелось.


Программа совсем не большая, да и у меня на cpp аллергия. Я лучше на питоне или лиспе буду писать(переделывая тормозные места на си), если сишную прогу станет невозможно сопровождать из-за сложности, которую сильно уменьшат шаблоны и ооп. А может повезет и oberon внезапно станет популярным(или гугловский go), для него появятся нужные программы под линь и другие платформы, майкрософт разорится.. хотя не будет этого)


Мейкфайла нет, вбивать длинную команду для сборки - дурацкая затея


Makefile есть, только он из той инструкции для gcc и состоит, так что я кинул толко код.
Под виндой .bat'ником для mingw собираю.


Спасибо. :)

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

>> SDL_Delay в main loop можно вставить, чтоб процессор не жрало

Вставлен. В самом низу программы. Ограничение в 60 фпс по умолчанию.
Только я, наверное, что то не так делаю с этим всем(
+ я смутно представляю как логику можно оторвать от фпс, а это бы, наверное, помогло.

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

>> Стоит подумать о том, как его уменьшить (например, вынести вложенный код в отдельные функции).

Это в TODO есть) Я вообще старался больше 78 символов не делать в строке и укорачивать функции строк до 20-25ти.

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

внешний вид игры, конечно ещё полировать и полировать :)

Я думал оставить простой аскетично-схематичный вид.

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

Это ж астероиды, а не bellethell-shmup. Да и с системой частиц и вспышками, по моему, в движении довольно приятно выглядит.

приятно, но не более того и совсем недостаточно, посмотри как сделали Word of Goo - это уже что-то более похожее на нынешние стандарты

>> hint на развитие (если интересно): всегда хотел в такой игре что-нибудь 3-х типов судов - быстрое, мощно стреляющее и с хорошей защитой, ну или статы + прокачку (так даже лучше), сюжетец тоже можно не сильно умный прикрутить (типа спасать личинок космонавтов затерявшихся в звёздных просторах и осевших тут и там), круто будет добавить карту звёздного неба с точками в которых экшн происходит

Разные типы судов сделать, конечно, просто (хотя смотря что подразумевать под защитой корабля)

у Вас сейчас либо корабль либо летает, либо взорвался, можно добавить ему статы на health и рассчитывать частичные столкновения и столкновения с мелкими препятствиями, соответственно добавить статы на shield, в зависимости от которых будет изменяться скорость уменьшения health

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

ja! ja! причём не просто большая карта, а звёздная карта на которой экшна нет, но с которой можно перейти в локальные области где и происходит действо, сделать так, например, как это было сделано в Star Control II (эх, геймерская молодость :))

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

такова реальность и предусматривайте сразу чтобы можно было модельки приклёпывать и скрипты гейм-дизайнерские (на каком-нибудь Lua, к примеру) и, если всё будет по уму, то к Вашему будут присоединяться нужные люди из сообщества и глядишь и получится довольно вменяемая игра

да, это потребует тщательного проектирования :)

и да, запомните, задача программиста в игровых проектах не писать всё ручками, а предоставить возможность гейм-дизайнерам и художникам (не забываем про media всякие - мувики, звуки, музыка) работать используя созданные программистом инструменты :) это если уже совсем серьёзно, но если эта область Вас интересует и если Вы хотите серьёзно двигаться в эту сторону - лучше делайте нормально с самого начала

Я сейчас думал парочку баблшутеров и простенький варгейм.

да тысячи их, и никому не нужны :) не торопитесь наклепать кучу, лучше делайте по одному, но качественно

shty ★★★★★
()

Код не плох, пора перебираться на Bitbucket, Github или т.п.

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

>> да тысячи их, и никому не нужны :) не торопитесь наклепать кучу, лучше делайте по одному, но качественно

После этого файла
http://code.google.com/p/ozkriffs/
http://code.google.com/p/ozkriffs/wiki/screenshots
http://code.google.com/p/ozkriffs/source/browse/#hg/src
я катастрофически боюсь переусложнения программы.
Решил для себя сначала немного набить руку на совсем небольших програмках, пускай никому и не нужны будут. Сделал тетрис и эти астероиды) А код выложил тут, потому что знакомая сказала что читать код тяжело, нифига не понятно, а я как раз наоборот старался же.

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

да тысячи их, и никому не нужны :) не торопитесь наклепать кучу, лучше делайте по одному, но качественно

После этого файла http://code.google.com/p/ozkriffs/ http://code.google.com/p/ozkriffs/wiki/screenshots http://code.google.com/p/ozkriffs/source/browse/#hg/src я катастрофически боюсь переусложнения программы.

хмы, управление сложностью программных продуктов - отдельная большая дисциплина :)

Решил для себя сначала немного набить руку на совсем небольших програмках, пускай никому и не нужны будут.

1 сделал - уже считай набил :) честно

двигайся дальше, но не в ширь, а в глубину, ходя по берегу моря ты не научишься плавать

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

Я сейчас думал парочку баблшутеров и простенький варгейм.

да тысячи их, и никому не нужны :) не торопитесь наклепать кучу, лучше делайте по одному, но качественно

+1. Если делаешь для себя, не рвись сделать много игр, займись одной, продумай её. И, пока, реализовывать будешь, узнаешь много чего нового.

Если не умеешь рисовать, не беда, как сможешь так и нарисуй. Работай над идеей, а помощь с графикой придет как только, получится стоящий проект. Посмотри на первых ежиков, а теперь у этой игы есть свои поклоники по всему миру.

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

Видимо, наши молодые программисты совсем забыли правила грамматики и орфографии русского языка. Печально.

sasha_gav
()

-ansi -pedantic -Wall -Wextra -Werror

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