Как напсать online игру используя SDL

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

И так суть вопроса.
Захотелось мне побаловаться программированием (с программированием я знаком, хотя я явно не мега кодер :)), в свое время писал оконные интерфейсы для ZX-Spectrum на Spectrum BASIC, на IBM уже баловался только HTML ну и естественно PHP и SQL.

Сейчас хочу написать небольшую браузерную игру просто для побаловаться думаю на чем это лучше сделать.
Флеш мне не интересен, и мне стало интересно а можно сделать что либо на питорне например.

Собственно задумка примерно такая SQL база на сервере хранит данные о пользователе и его "имуществе" в игровом мирке, человек с помощью браузера запускает программу вывод которой происходит прямо в окне браузера. Программа конектится к скульной базе и работает с данными пользователя + если в игровом мире появляется ещё один человек то управляемые людьми объекты должны друг друга видеть и реагировать на друг друга. Управление объектами пока не продумал либо стрелки клавы, либо мышка, либо и то и другое (скорее третье).

Повторю собственно вопрос: можно ли такое организовать на питоне, насколько это оправданно? Или может есть альтернативы для подобных задумок, пните меня куданить по доброму :) Заранее спасибо.

В итоге решил писать клиент сервер с помощью SDL.....

NightNord: перенесено в Сообщество->Общение, ибо к Gentoo Linux отношения никакого ;)

Пинаю по злому: "здешним",

Пинаю по злому: "здешним", запятые и огромное количество опечаток ;) Программирование это круто, но русский язык тоже не плох.

Я не люблю питон, поэтому о его применимости ничего сказать не могу. Если вы хотите сделать "перманентное соединие" (ака "AJAX Comet"), вам, скорее всего, потребуется распараллеливание задачи.

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

Разработайте протокол (можно воспольватся и http, если лень придумывать, например по GET / получать данные обозначенные , однако, это будет лишняя нагрузка. Лучше сделать бинарный интерфейс так, чтобы он легко трансировался в язык разработки) взаимодейтсвия. Ну а потом клиент/сервер и все. Учитывая существование библиотек типа QT/wxWidgets, разработка графического функционала аналогичного броузеру не займет много времени, в качестве скриптового языка, если таковой понадобится, используйте lua.

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

Советую почитать про Erlang, для написания сервера и бинарных протоколов - идеальный язык. С клиентской частью немного посложнее (хотя щас там есть биндинги в wxWidgets), но взаимодействие с другими языками там тоже очень просто реализуется.

:) Ну простите меня за мой

:) Ну простите меня за мой жуткий русский. А за советы спасибо. Признаюсь честно, я побаиваюсь браться за что то более глобальное чем браузер. Сейчас у меня в голове жутко примитивный проект который возможно разовьется во что то более серьёзное. Пока думаю о браузере. Если говорить о стороних приложениях то мне более симпатичен GTK но тут я упираюсь в мультиплатформеность. Хочется чтобы можно было запускать приложение и в выньдовсе и в Linux сам я давно не работаю на Windows но таких как я по пальцам пересчитать можно. А браузер это уже в какой-то мере пультиплатформеность.

Ну... Проблема в том, что

Ну... Проблема в том, что "браузер" понятие очень расплывчатое =). То что вы хотите делать, включая управление кнопками с клавиатуры (кстати, очень неудобно когда у вас фокус теряется), идет на гране возможностей JavaScript, что гарантирует вам огромную кучу геммороя по поддержке работоспобности всего этого на различных браузерах.

Так что вам все равно придется смотреть в сторону flash (гадость, да) или java (не лучше, имхо). А если использовать flash или java, то какбы браузер становится лишним.

Мультиплатформенность - ну, во-первых, GTK можно установить на винду через цигвин. Во вторых есть мультиплатформенные QT/wxWidgets (второе основно на GTK, только ООП, как QT), которые более высоко-уровневые нежели GTK, что еще больше упрощает разработку графических приложений.

Если хочется начать с малого (что, вообще говоря, правильно), то можете пока не думать о кроссплатформенности вообще - проекту бы еще дожить до юзабельного состояния стоит ;) Скорее всего все равно будете переписывать с нуля, если захватит.
Графических движков - вагон, вам нужно только данные с сервера получать. Для начала сделайте простой последовательный текстовый протокол - подумайте какие запросы клиент может делать к серверу и какие ответы получать. Предположим, вы делаете текстовый квест на подобние древшейних и у вас есть комманды к серверу:
LIST - получить список объектов в комнате, и ITEMS - список объектов в инвентаре, ответ в виде

START_LIST
ITEM <Id>
ITEM <Id>
...
END_LIST

TAKE <Id> - переместить объект в инвентарь, ответ в виде OK или ERROR <Reason>, где Reason - описание (тектовое), почему не получилось (например "прикручено")
INFO <Id> - описание объекта, ответ в виде INFO <Description>
MARK <Id> - пометить объект в инвентаре для использования - ответ OK
USE <Id> - "использовать" объект в комнате/инвентаре, ответ как в TAKE <Id>
APPLY <Id> - "использовать" помеченный объект на объекте в комнате/инвентаре с идентификатором , ответ как в TAKE <Id>

Переход из комнаты в комнату осуществляется при помощи "использования" дверей/проемов и т.п. Сервер может генерировать свои события при помощи
EVENT <Desciption> - в т.ч. для информирования клиента о "переходе" (может быть не пользовательски-активированным).

Данного протокола, вроде как, достаточно для примитивного квеста. Взаимодействие с другими игроками аналогично объектам, оповещение об их действиях через EVENT (стрелялку так тоже можно сделать, но сложно =)).

Подключение к серверу, предположим, для начала по сокету. Читаете сокет с двух сторон при помощи getline, берете первое слово - это комманда. Внутренняя организация - FSM (машина конечных состояний). Интерфейс клиента текстовый. Потом можете добавить 2д графики, потом 3д, ну и так далее.

Спасибо, за поддержку, я

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

Я решился попробовать силы с wxWidgets сейчас читаю информацию по нему, пытаюсь вникнуть с чего начать. Конкретнее какие пакеты поставить и как организовать работу. Думаю что об обмене данными с сервером мне пока рановато думать, нужно понять азы языка принцип программирования на нем. Признаюсь честно что я никогда не компилировал свои программы. У меня есть ряд вопросов если не лень разъясните. Несомненно ответы у гула есть но они чересчур развернутые.

1- что нужно поставить
2- что почитать чтобы написать 'Hello wold' (можно даже в двух словах)
3- что почитать чтобы понять процесс отладки и компиляции

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

Сейчас цель согласно карте создать 2D бродилку. В основе, карта некоторого размера. По карте перемешается объект при помощи клавиш и при приближении к некоторым объектам происходит действие. Потом буду усложнять.

Тогда да, разговор надо

Тогда да, разговор надо начинать с клиента, а не с сервера. Собсно мультиплеер (и сервер, как таковой), в таком случае отходят на второй план.

Впрочем, для 2д игрушки QT/wxWidgets, которые являются GUI-библиотеками общего назначения (кнопкорисовалками, иными словами), не нужны, ибо вам нужна библиотека 2д графики, а функционал этих MVC-монстров излишен. Рекомендую обратить свой взор на превосходную библиотеку 2д-графики SDL. По ней можно найти уйму статей, документации и прочих советов, наверное есть и книги хорошие.

Язык разработки? Наверное, если вы вообще никогда не компилировали ничего, то для общего ознакомления лучше начать с C (ну, или, в крайнем случае с C++, но начать программировать на C++ без толкового знания C - кратчайший путь к быдлокоду, имхо =)), по которому обучающего материала еще больший вагон, в т.ч. применительно к библиотекам SDL или геймдеву как направлению. Даже если игрушку не напишите, знание языка, на котором, фактически, написаны все прочие языки, никогда не будет лишним.

С чего начать? Вне всякого сомнения, сначала надо выбрать инструментарий. Если вы привыкли к какому-то "продвинутому" редактору типа vim/emacs - вполне достаточно, в связке со screen очень удобно. Для автоматизации сборки можно воспользоватся Makefile'ами, либо просто написать скрипт на bash'e. Следующий уровень - autotools/cmake - их знание тоже никогда не будет лишним, особенно в контексте генты. Если вам GUI ближе по духу, обратите внимание на Eclipse, Netbeans, Code::Blocks (для первых двух поддержка различных языков, кроме Java, делается доустановкой плагинов, емнип), посмотрите, что вам больше нравится. Все три весьма не простые, однако, как показывает статистика, выбрать "самый простой" не получается - для разных людей по разному. Есть еще Kdevelop* - но он по жизни был глючным, а в связи с переходом на KDE4, так и тем более (ну и есть клон MSVS7 - anjuta вроде, убожество страшное, имхо. Код::Блокс смотрит в туже сторону, но намного адекватнее).

Книжек тыща. Идете в книжный магазин, где можно почитать книжки и смотрите что вам кажется более понятным, нужно-направленным (по геймдеву, к примеру, все больше какие-то курсы вождения мышкой в условиях MSVS или DirectX) и т.п. Если хорошо знаете английский - посмотрите, что продается на Amazon'e/O'Reilly. Книги O'Reilly (имхо, одни из лучших) переводит наше издательство "Символ", но, обычно, с большим опозданием (если вообще переводит). Книги наших авторов тоже бывают очень даже ничего, но они, обычно, еще более однобокие на винду.

Процесс отладки и компиляции... Ну какбе... С компиляцией разобратся очень просто - примитивное использование gcc, в случае C, а для скриптовых так и вообще все просто.

Отладка - в GUI IDE есть свои дебаггеры, впрочем, в случае C, рекомендую обратить свой взор на ядро. Там есть целый набор очень и очень удобных макросов, вроде BUG_ON/BUG, printk и т.п. Но вообще отладка очень сильно зависит от языка. На Erlang'е, например, типичный для C-подобных языков deffensive подход, когда программист пытается предусмотреть и обработать все возможные ошибки (например напечатать ошибку и вывалится, а не пропустить её и помереть через пол-года в segfault, так что потом вообще не понятно откуда пришел неправильный указатель или еще какая пакость из этого рода), является не правильным. Там как раз наоборот - программа должна проверять только те значения, которые хочет получить (это может быть не только успех, а, в случае открытия файла, к примеру, и ошибка о том, что файла не существует, а все прочие ошибки уже не интерестны), в противном случае процесс умирает с bad match в том месте, где ошибка произошла, генерируя трейс до этого места. Вообщем обычно в книгах по языкам отладке уделяется не меньше внимания, чем остальному, ибо она занимает хорошо если не большую часть времени.

А вообще подобный проект надо начинать с проектирования (правда, как обычно, ни один генеральный план не выдерживает прямого столкновения с полем боя, но все же), а именно, продумать какие объекты у вас могут быть, как они друг к другу относятся, как реализовать взаимодествие с пользователем, события, структуру кода и программы, какие математические операции вам понадобятся (вроде матричных), как их реализвовать и т.п... Почитайте про MVC-паттерн (он вообще очень и очень распространен и есть генерально хорошая идея), для игрушек весьма неплох. Если что, заходите на конференцию, там можно пообщатся конкретно (правда, наверное, надо будет сделать отдельную конфу для программинга ;))

P.S. Тут много букафф получилось, писал я это долго и с перерывами, так что за обрывы мысли, если таковые наличествуют и прочие ляпы в повествовании, не пинайте особо =).

И правда буков много :)

И правда буков много :)

У меня даже мозг закипел немного :)
Учитывая что я сейчас понял что я нифига не понимаю в программировании, я вообще в тупике.
Еще пару глупых вопросов задам и буду дальше искать литературу. Насчет O'Reilly полностью согласен мне они тоже очень нравятся. Но если говорить в общем то толковой литературы очень мало ИМХО.

Насчет вопросов я правильно понимаю сам процесс разработки приложений или нет?

- Берем чистый текстовый документ открываем любым редактором и начинаем писать исходник на С или С++ к примеру. В момент написания кода можно подключать разные инструментарии, например подключить библиотеку SDL и в коде на С вызывать какие либо функции из SDL.

- Инструменты разработки на вроде QT/wxWidgets предоставляют кучу функций и программирование в них скорее похоже на программирование от обратного сначала рисуем окно потом закладываем описание функционала на том же С для каждого элемента: кнопки, окна и т.д. (Или я это уже с IDE путаю)

когда я писал на ZX приходилось писать подпрограммы для отрисовки спрайтов подпрограммы для отрисовки окон и прочих графических объектов, подпрограммы для управления и т.д. все эти подпрограммы находились в одном листинге с основным программным кодом и вызывались как правило по GO-TO 1020.

Теперь есть набор разных библиотек которые выполняют роль тех моих подпрограмм на BASIC и получается если я хочу отрисовать окно то в коде программы я вызываю функцию библиотек GTK+ например, и передаю ей какие либо значения а функция отрисовывает что умеет. Запускать программу я могу как исходник но работать будет медленно естественно для решения этой проблемы я компилирую код в итоге получаю один бинарник но чтобы он работал в системе должны быть библиотеки которыми я пользовался когда его писал. Я хоть примерно правильно понимаю как это все работает? :(

P.S.
Насчет быдлокода, можно дать краткое описание :) я как бы понимаю что это некрасивый не правильный или не стандартный код но может тут что то более сложное имеется ввиду?

Да нет, имхо, толковых книг

Да нет, имхо, толковых книг очень много, особенно по распространненным языкам. В этом-то вся и проблема. Хотя я вообще почти никаких книг не читал, так что это требование не обязательное. В C, к примеру, главное понимать суть работы с памятью, чтобы не делать ляпов с указателями. Всякие приемы можно подсмотреть в ядре или в nginx - тоже очень качественное C-приложение. Для C++ - QT или wxWidgets, очень агрессивно использующие ООП и шаблоны. Т.е. если вы думаете что-то сделать, но не знаете как - подсматривайте в другой программе, как самый простой вариант. Это не всегда будет эффективно, в плане того, что может можно сделать вообще иначе и еще лучше, но это уже следующий этап =)

Цитата:
- Берем чистый текстовый документ открываем любым редактором и начинаем писать исходник на С или С++ к примеру. В момент написания кода можно подключать разные инструментарии, например подключить библиотеку SDL и в коде на С вызывать какие либо функции из SDL.

Да, так. Ну разве что с терминологией: подключаются хеадеры библиотек (приминительно к C[++]), а сами библиотеки "подключатся" компилятором. Но это, вообщем-то, не суть важно

Цитата:
Инструменты разработки на вроде QT/wxWidgets предоставляют кучу функций и программирование в них скорее похоже на программирование от обратного сначала рисуем окно потом закладываем описание функционала на том же С для каждого элемента: кнопки, окна и т.д. (Или я это уже с IDE путаю)

QT/wxWidgets - это библиотеки C++. Вообще говоря рисовать формочки в них можно и без всяких GUI приложений (на них можно даже не GUI делать, но, имхо, это разврат). У QT есть какая-то своя программка, которая позволяет нарисовать формочку мышкой, но она делает C++ исходник только этой формочки, а саму инфраструктуру и все рабочие классы писать все равно надо руками =).

Цитата:
Теперь есть набор разных библиотек которые выполняют роль тех моих подпрограмм на BASIC и получается если я хочу отрисовать окно то в коде программы я вызываю функцию библиотек GTK+ например, и передаю ей какие либо значения а функция отрисовывает что умеет.

Для C - да, библиотека - это набор подпрограмм. Для C++ это еще и набор классов/шаблонов. Тут все довольно просто понять. Когда вы компилируете (вообще говоря, правильный термин - "транслируете") исходный файл получается объектный код - это, грубо говоря, набор комманд процессора в синтаксисе понятном операционной системой (в нашем случае - ELF). Каждый исходный файл, вообще говоря, компилируется отдельно, и он не знает о существовании "внешних" объектных файлов. Подключаемые заголовочные файлы обычно содержат лишь объявления, т.е. указания какие функции бывают, без конкретного кода, чтобы компилятор мог определить вызов какой-то функции как "вызов во вне".

Чтобы получить программу объектные файлы надо объединить в один файл, грубо говоря. Этим занимается линкер (*ld), которому, в качестве аргументов, передаются библиотеки которые надо "залинковать". Он проходит по каждому файлу, ищет "внешние вызовы" и, если это вызовы к функции из той же программы, просто в другом объектом файле, заменяет на получившийся указатель этой вызываемой функции внутри уже готовой программы, либо, если это вызов функции из библиотеки, он смотрит на то, какая это библиотека.

Библиотеки бывают статическими и динамическими. Статические библиотеки (у нас .a) можно рассматривать как архив (по сути так оно и есть) скомпилированных (и слинкованных с другими статическими, но не динамическими, библиотеками) объектных файлов. Когда линкер видит такую библиотеку, он просто вытаскивает нужный объектный файл, из него выдирает нужную функцию и вставляет в линкуемую программу, как будто, если бы вы сами взяли и скопипастили ее из кода библиотеки. Такой подход хорош тем, что программа получается полностью автономной - т.е. все нужные ей фунции лежат в ней самой, однако сильно жрет место и память (вся программа загружается в память, если у вас сотня программ, которая использует одни и те же функции из статической библиотеки, они все загружают их в свою память отдельно, хотя они и одни и теже).

Динамические библиотеки подгружаются (.so) в момент исполнения в свою память, и одна загруженная в память библиотека может быть использованна несколькими загруженными программами - экономия места и памяти. Линкер, в случае динамических библиотек, просто прописывает "ссылку" на эту библиотеку, указывая операционной системе, откуда надо брать вызовы функций. Однако, в таком случае, в момент запуска программы библиотека "слинкованной" версии должна быть в системе, причем даже ее наличие не гарантирует работоспособности - некоторые библиотеки меняют API без изменения т.н. so-name (версии lib<name>.so.<major>.<middle>.<minor>), что приводит к странным сообщениям о missing symbol, при попытке запуска (операционная система не нашла такой функции в указанных библиотеках). Собсно любой достаточно опытный гентушник очень хорошо знаком с ситуацией битых линков на библиотеки =).

Цитата:
Запускать программу я могу как исходник но работать будет медленно естественно для решения этой проблемы я компилирую код в итоге получаю один бинарник но чтобы он работал в системе должны быть библиотеки которыми я пользовался когда его писал. Я хоть примерно правильно понимаю как это все работает? :(

Не совсем. Языки бывают компилируемые и интерпретируемые. Первые надо сначала скомпилировать (и слинковать, однако обычно это опускают, понимая под "компиляцией" процесс получания исполняемого файла (как я уже говорил, правильный термин для получения объектных файлов - трансляция, но уж так сложилось)) целиком, и только потом запускать. Вторые какбы "компилируют" читаемую программу строка за строкой, сразу же выполняя полученный код (грубо говоря). Еще есть языки с виртуальной машиной (Erlang, Java, Python) - они сначала компилируют программу в т.н. "байт-код", т.е. машинно-независимый бинарный код, понимаемый из вируальной машиной, которая, уже выполняя программу, интерпритирует данный бинарный код в машинный код.

Есть мнение, что виртуальные машины - суть зло и мало отличаются по скорости от интерпретируемых языков. Сие не есть правда, ибо существует как минимум два типа - stack-based и registy-based. Python - stack-based и потому медленный, Java и Erlang - registy-based и потому быстрые. Другой миф, особенно про Java, что в некоторых случаях она может быть "быстрее С". Не может быть, ибо она написана на C, а любой overhead всяких автоматических управлений памятью, динамических конструкций и garbage collection, безусловно, скорости не добавляет. Можно говорить о том, что одинаково квалифицированный код сделанный за одинаковое время на Java/Erlang для определенного круга задач может работать быстрее чем на C. Но это только потому, что реализация некоторых вещей, которые эффективны в данной задаче и идут в упомянутых языках "из коробки", на C (в случае Erlang, например, легкой многопоточности), потребует намного большего времени и квалификации. Однако устремить "квалифицированность" программистов к бесконечности в обоих случаях (если считать, что с повышением квалификации время на разработку уменьшается), то за любой промежуток времени программа на C будет работать быстрее (причем значительно)

Цитата:
Насчет быдлокода, можно дать краткое описание :) я как бы понимаю что это некрасивый не правильный или не стандартный код но может тут что то более сложное имеется ввиду?

Да, это (любое из перечисленных) код, который:
а) Не красивый - без отступов, или с корявыми отступами, без четко выраженного стиля, и т.п.
б) Не корректный - делает что-то так, как это делать не нужно (есть примеры на лурке, например bool.toString() == "true" на каком-то языке (C# вроде, да будь он проклят =))). Обычно из-за недостаточного понимания механизов работы языка или конструкций языка.
в) Не стандартный - ну, почти всегда, да, потому что, обычно, не соблюдение стандартов ввиду того, что "по стандарту не получается", свидетельствует о низкой квалификации программиста или недостатке времени на разбирательство, получается см. пункт (б).
г) Плохо структурированный - когда нет четкой логики программы, а наляпано все как наляпалось, вроде работает, но фиг поймешь как. Обычно включает в себя пункт (б). Сюда же входят копипасты кода вместо выделения его в функции, includ'ы исходных файлов в C (кроме случая с шаблонами в C++) и прочая. Сюда же применение goto где его не стоит применять (в C он часто используется для выхода из функции по ошибке, с выполнением некоторых "завершающих" действий, вроде деинициализации каких-нибудь структур, что есть грамотное (и, практически, общепринятое) его использование), ибо скакать по коду пытаясь отследить куда и что пошло в каких случаях очень неприятно.

Ну а вообще быдлокод сложно описать. Обычно когда на него натыкаешься, сразу понятно, что это он =)

P.S. Это не у меня количество букв возрастает, это пост вправо сползает ;)

Интересно было бы сделать

Интересно было бы сделать игру без СУБД вообще - :) PHP и файлы. Это может вас шокировать, но именно так начал свой путь Бойцовский клуб, и довольно успешно. Хотя в любом случае пик популярности браузерных - текстовых, флешевых и т.д. игр - закончился пару лет назад, т.е. игру-то вы сделаете, а играть в нее, вероятно, никто не будет. Поэтому удовольствия только ради.

Дабы сместить пост в лево и

Дабы сместить пост в лево и выразить в очередной раз благодарность :)
Буду пробовать кодить :) Кстати склонность к быдло коду у меня есть :( это я анализирую свои PHP скрипты говорю.

Право не знаю стоит ли писать

Право не знаю стоит ли писать что браузерная идея меня уже не сильно интересует или нет...

После некоторого времени поисков и чтения получилось создать нечто что собственно можно скачать по ссылке ниже, может кто заценит и поругает :)

Я не совсем понял почему кушает так много памяти, это из-за того что грузится SDL или просто глупо построен код.
В файле ingame.h там где описана куча функций половина естественно не нужного, просто я взял то что назвали движком расписали его тоже неплохо мне понравилось. Немного докрутл и собственно получил что получил.

Так как хочу сделать именно клиент серверное приложение то интересно как наладить взаимодействие с полученным результатом и базой на скуле на соседнем сервере. Так чтобы клиентская часть просто изменяла что то в базе и отображала то что считывала из неё.

Сам я в поиски подался но если кто пояснит немного принципы буду благодарен. Если кому интересно то задумка сделать что-то вроде этого

P.S.
Насчет быдло кода может сделаете замечание, думаю он присутствует, хотя может и не прав
И может кто подскажет как из 1503 The New World вытащить спрайты кораблей? или где найти красивые кораблики, в идеале их бы самому нарисовать ноя не умею рисовать :(.
Управление корабликом:
y - спустить паруса (два нажатия две скорости)
h - поднять паруса
g - лево руля
j - право руля
escape - выход

Результат

Йомаё... Вообщем пока что это

Йомаё... Вообщем пока что это кандидат в примеры быдлокода на лурк =)

Особенно тот момент где

                        if(nap == 1)
                        {   
                                sprite(1,ix,iy);
                        }    
                        if(nap == 2)
                        {   
                                sprite(2,ix,iy);
                        }  
[... ыще тыща таких же строк ...]

Все эти ифы можно было сделать:
а) сделать как

if ( nap == 1 )
        sprite(1,ix,iy);
else if ( nap == 2 )
        sprite(1,ix,iy);
[...]

б) реализовать case'ом (в синтаксисе могу ошибатся):

switch ( nap ) {
        case 1: 
                sprite(1,ix,iy);
                break;
        case 2:
                sprite(2,ix,iy);
                break;
[...]
}

в) Следите за руками!
sprite(nap, ix, iy);

Вообщем это относится ко всему =)

P.S. Использование готовых кусков для целей обучения плохо подходит ;)

.

NightNord написал(а):
Использование готовых кусков для целей обучения плохо подходит ;)

Для обучения [и не только] бывает архи-полезно сначала озаботиться получением представления что и как [и зачем] ты собираешься делать?

:wq
--
Live free or die

С точки зрения

С точки зрения программирования не всегда правда. Обычно небольшая задача по ходу развивается в мега-монстра ;)

Насчет быдло кода согласен на

Насчет быдло кода согласен на все 100% именно эти места и отнес к нему :)
Эти ифы можно вообще в функцию вынести например а вариант sprite(nap, ix, iy); мне вообще до жути понравился, так и сделаю чуть позже.

Насчет использования кусков согласен с обоими участниками "перепалки".

Чтобы понять как и что работает нужен код который работает который можно раскромсать и разобраться что да как. А потом уже либо свой с нуля пишется либо опять же на основе чего-то делается разработка. ИМХО если есть толковый код написанный кем то то лучше взять его чем неделями изобретать велосипед. На практике у меня такое бывало редко.

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

Не могу найти примеров создания игрового пространства, конкретно мне нужно игровое полотно 20000х20000 пикселей, как его организовать? + как его прокручивать, ещё буду подключать мышку и расчет траектории движения корабля из точки а в точку б указанную курсором мыши (как в стратегии)

Вот закончился 2009 год и

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

Последняя реинкорнация
http://depositfiles.com/files/9l4fqu1gk
Выводы:
ФПС в меню ясно показывает что рисовать элементы меню пикселями ужасная глупость нужно рисовать меню спрайтами, не могу пока понять как рулить размерами если использовать спрайты.

далее стоит задача в создании карты и естественно редактора карт.
Видится мне это в виде массива по сему нужно разобраться в следующем:

Нужно создать массив 3072х2304 И записать его в файл.
Нужна функция которая может считывать этот файл обратно в массив изменять его и записывать обратно в файл. Разделителем в массиве насколько я вижу может быть например знак | или пробел если говорить о текстовом файле. Я пошел "курить" доки буду благодарен за какойнить пример если кто найдет время.

Будет интересно послушать мнение о быдлокоде и вообще о том насколько культурно или некультурно все оформлено.

Заведитесь уже на Google Code

Заведитесь уже на Google Code / github / gitorious / bitbucket, чтобы не позориться ссылками на файлообманники (-:Е
И разрабатывать удобней, и код смотреть, и вообще.

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Насчет зарабатывать не совсем

Насчет зарабатывать не совсем понял. В остальном интересно посмотреть как это выглядит.

krigstask

vitek написал(а):
Насчет зарабатывать не совсем понял. В остальном интересно посмотреть как это выглядит.

krigstask написал(а):
Заведитесь уже на Google Code / github / gitorious / bitbucket, чтобы не позориться ссылками на файлообманники (-:Е
И разрабатывать удобней, и код смотреть, и вообще.

Я Gentoo & Funtoo

vitek написал(а): В

vitek написал(а):
В остальном интересно посмотреть как это выглядит.

http://code.google.com/p/cuberok/
http://github.com/kevinclark/ruby-kqueue
http://gitorious.org/kadu
http://bitbucket.org/ged/ruby-pg/

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".