На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
15 мая "Исходники.РУ" отмечают 20-летие присутствия в сети!
Поздравляем всех причастных и неравнодушных с юбилеем сайта!
И огромное спасибо всем, кто был с нами все эти годы!
msm.ru
! Правила поведения
1. Разработка компьютерных игр - процесс творческий, поэтому в данном разделе есть место как тематике, так и флейму.
2. Главное: будьте вежливы и не флудите.
3. По всем спорным вопросам пишите в PM модератору раздела.
4. Перед тем, как задать вопрос, посмотрите GameDev FAQ - возможно, там Вы найдете ответ. Также посмотрите список полезных тем в разделе.
5. По поводу модерирования этого раздела можно высказаться здесь: Da$aD.
Модераторы: Da$aD
  
> raise of ya2500, мои игры пишу и размещаю здесь
    в последнее время я стал каким-то флудером.

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

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

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

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

    это- мой Колобок.
    подробнее

    идеи, вдохновившие на создание:
    - рандомногенерируемый НЕ квадратный* лабиринт
    - невозможно умереть или проиграть
    - из любой ситуации возможен переход на следующий уровень
    - надо думать, иначе собрать все бонусы может стать невозможным**

    *- на нулевом уровне он-таки квадратный, НО чем выше уровень, тем- обгрызеннее квадрат.
    **- да, это так. планировалось большее разнообразие, но..

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

    Прикреплённый файлПрикреплённый файл________5_3.zip (168,62 Кбайт, скачиваний: 343)
      Прикольный такой колобок :)

      Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
        Не совсем понял, а вообще какие-нибудь траблы должны быть Раз не смерть, то хоть логические?
          Цитата Da$aD @
          Не совсем понял, а вообще какие-нибудь траблы должны быть Раз не смерть, то хоть логические?

          Цитата ya2500 @
          собрать все бонусы может стать невозможным


          Добавлено
          это- единственный возможный траббл.
            Я так понял, выход активизируется, когда собраны все вишенки, соответственно, если ещё остаётся золото, и к нему не пройти мимо выхода, то вариантов его взять нет?
            Очень утомляет глаза ступенчатое перемещение карты, а не ГГ, возможно более плавное перемещение выглядело бы лучше. Но лучше, всё-таки, по-старинке премещать ГГ по неподвижной карте, тем более, что все карты небольшие, вполне могут вписаться в форму.
              Цитата Mikle @
              Я так понял, выход активизируется, когда собраны все вишенки, соответственно, если ещё остаётся золото, и к нему не пройти мимо выхода, то вариантов его взять нет?

              именно так. собственно, именно для этого и нужно золото: оно создаёт дополнительную(+ к самому лабиринту) головоломку.

              Цитата Mikle @
              Очень утомляет глаза ступенчатое перемещение карты, а не ГГ, возможно более плавное перемещение выглядело бы лучше. Но лучше, всё-таки, по-старинке премещать ГГ по неподвижной карте, тем более, что все карты небольшие, вполне могут вписаться в форму.

              а ещё лучше было бы сделать всё это на 2d-фичах DirectX, но на этом я тогда и застрял: плавные перемещения+ плавная анимация+ всё это на любой полный экран..
              --

              вообще-то я собирался щазз "крестики нолики" замутить. но раз уж тема колобка вызывает интерес.. когда-нибудь, продолжу и его.

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

                делаю пока на Delphi(возможно, позже переведу на знакомый мне Builder и на не знакомый, но желанный C# и другие языки).

                запнулся пока на следующем:
                - у меня есть размеченное поле-image 3х3
                - у меня есть вторая image, с изображениями крестика и нолика.

                я собираюсь на каждом ходу создавать спрайты нового нолика/крестика, копируя в него из FiguresImage, и размещая его поверх FieldImage в нужное место.

                прозрачность я вродь настроил как надо(в случае с колобком я использовал ещё более варварский способ- совсем без прозрачности и масок)).

                вот, собсвтенно, хотел задать вопрос об отображении ходов, но вродь сам на него и ответил.

                завтра попробую, и если что будет не понятно- спрошу.

                всей работы- на пару часов, а собирался сесть и начать писать- несколько дней..
                Сообщение отредактировано: ya2500 -
                  заведи себе массив с "клетками" в которых помечай где пусто, а где крестик/нолик.
                  потом этот массив в цикле рисуй на битмапе, если там крестик или нолик то рисуй битмап с крестиком (или ноликом), например через bilblt(). Создавать тонну объектов для этого не обязательно, храни отдельно битмапы в единственном экземпляре и рисуй их на результирующем поле
                  user posted image
                    Цитата antonn @
                    заведи себе массив с "клетками" в которых помечай где пусто, а где крестик/нолик.
                    потом этот массив в цикле рисуй на битмапе, если там крестик или нолик то рисуй битмап с крестиком (или ноликом), например через bilblt(). Создавать тонну объектов для этого не обязательно, храни отдельно битмапы в единственном экземпляре и рисуй их на результирующем поле

                    в-общем, спасибо, НО разве в данном случае нужен цикл? в колобке- был нужен, т к там часто менялось всё поле(скроллировалось).

                    ещё хочу пояснить: проблема пока ТОЛЬКО в отображении хода. в остальной часть проги, пока ни на чём не запнулся. т е я щазз ломаю голову над процедурой "отображение хода значком S на поле F".

                    Цитата antonn @
                    например через bilblt().

                    за это- отдельное спасибо. со времени последнего сообщения за крестики больше не садился, НО хелп об этой штуке обязательно почитаю- когда делал Колобка, не смог корректно копировать спрайты с прозрачностью. пришлось обойтись без неё. впрочем, там отображение было не важно- на колобке я отрабатывал алгоритмы генерации, а на отображении ч/з directx я увяз.
                    --

                    по некотором размышлении, план пока такой:
                    - будет image поля с заставкой
                    - будет image c крестиком, c ноликом и c пустым полем

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

                    как-то так.

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

                    Добавлено
                    Цитата antonn @
                    заведи себе массив с "клетками" в которых помечай где пусто, а где крестик/нолик.
                    потом этот массив в цикле рисуй на битмапе

                    да, иногда- при перерисовке, можно и так делать. но не каждый же раз?

                    Добавлено
                    P.S.

                    исходник Колобка утерян, так что вспоминать, как что выводить, приходится заново(((
                      Ну рисуй когда нужно перерисовать, скорость работы даже через GDI сейчас вполне себе позволяет не заморачиваться с производительностью (разумеется на оконные сообщения о перерисовке нужно Не рисовать всю "сцену", а блитить битмап на котором все рисуется на контрол).
                      С прозрачностью через bitblt() это немного инвалидно будет и громоздко, придется взять сторонние библиотеки/функции (или самому написать, например я тут делал Вопрос по созданию игры с противостоянием юнитов (сообщение #2721725) ). Есть GDI+, думаю использовав его проще будет Перевести проект с дельфи на шарп (если оно надо будет). Хотя не рекомендую :) выгоды нет никакой
                      user posted image
                        antonn, bitblt - это из DelphiX?

                        я щазз хочу крестики-нолики сделать на стандартных функциях Delphi. в хелпе bitblt не нашлось.

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

                        смысл перевода на другие языки только в том, чтобы их изучить)))
                          Цитата
                          bitblt - это из DelphiX?

                          нет, это быстрая функция копирования из winapi.
                          при освоении альфаканала можно рисовать нестандартные вещи типа этой Clickomania , для игры типа крестиков-ноликов 3*3 отлично бы подошло такое окошко, его можно как виджет держать на рабочем столе и тыкать в него когда делать нечего :)
                          но для тренировки и понимания архитектуры "движка" (хотя бы порядка отрисовки) хватит и канвасных функций, рекомендую не заморачиваться сразу на красивостях. И не создавать тучу контролов, не хранить данных в них (например массив TImage используемых для отображения игрового поля, видел такое когда-то :) )
                          user posted image
                            Цитата antonn @
                            для тренировки и понимания архитектуры "движка" (хотя бы порядка отрисовки) хватит и канвасных функций, рекомендую не заморачиваться сразу на красивостях. И не создавать тучу контролов, не хранить данных в них

                            согласен 100%

                            P.S.
                            а твоя плохо скрытая ссылко-реклама так же интересна, как и твои советы)))
                              какая реклама, я указываю ссылки только с этого сайта, а там прямые ссылки на скачку архива :)
                              а кликоманию как пример окна со слоями и отсутствием контролов (там кроме окна ничего нет, никаких кнопок). у окна со слоем есть еще одно преимущество - оно не мерцает :) не нужна постоянная перерисовка (WM_PAINT), сам перерисовал битмап когда надо и сунул в слой, и все.
                              user posted image
                                ya2500
                                А не хотел бы ты помочь мне портировать на Дельфи SR2D?
                                  Цитата Mikle @
                                  А не хотел бы ты помочь мне портировать на Дельфи SR2D?

                                  я бы хотел, но пока не умел)))

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

                                  потом, планирую выложить их сюда, и продолжать эту тему в духе "дневник независимого разработчика"
                                  и раскручивать её соответственно :whistle:

                                  короч, Mikle- сделаю пару простых своих проектов и тогда- серьёзно присмотрюсь к твоему.
                                  --

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

                                  Добавлено
                                  P.S.

                                  да чтож это такое- вторая страница уже пошла, а ничего ещё не готово!

                                  надо поднапрячься, чтоб хотя бы один проект на страницу был 8-)
                                    Цитата ya2500 @

                                    надо поднапрячься, чтоб хотя бы один проект на страницу был 8-)

                                    Отключи себе интернет, быстро сделаешь. :)
                                      Скрытый текст

                                      Цитата
                                      Отключи себе интернет, быстро сделаешь.

                                      Если отключить, то стебанет дипресняк, тогда вообще ничего не сделаешь... :)

                                      Вполне возможно, что у человека куча других дел не связанных с интернетом, да и с компом. Такие проекты делаются, по большому счету, для себя. А когда заставляешь себя сидеть и делать - это в кайф. Для себя - это когда интересно и комфортно, все остальное работа. :)
                                      Easy to find what's wrong
                                      Harder to find what's right
                                        Цитата maxim84_ @
                                        Вполне возможно, что у человека куча других дел не связанных с интернетом, да и с компом

                                        Цитата ya2500 @
                                        на днях вродь должно появиться время- попробую покурить хелп и что-нить слепить.

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

                                        Цитата maxim84_ @
                                        Для себя - это когда интересно и комфортно,

                                        мне щазз нужно писать для проверки воли, а так же для её развития.
                                        всё, добрался наконец-то до Delphi, ухожу с головой в хелпы))
                                          --

                                          вот, иногда так бывает, что вопрос простой, а и не знаешь, как и что конкретно спросить-то.
                                          тока что удалось вывести кое-что на канвас формы:
                                          Form1.Canvas.Draw(8,16,Form1.Image1.Picture.Bitmap);
                                          вот именно разные способы этого меня и интересовали.

                                          фух, можно считать, что половина проблем с игрой решена.
                                            Посмотрел бы ты в сторону DelphiX...

                                            Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                              Цитата Астарот @
                                              Посмотрел бы ты в сторону DelphiX..

                                              когда-то уже смотрел. а сейчас- начинаю с простого. после двух простых проектов, в третьем, вероятно, буду юзать DelphiX.
                                              эх, планы, планы..

                                              Добавлено
                                              а планы такие:
                                              - пара простых проектов
                                              - заморочиться качественной 2d-отрисовкой
                                              - заморочиться хитрыми алгоритмами

                                              Добавлено
                                              ExpandedWrap disabled
                                                procedure ShowZn(Zn, Fl: byte); // отрисовка такого-то значка на таком-то поле
                                                var
                                                  x1, y1, x2, y2 : byte;
                                                  Rect1, Rect2: TRect;
                                                begin
                                                  Fl:=Fl-1;
                                                  // откуда
                                                  x1:= 49*Zn;
                                                  y1:= 0;
                                                  // куда
                                                  x2:= (Fl mod 3)*49 + 8;
                                                  y2:= (Fl div 3)*49 + 16;
                                                  // отрисовка
                                                  Rect1:= Rect(x1,0,x1+49,49);
                                                  Rect2:= Rect(x2,y2,x2+49,y2+49);
                                                  Form1.Canvas.CopyRect(Rect2,Form1.Image1.Picture.Bitmap.Canvas,Rect1);
                                                end;


                                              ExpandedWrap disabled
                                                procedure Init;
                                                var
                                                  n: byte;
                                                  Bitmap : TBitmap;
                                                begin
                                                  Form1.Caption:= ' X - 0';
                                                  for n:=1 to 9 do
                                                  begin
                                                    GameField[n]:=0; // 0- empty; 1- krest; 2- zero
                                                    ShowZn(0, n);
                                                  end;
                                                  TurnNo := 1;
                                                  Finish := false;
                                                end;


                                              Добавлено
                                              работатет :yes:
                                                ни в коем случае не смотри в сторону DelphiX
                                                user posted image
                                                  Цитата Астарот @
                                                  Посмотрел бы ты в сторону DelphiX...

                                                  Есть еще очень интересный проект ZenGL
                                                  Я на этом движке прогу для своей дипломной работы написал. :)
                                                    есть ещё интересный проект:
                                                    Цитата Mikle @
                                                    А не хотел бы ты помочь мне портировать на Дельфи SR2D?
                                                      Цитата ya2500 @
                                                      есть ещё интересный проект:

                                                      Я к тому, чтобы ты попробовал движок.
                                                      Мне очень понравился.
                                                        так, прям щазз мне актуально отследить координаты, куда хуман даблкликнул на своём ходу по форме.

                                                        Добавлено
                                                        Цитата Polinom2686 @
                                                        Я к тому, чтобы ты попробовал движок.
                                                        Мне очень понравился.

                                                        спасибо. учту.
                                                          Цитата ya2500 @

                                                          спасибо. учту.


                                                          Обращайся, я его почти год изучал.
                                                          Могу подсказать чего-нибудь. =)
                                                            Цитата Polinom2686 @
                                                            Могу подсказать чего-нибудь. =)

                                                            Цитата ya2500 @
                                                            прям щазз мне актуально отследить координаты, куда хуман даблкликнул на своём ходу по форме

                                                            ??

                                                            Добавлено
                                                            ты же в курсе обычного Delphi?
                                                              У формы есть событие OnDblClick. Вроде оно.
                                                                разобрался: procedure GetCursorPos(var P: TPoint);

                                                                Добавлено
                                                                итак, разработка крестиков-ноликов продолжается уже больше страницы и дольше недели..

                                                                надеюсь, дальше пойдёт быстрее))
                                                                  Цитата
                                                                  У формы есть событие OnDblClick. Вроде оно.


                                                                  OnMouseDown/OnMouseUp, в него приходят локальные координаты
                                                                  user posted image
                                                                    сделал так:
                                                                    ExpandedWrap disabled
                                                                      procedure TForm1.FormDblClick(Sender: TObject);
                                                                      var
                                                                        PointH     : TPoint; // координаты мыши
                                                                        Fx, Fy, Fl : byte;   // Fl - номер поля
                                                                      begin
                                                                        GetCursorPos(PointH);
                                                                        Fx := ((PointH.x - 16) div 49)-4;
                                                                        Fy := ((PointH.y - 8) div 49)-3;
                                                                        Fl := Fx + (Fy-1)*3;
                                                                        if (TurnNo in [1,3,5,7,9]) then ShowZn(1, Fl)
                                                                         else ShowZn(2, Fl);
                                                                      end;


                                                                    Добавлено
                                                                    когда комп ходит на последнее из пустых полей, то всё работает:
                                                                    ExpandedWrap disabled
                                                                      procedure MakeTurn; // ход компа
                                                                      var
                                                                        n, sum, Fr, Fl : Integer;
                                                                      begin
                                                                        Form1.Caption:= 'Я думаю..';
                                                                        // посчитать пустые поля, и плюхнуть свой значок на любое из них
                                                                        sum:=0;
                                                                        for n:=1 to 9 do
                                                                        begin
                                                                          if GameField[n]=0 then Fl:=n;
                                                                        end;
                                                                       { Fr:= random(sum)+1;
                                                                        sum:=0;
                                                                        for n:=1 to 9 do
                                                                        begin
                                                                          if GameField[n]=0 then sum:= sum+1;
                                                                          if sum = Fr then Fl:=n;
                                                                        end;   }
                                                                        if (TurnNo in [1,3,5,7,9]) then
                                                                        begin
                                                                          GameField[Fl] := 1;
                                                                          ShowZn(1, Fl);
                                                                        end
                                                                        else
                                                                        begin
                                                                          GameField[Fl] := 2;
                                                                          ShowZn(2, Fl);
                                                                        end;
                                                                        TurnNo    := TurnNo+1;
                                                                      end;


                                                                    когда пытаюсь ходить на рандомное пустое поле- комп иногда ходит поверх других значков:
                                                                    ExpandedWrap disabled
                                                                      procedure MakeTurn; // ход компа
                                                                      var
                                                                        n, sum, Fr, Fl : Integer;
                                                                      begin
                                                                        Form1.Caption:= 'Я думаю..';
                                                                        // посчитать пустые поля, и плюхнуть свой значок на любое из них
                                                                        sum:=0;
                                                                        for n:=1 to 9 do
                                                                        begin
                                                                          if GameField[n]=0 then sum:=sum+1;
                                                                        end;
                                                                        Fr:= random(sum)+1;
                                                                        sum:=0;
                                                                        for n:=1 to 9 do
                                                                        begin
                                                                          if GameField[n]=0 then sum:= sum+1;
                                                                          if sum = Fr then Fl:=n;
                                                                        end;
                                                                        if (TurnNo in [1,3,5,7,9]) then
                                                                        begin
                                                                          GameField[Fl] := 1;
                                                                          ShowZn(1, Fl);
                                                                        end
                                                                        else
                                                                        begin
                                                                          GameField[Fl] := 2;
                                                                          ShowZn(2, Fl);
                                                                        end;
                                                                        TurnNo    := TurnNo+1;
                                                                      end;


                                                                    Добавлено
                                                                    не могу понять- что ему не так?

                                                                    Добавлено
                                                                    пойду, отдохну
                                                                      --

                                                                      блин, отслеживает ход человека тоже не всегда верно. и, вообще, всё надо было иначе организовывать.
                                                                        Цитата ya2500 @
                                                                        и, вообще, всё надо было иначе организовывать.

                                                                        Это первая ступень просветления, сын мой :D

                                                                        Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                          там ещё проблема может быть в том, что из процедуры хода человека я вызываю процедуру хода компа. хотя.. но всё же- нехорошо это.

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

                                                                          Добавлено
                                                                          а сейчас я подхожу вплотную к тому, что нужно как-то организовывать всё.. опять на таймерах?
                                                                            Цитата ya2500 @
                                                                            и, вообще, всё надо было иначе организовывать.

                                                                            Лично ко мне это ощущение приходит в каждом проекте по достижениии суммарным объемом кода отметки в 3k строк... И не отпускает :D
                                                                              Цитата
                                                                              там ещё проблема может быть в том, что из процедуры хода человека я вызываю процедуру хода компа. хотя.. но всё же- нехорошо это.


                                                                              это нормально, ты делаешь ход и после вызываешь процедуру проверки победы/поражения, если ее нет то вызываешь ход компьютера, и после опять проверку победы. Если проверка на окончание партии не выдала окончания игры, то "программа" будет ждать твоего хода.

                                                                              Добавлено
                                                                              Вообще, если ты не против, я бы написал свое видение архитектуры игры на поле 3*3 и выложил здесь.
                                                                              Тебе могу посоветовать не использовать простые числа для пометки поля, используй константы с более понятными именами
                                                                              user posted image
                                                                                Цитата antonn @
                                                                                я бы написал свое видение архитектуры игры на поле 3*3 и выложил здесь

                                                                                я не против, и даже двумя руками за! НО не обещаю ею воспользоваться: как раз работаю над своей архитектурой.
                                                                                  сегодня около 20:00 снова засел за крестики-нолики, дотумкал архитектуру и переписал игру.

                                                                                  осталось допилить по-мелочи И сделать проверку окончания игры.

                                                                                  Добавлено
                                                                                  слегка подолбился с доступам к пунктам меню.

                                                                                  добраться до свойства Enabled пункта с именем N2 менюхи с именем MainMenu1 можно так:
                                                                                  Цитата
                                                                                  Form1.N2.Enabled:= true;
                                                                                    мозги игре уже написал? :)
                                                                                    user posted image
                                                                                      Цитата antonn @
                                                                                      мозги игре уже написал?

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

                                                                                      получается вродь неплохая прога для начинающих- комменты присутствуют, разобраться не сложно. как доделаю- выложу экзешник + исходник.

                                                                                      Добавлено
                                                                                      после этого примусь за шахматы, там возникают интересные проблемы:
                                                                                      - как организовать структуру данных и архитектуру игры
                                                                                      - как стандартными средствами Delphi организовать плавное перемещение юнитов
                                                                                      - организовать запись ходов и возможность отменять полные ходы

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

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

                                                                                        этож безмозглый бот получается :)
                                                                                        user posted image
                                                                                          Цитата antonn @
                                                                                          этож безмозглый бот получается

                                                                                          ну, на то он и простой проект))

                                                                                          Цитата ya2500 @
                                                                                          планы такие:
                                                                                          - пара простых проектов
                                                                                          - заморочиться качественной 2d-отрисовкой
                                                                                          - заморочиться хитрыми алгоритмами
                                                                                            написать мозг - вполне хитный алгоритм для простого проекта :)
                                                                                            user posted image
                                                                                              Цитата antonn @
                                                                                              написать мозг - вполне хитный алгоритм для простого проекта

                                                                                              :yes: но до этого я буду доходить постепенно, в соотв со своим планом.

                                                                                              итак, товарищи, грядёт очередная шабашка, так что на сообщения в теме могу подолгу не отвечать.
                                                                                              НО
                                                                                              иногда всёж буду сюда заглядывать. постараюсь не реже раза в неделю.
                                                                                                допиливая ввод гамера, только что дотумкал, что нужно учитывать смещение окошка игры- по-моему, GetCursorPos читает координаты относительно экрана, а не окошка игры.
                                                                                                  http://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B5%D1%81%D1%82%D0%B8%D0%BA%D0%B8_%D0%BD%D0%BE%D0%BB%D0%B8%D0%BA%D0%B8 - уже расписаны готовые стратегии =)

                                                                                                  Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                    ладно, если мозг делать не будешь, то нет смысла ждать и сравнивать
                                                                                                    Прикреплённый файлПрикреплённый файлxo.zip (199,85 Кбайт, скачиваний: 202)
                                                                                                    user posted image
                                                                                                      мой дружбан звонил, сказал, что сегодня я тоже- выходной. шабашка переносится на завтра.

                                                                                                      КРЕСТИКИ-НОЛИКИ доделал! файл Антона не подсматривал- увидел его только сейчас, а до этого- увлечённо переделывал игруху.

                                                                                                      ПРИЛАГАЮ к этому сообщению ИГРУ ВМЕСТЕ С ИСХОДНИКАМИ !

                                                                                                      ПРИВЕТСТВУЮТСЯ предложения и пожелания по:
                                                                                                      - улучшению интерфейса
                                                                                                      - встраиванию защит от дурака
                                                                                                      - устранению багов
                                                                                                      и другие подобные, в пределах разумного минимализма

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

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

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

                                                                                                      СКАЧАТЬ ИГРУ: Прикреплённый файлПрикреплённый файлya2500_Project1.zip (197,34 Кбайт, скачиваний: 235)

                                                                                                      СКАЧАТЬ ИСХОДНИКИ: Прикреплённый файлПрикреплённый файлya2500_Source1.zip (11,55 Кбайт, скачиваний: 226)

                                                                                                      ход осуществляется двойным кликом
                                                                                                      Сообщение отредактировано: ya2500 -
                                                                                                        Ты часом не забыл ничего приложить?
                                                                                                        Прикреплённая картинка
                                                                                                        Прикреплённая картинка

                                                                                                        Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                          и, да- я уже говорил, что ход осуществляется двойным кликом? так и есть.

                                                                                                          Добавлено
                                                                                                          Цитата Астарот @
                                                                                                          Ты часом не забыл ничего приложить?

                                                                                                          шрифт вроде стандартный русский..

                                                                                                          Добавлено
                                                                                                          щазз гляну

                                                                                                          Добавлено
                                                                                                          шрифт щазз Ms Sans Serif

                                                                                                          Добавлено
                                                                                                          скачать его можно здесь: http://font-cat.com/font-ru-6469.html
                                                                                                          и щазз приложу его сюда.

                                                                                                          Добавлено
                                                                                                          Цитата
                                                                                                          Для установки шрифта Microsoft Sans Serif Regular Вы можете воспользоваться специальным программным обеспечением (например Adobe Type Manager, Bistream Font Navigator и т.п.), либо просто скопировать файл шрифта Microsoft Sans Serif Regular в папку Windows/Fonts (вместо Windows может быть Winnt и т.п.)
                                                                                                          если всё ещё не понятно, как его установить- см ссылку чуть выше.
                                                                                                            Не, вот ты правда считаешь, что мне для попробовать твои крестонолики не в падлу ходить по сайтам, качать, читать инструкции? :)

                                                                                                            Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                              ну, на шрифты в КОЛОБКЕ никто не жаловался.

                                                                                                              вродь там я использовал какой-то Ариал. щазз всё перевыложу.

                                                                                                              Добавлено
                                                                                                              Астарот, кста- спасибо за пойманный баг)))
                                                                                                                Цитата ya2500 @
                                                                                                                ну, на шрифты в КОЛОБКЕ никто не жаловался.

                                                                                                                А с ними все в порядке было :)

                                                                                                                Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                  вот, те же крестики, шрифт- обычный Arial, который есть у всех:
                                                                                                                  ...

                                                                                                                  Добавлено
                                                                                                                  пииии..нехороший форум не даёт мне приложить ещё один файл. почему?

                                                                                                                  Добавлено
                                                                                                                  лан, щазз отредактирую цветасто-синее сообщение выше, и ч/з 5 мин там всё будет- зашибись!

                                                                                                                  Добавлено
                                                                                                                  ГОТОВО!

                                                                                                                  Добавлено
                                                                                                                  Астарот, щазз погляди- должно быть всё нормально.
                                                                                                                    Тоже самое. Хватит выеживатся - пиши по английски!

                                                                                                                    Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                      Цитата Астарот @
                                                                                                                      Тоже самое. Хватит выеживатся - пиши по английски!

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

                                                                                                                      Добавлено
                                                                                                                      лан, подожду пока кто-нить ещё что-нить присоветует.

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

                                                                                                                      Добавлено
                                                                                                                      эх, не надо было игру перевыкладывать- тока запутал всех. если, чо- повторяю: теперь шрифт- Arial.

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

                                                                                                                      Добавлено
                                                                                                                      --

                                                                                                                      тока что дети моей сестры ( 9 и 11 лет) нашли ещё пару ошибок, которые я уже исправил.

                                                                                                                      Добавлено
                                                                                                                      КАК сделать, чтобы противный ленивый Астарот смог поиграть в мою игру на русском?

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

                                                                                                                      тока файлы выкладывать в какие-нить внешние хранилища.

                                                                                                                      тем не менее, проблема с русским шрифтом, которую нашёл Астарот, остаётся актуальной.
                                                                                                                      Сообщение отредактировано: ya2500 -
                                                                                                                        Цитата ya2500 @

                                                                                                                        КАК сделать, чтобы противный ленивый Астарот смог поиграть в мою игру на русском?


                                                                                                                        Дать ленивому и противному Астароту "волшебного пендаля", чтобы не выделывался, а играл. :D
                                                                                                                          Цитата Polinom2686 @
                                                                                                                          Дать ленивому и противному Астароту "волшебного пендаля", чтобы не выделывался, а играл.

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

                                                                                                                          Добавлено
                                                                                                                          вложения в разработке игр (сообщение #3036874)

                                                                                                                          ок! один вопрос решён.

                                                                                                                          осталось понять, как стандартными средствами Delphi слепить приложение, которое у всех будет нормально писать по русски(крайне желательно, чтобы не требовалась инсталляция), и можно будет подумать о том, как быть с этой темой дальше. склоняюсь к тому, чтобы завести новую.
                                                                                                                            нашёл третью ошибку в игре. как допилю- примусь за шахматы.
                                                                                                                              "по-русски" и "по-английски" пишутся через тире =)
                                                                                                                              user posted image
                                                                                                                                Цитата antonn @
                                                                                                                                "по-русски" и "по-английски" пишутся через тире =)

                                                                                                                                :yes:

                                                                                                                                так, всё допилил: исправлено 3-и ошибки, изменён шрифт на такой, который должен нормально отображаться на любой русскоязой винде.
                                                                                                                                проблемы с русским шрифтом

                                                                                                                                прилагаю игру: Прикреплённый файлПрикреплённый файлX___O.zip (197,61 Кбайт, скачиваний: 167)

                                                                                                                                теперь- вся надежда на Астарота: покажет у него русские буквы, или нет?

                                                                                                                                вродь должно.

                                                                                                                                ходы осуществляются двойным кликом
                                                                                                                                  св-во font, там charset выбери русский, а не дефолт
                                                                                                                                  user posted image
                                                                                                                                    :no:
                                                                                                                                    Шапка русская, а остальное - нет.
                                                                                                                                    Прикреплённая картинка
                                                                                                                                    Прикреплённая картинка

                                                                                                                                    Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                      Цитата antonn @
                                                                                                                                      св-во font, там charset выбери русский, а не дефолт

                                                                                                                                      именно так и сделал.

                                                                                                                                      мож попробовать теперь дефолт? проблема, однако, в том, чтобы это заработало НЕ только у Асти, но и у всех..

                                                                                                                                      и хорошо бы Астарота не дёргать каждый раз, чтобы он проверил, а найти надёжный способ.

                                                                                                                                      лан, сделаем так: прилагаю в архиве шрифты. их надо распаковать и выложить в папку windows/fonts. после этого в обоих выложенных сейчас примерах всё будет ОК.

                                                                                                                                      итак, вот архив с двумя шрифтами:
                                                                                                                                      ...

                                                                                                                                      (третьего шрифта, для ныне удалённой версии игры, я почему-то у себя не нашёл)
                                                                                                                                      --

                                                                                                                                      японский городовой! напишите кто-нить любое сообщение, тогда в следующем я смогу вставить шрифты.
                                                                                                                                      Сообщение отредактировано: ya2500 -
                                                                                                                                        Да забей, там и с вопросиками понятно как играццо :) Просто для каких-то более серьезных проектов тебе придется найти решение проблемы шрифтов.

                                                                                                                                        Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                          Цитата Астарот @
                                                                                                                                          для каких-то более серьезных проектов тебе придется найти решение проблемы шрифтов

                                                                                                                                          Цитата ya2500 @
                                                                                                                                          сделаем так: прилагаю в архиве шрифты. их надо распаковать и выложить в папку windows/fonts

                                                                                                                                          как тебе такой вариант?

                                                                                                                                          шрифт tahoma для последнего(и следующего тоже) проекта здесь: Прикреплённый файлПрикреплённый файлtahoma.rar (186,03 Кбайт, скачиваний: 176)

                                                                                                                                          на этот раз пришлось сжать не в zip, а в rar-архив, с максимальным сжатием. иначе не уместился бы.

                                                                                                                                          надеюсь, ни у кого из-за этого проблем не возникнет :whistle:
                                                                                                                                            Цитата ya2500 @
                                                                                                                                            как тебе такой вариант?

                                                                                                                                            Ты хоть раз устанавливая игру занимался выкладыванием шрифтов куда-то? Нет? Тогда ответ должен быть для тебя очевиден.

                                                                                                                                            Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                              хорошо, я понял. буду пытать зубров в разделе Delphi.

                                                                                                                                              итак, следующий проект- ШАХМАТЫ !
                                                                                                                                              Цитата ya2500 @
                                                                                                                                              там возникают интересные проблемы:
                                                                                                                                              - как организовать структуру данных и архитектуру игры
                                                                                                                                              - как стандартными средствами Delphi организовать плавное перемещение юнитов
                                                                                                                                              - организовать запись ходов и возможность отменять полные ходы

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

                                                                                                                                              это и будет второй из двух запланированных простых проектов.


                                                                                                                                              и, вот вам ещё вкусняшка: нашёл свой старый тренажёр, на котором мучил детей своей сестры:
                                                                                                                                              на русском. что за шрифт- не помню, исходники- утеряны.

                                                                                                                                              Прикреплённый файлПрикреплённый файл_________.rar (166,05 Кбайт, скачиваний: 153)
                                                                                                                                                --

                                                                                                                                                и ещё: я так подумал, подумал..

                                                                                                                                                хочу писать шахматы НЕ на стандартных возможностях Delphi, А хочу уже ворваться в нормальные движки/библиотеки.

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

                                                                                                                                                  НО тем не менее, работы предстоит очень много. надеюсь сделать свои шахматы к Новому Году.

                                                                                                                                                  а пока- прилагаю картинку, изуродованную джипегом:

                                                                                                                                                  user posted image

                                                                                                                                                  Добавлено
                                                                                                                                                  игра идёт в окне 640х480

                                                                                                                                                  Добавлено
                                                                                                                                                  т е- будет идти. когда будет.
                                                                                                                                                  Сообщение отредактировано: ya2500 -
                                                                                                                                                    сплошные выходные- с пятницы и до сих пор. чёт не зовёт меня дружбан на шабашку.

                                                                                                                                                    сам проект небольшой- шахматы могут и уместиться в 200к, но ресурсы(шрифт+картинки) весят больше метра.

                                                                                                                                                    в связи с этим вопрос: подскажите хорошее файлохранилище
                                                                                                                                                      Я юзаю яндекс и радуюсь жизни. Раньше юзал slil.ru, но сейчас там вообще до десяти дней срок хранения урезали...
                                                                                                                                                        благодаря детям моей сестры, особенно младшему(Вова, 5лет), которому мои крестики-нолики очень понравились, нашлась ещё одна легко устранимая ошибка: если кликать по форме за полем, то получается иногда какая-то ерунда.

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

                                                                                                                                                        --

                                                                                                                                                        по поводу шахмат: очень даже неплохо смотрятся мгновенные перемещения фигур, НО реализация плавного перемещения- это одна из тех мелких проблем, ради решения которых я и затеял всю эту возню с шахматами. вы только представьте себе: фигуре требуется время на перемещение, а в это время юзверь не сидит сложа руки, а кликает, куда ему вздумается. короч- делаю плавные перемещения, причём собираюсь выполнить свои шахматы на чуть более серьёзном уровне, чем крестики-нолики.

                                                                                                                                                        и, да- планировал я закончить их к Новому Году.. шабашка несколько раз срывалась, НО завтра я иду с утра работать. что будет с шахматами? вначале я составил план, в котором разбил всю работу на 15 этапов, чтобы двигаться постепенно от очередного к следующему. плохая новость в том, что я до сих пор выполняю первый этап, и сделано меньше половины. а хорошая новость в том, что, похоже, что этот этап вмещает в себя чуть ли не половину всех проблем реализации=> есть шанс, что по его завершении половина игры будет готова.
                                                                                                                                                          зарегился на ДропБоксе и попробую через него поделиться с вами своими успехами.

                                                                                                                                                          на данный момент сделано:

                                                                                                                                                          1. основные правила ходов фигур
                                                                                                                                                          (кроме шахов, рокировок, превращения пешек и т п)

                                                                                                                                                          2. выбор режима игры и возможность переворачивать доску

                                                                                                                                                          3. Искуственный НЕ-Интеллект, соблюдающий правила
                                                                                                                                                          (и есть один мааленький косяк: на его ходу недоступны никакие кнопки, так что если он попадёт в патовую ситуацию, то просто выключите игру и запустите заново)

                                                                                                                                                          0. НЕ сделано нормальное завершение игры и много чего ещё.

                                                                                                                                                          итак, вот мои шахматы на ZenGL, с исходниками:
                                                                                                                                                          http://dl.dropbox.com/u/52494730/CHESS_ya2500.zip
                                                                                                                                                          ( ВНИМАНИЕ: они пока НЕ доделаны! )

                                                                                                                                                          --

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

                                                                                                                                                          ИИ доделаю самую малость- сейчас он с равной вероятностью выбирает любой ход из возможных; в окончательной версии он будет чуток по-умнее, НО всё равно его поведение будет описываться парой-другой очень простых принципов.

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

                                                                                                                                                          Добавлено
                                                                                                                                                          --
                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                          на его ходу недоступны никакие кнопки

                                                                                                                                                          имеются ввиду, конечно, ТОЛЬКО четыре нарисованные в игре кнопки.
                                                                                                                                                            всё время с 7-го числа по сегодня- занимался другим проектом, но бросил его. вернулся к шахматам.

                                                                                                                                                            в текущей версии королей, пока что, запросто можно бить.

                                                                                                                                                            только начал делать учёт шахов, как сразу хорошо понял две вещи, которые в-общем и так знал:
                                                                                                                                                            1. всё что можно нужно выносить в процедуры и функции
                                                                                                                                                            2. процедуры и функции должны быть как можно более абстрактными

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

                                                                                                                                                            сначала хотел "кавалерийским наскоком" быстро всё решить, просто сохраняя доску, делая ход, а потом её восстанавливая обратно,
                                                                                                                                                            НО
                                                                                                                                                            всё оказалось не так просто, тем более с моей организацией проги.

                                                                                                                                                            короч- продолжаю долбиться потихонечку.

                                                                                                                                                            а пока- вот, нашёл в нете прикольную игрушку, похожую на шахматы:
                                                                                                                                                            http://onlineguru.ru/16438/view.html
                                                                                                                                                              Прикольно. Но было бы неплохо сделать, чтобы колобок мог перемещаться не на целую клетку, а были промежуточные шаги.
                                                                                                                                                                SmK, на данный момент я уже шахматы делаю:
                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                итак, вот мои шахматы на ZenGL, с исходниками:
                                                                                                                                                                http://dl.dropbox.com/u/52494730/CHESS_ya2500.zip
                                                                                                                                                                ( ВНИМАНИЕ: они пока НЕ доделаны! )


                                                                                                                                                                там они вместе с исходниками. а до этого- крестики-нолики делал. для разминки и тренировки в программинге.

                                                                                                                                                                а колобка я давно делал- несколько лет назад.

                                                                                                                                                                делая свои шахматы я уже реализовал качественную 2d-отрисовку.

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

                                                                                                                                                                  если бы помнил точно, как юзать ООП в Delphi, и если бы не поленился сделать фунцию вычисления перевёрнутых координат для перевёрнутой доски, то прога была бы вообще близка к идеалу. а так- останется немного кривой: нельзя переворачивать доску и вообще жмакать баттоны, пока движется фигура. ну и вообще, по мелочи.

                                                                                                                                                                  сделал учёт шахов: теперь и юзверь и ИИ вынуждены уходить от угрозы королю. для этого понадобилось не так уж много строк, НО вначале пришлось два дня переписывать всю прогу.

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

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

                                                                                                                                                                  настроение самое оптимистичное- больших проблем больше не предвидится. предвидится неминуемая победа)))
                                                                                                                                                                    моя родная сестра беременна,
                                                                                                                                                                    а я не выдержал, и таки выкладываю свою недоделку:
                                                                                                                                                                    http://dl.dropbox.com/u/52494730/CHESS/2011_12_20/chess_ya2500.zip

                                                                                                                                                                    на данный момент добавлено:
                                                                                                                                                                    1. нормальное завершение партии: выводится соообщение о том, кого заматовали(или что там ещё бывает), и можно нормально начать новую партию.
                                                                                                                                                                    2. короли вынуждены избегать шахов, а ИИ стремится поставить мат(хоть и очень не умело).

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

                                                                                                                                                                    выбранным движком ZenGL я пока очень доволен(но мне не так уж много от него и требовалось. вот бы ещё русский шрифт под него найти покрупнее и покрасивше).

                                                                                                                                                                    а вот выбранным файлохранилищем(Dropbox) я не очень доволен: ссылка каким-то образом ассоциируется с файлом у меня на компе, и когда я удалил старую версию шахмат, старая ссылка(дропбоксовская, в это теме чуть раньше) перестала работать. такие эффекты мне совершенно не желательны. впрочем, быть может я пока что просто не разобрался, и всё можно сделать как надо?..
                                                                                                                                                                      не хочешь себе просто блог завести?
                                                                                                                                                                      user posted image
                                                                                                                                                                        Цитата antonn @
                                                                                                                                                                        не хочешь себе просто блог завести?

                                                                                                                                                                        А чем тут не блог? ;)

                                                                                                                                                                        Цитата ya2500 @
                                                                                                                                                                        вот бы ещё русский шрифт под него найти покрупнее и покрасивше).

                                                                                                                                                                        Так конвертишь понравившийся шрифт в картинку, и работаешь уже с ней...

                                                                                                                                                                        Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                          добавление рокировки в мои шахматы стало настоящим издевательством над моим интеллектом.

                                                                                                                                                                          кто бы мог подумать, что делать шахматы- такая хитрая задача.

                                                                                                                                                                          передо мной в полный рост стал выбор:
                                                                                                                                                                          - либо я вспоминаю ООП на Дельфи
                                                                                                                                                                          - либо пересаживаюсь на Си
                                                                                                                                                                          - либо бросаю шахматы недоделанными

                                                                                                                                                                          я предпочёл пересесть на MS Visual C++.

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

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

                                                                                                                                                                          повыбирал движки:
                                                                                                                                                                          выбрать движок для 3d игры
                                                                                                                                                                          Движок для tycoon

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

                                                                                                                                                                          однозначно делать буду на MS Visual C++ и это будет что-то совсем простое.

                                                                                                                                                                          upd:
                                                                                                                                                                          и, да- я добавил в свои шахматы превращение пешек в ферзей, на чём версия на Дельфи, похоже и остановится.

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

                                                                                                                                                                            Я даже как-то встречал задачу, в которой выигрыш достигался превращением пешки в конкретную фигуру, а при неправильном превращении получалась ничья.
                                                                                                                                                                            Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                                                                                                                                                                              Цитата amk @
                                                                                                                                                                              Пешки могут превращаться не только в ферзей, но и в любую другую фигуру (слона, коня, ладью).

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

                                                                                                                                                                              а сейчас хочу на C++ сделать что-нить другое.

                                                                                                                                                                              пока что ищу, думаю:
                                                                                                                                                                              быстрое попиксельное заполнение экрана

                                                                                                                                                                              но ничего такого, что бы меня зацепило, пока не придумывается.
                                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                                пока не придумывается

                                                                                                                                                                                буду я, наверное, доводить до ума колобка и шахматы. на Visual C++ с 2d-движком.
                                                                                                                                                                                  просто интересно:

                                                                                                                                                                                  "Научитесь программировать за десять лет" Питер Норвиг.
                                                                                                                                                                                  Цитата
                                                                                                                                                                                  ..получил 248 результатов. Первые 78 указывали на компьютерные книги, а под номером 79 стояла книга Learn Bengali in 30 days (Изучите бенгальский язык за 30 дней). Я заменил слово “days” (дни) словом “hours” и получил такие же удивительные результаты: запрос возвратил еще 253 книги, среди которых первые 77 были компьютерными книгами, а за ними под номером 78 следовала книга Teach Yourself Grammar and Style in 24 Hours (Овладейте грамматикой и стилем за 24 часа). Из общего количества в 200 книг, в наибольшей степени соответствующих запросу, 96% были компьютерными книгами.

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

                                                                                                                                                                                  Цитата
                                                                                                                                                                                  ..я предлагаю следующий рецепт достижения успеха в программировании:..

                                                                                                                                                                                  http://www.williamspublishing.com/21-days.html
                                                                                                                                                                                    целыми днями флужу на форумах. надо брать себя в руки.
                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                      целыми днями флужу на форумах. надо брать себя в руки.

                                                                                                                                                                                      "Пиши игры, будь мужиком, блеать". :D
                                                                                                                                                                                        Polinom2686, пишу))
                                                                                                                                                                                        щазз делаю колобка на Visual C++ под HGE.

                                                                                                                                                                                        освоение C++ идёт медленнее, чем предполагалось.

                                                                                                                                                                                        собираюсь до конца недели хоть что-то сделать, а потом- переключусь на шахматы.
                                                                                                                                                                                        шахматы хочу сделать хорошо и до конца.
                                                                                                                                                                                          хочу добавить в свой "дневник разработчика"(то бишь- в ЭТУ тему) книгу "создание игрового уровня за 11 дней". она даёт хороший пример планирования при работе над чем-бы-то-ни-было:
                                                                                                                                                                                          http://www.gamesmaker.ru/142-sozdanie_igrovogo_urovnya_za_11_dnej/

                                                                                                                                                                                          Добавлено
                                                                                                                                                                                          ещё хочу сказать, что создание игр- отличный способ творческого самовыражения.
                                                                                                                                                                                            выкладываю набросок игры про Колобка на 2d-движке:

                                                                                                                                                                                            вдоволь навоевавшись с Visual C++ и с HGE, выкладываю результат своих усилий (делано в MS Visual C++ Express):
                                                                                                                                                                                            http://dl.dropbox.com/u/52494730/Kolobok/2012_01_21/0016.zip
                                                                                                                                                                                            для работы программы достаточно файлов из папки Debug, всё остальное- для тех, кто хочет порыться в исходниках.

                                                                                                                                                                                            все спрайты рисовал сам.
                                                                                                                                                                                            --

                                                                                                                                                                                            на этом я временно оставляю Колобка в покое и принимаюсь за шахматы.

                                                                                                                                                                                            Добавлено
                                                                                                                                                                                            разобраться мне помогали не только здешние форумчане, но и на другом форуме:
                                                                                                                                                                                            http://gcup.ru/forum/45-19693-1
                                                                                                                                                                                              Что-то не работает.
                                                                                                                                                                                              Прикреплённая картинка
                                                                                                                                                                                              Прикреплённая картинка
                                                                                                                                                                                                А у меня просто алерт
                                                                                                                                                                                                Цитата
                                                                                                                                                                                                Программа не запускается!

                                                                                                                                                                                                Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                  похоже, надо доложить ещё каких-то файлов в архив. от HGE или от MS Visual C++. и почему на Delphi с ZenGL не было таких проблем?

                                                                                                                                                                                                  короч- у меня всё запускается, на компе отца- нет. сходу решить проблему не получилось. буду думать.

                                                                                                                                                                                                  Polinom2686, Астарот, спасибо за попытку. без вас я о таком косяке и не узнал бы.

                                                                                                                                                                                                  вообще, в этой поделке почти ничего нет. самое интересное там- пиксель арт стены(wall.png)
                                                                                                                                                                                                  --

                                                                                                                                                                                                  и, да- хочу поделиться ссылкой, по которой можно найти 2d-платформер, выполненный на конструкторе:
                                                                                                                                                                                                  http://gcup.ru/forum/28-15605-254259-16-1308849878
                                                                                                                                                                                                  не ожидал, что на каком-то конструкторе можно сделать такую вещь. плавные движения, качественная отрисовка(если отключить посторонние эффекты клавишами F1 и F2).

                                                                                                                                                                                                  на HGE у меня пока не получилось такого качественного движения(а вот на ZenGL движение было вполне качественным). тут есть о чём задуматься.

                                                                                                                                                                                                  впрочем, скорее всего, я пока просто не освоился с новым ЯП и движком.

                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                  Цитата ya2500 @
                                                                                                                                                                                                  Polinom2686, Астарот, спасибо за попытку. без вас я о таком косяке и не узнал бы.

                                                                                                                                                                                                  Цитата ya2500 @
                                                                                                                                                                                                  короч- у меня всё запускается, на компе отца- нет. сходу решить проблему не получилось. буду думать.
                                                                                                                                                                                                    Цитата ya2500 @

                                                                                                                                                                                                    короч- у меня всё запускается, на компе отца- нет. сходу решить проблему не получилось. буду думать.

                                                                                                                                                                                                    Поставь virtual PC и проверяй на здоровье!

                                                                                                                                                                                                    Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                      итак, проблема решена:

                                                                                                                                                                                                      оказывается, в MS Visual C++ нужно переключаться с режима Debug на режим Release, что бы сделать законченный продукт. я уже начинаю любить Си особой, мазохистской любовью.

                                                                                                                                                                                                      исходники я уже выложил выше, так что кладу только то, что необходимо для запуска моей поделки:
                                                                                                                                                                                                      http://dl.dropbox.com/u/52494730/Kolobok/2012_01_22/Release.zip

                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                      ну как- работает?
                                                                                                                                                                                                        Цитата ya2500 @
                                                                                                                                                                                                        ну как- работает?

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

                                                                                                                                                                                                        Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                          Астарот, ну, я пока тока осваиваюсь с новым ЯП и движком.

                                                                                                                                                                                                          куча уроков по HGE есть здесь:
                                                                                                                                                                                                          http://hge-blog.ru/17_urok-1-podklyuchenie-hge-k-microsoft-visual-studio-2008
                                                                                                                                                                                                          в самом низу жмите левую ссылку, чтобы перейти к следующему уроку.
                                                                                                                                                                                                            перевожу сделанные на Delphi шахматы на Visual C++. т е не совсем перевожу- прога должна получиться лучше, чем была. переводить как бы и проще, чем писать, но с другой стороны, мне- проще было писать на Delphi. а, к тому же, при переводе кусков теряется целостное восприятие программы. когда я писал- я чувствовал, что где есть и как оно взаимодействует.

                                                                                                                                                                                                            так или иначе, только что сделал перемещения:
                                                                                                                                                                                                            http://dl.dropbox.com/u/52494730/CHESS/2012_01_29/0011.zip
                                                                                                                                                                                                            перемещать можно любую фигуру в любую ячейку.

                                                                                                                                                                                                            в архиве- исходники, экзешник и всё необходимое для его запуска- в папке Debug.

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

                                                                                                                                                                                                            с реализацией перемещений связан один тонкий момент, касающийся различий движков ZenGL и HGE:

                                                                                                                                                                                                            1) на ZenGL я вызывал функцию обсчёта 100раз в секунду и каждый раз при вызове смещал фигуру ровно на один пиксел наискось или прямо. при этом я знал, что функция отрисовки вызывается так часто, как может, и всегда- чаще, чем 100раз в секунду. в-общем такая работа меня устраивали, а таймеры в ZenGL организованы вообще замечательно.

                                                                                                                                                                                                            2) на HGE я сначала сделал аналогично тому, как показано в демке с Зазакой(там красиво летает куча этих покемонов)- функции обсчёта и отрисовки вызываются так часто, как могут. при этом в функии обсчёта, исходя из времени, прошедшего от последней отрисовки, вычисляется, насколько нужно сместить спрайт. звучит логично. НО при таком перемещении спрайт часто смещается на дробные значения и, поскольку в моих спрайтах шахмат часто встречаются линии толщиной всего в 1-н пиксел, то картинка слегка портилась- белая линия на чёрной фигуре иногда превращалась в 1-2 серые линии.

                                                                                                                                                                                                            3) текущая версия перемещения сделана по иному принципу:
                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                  // отрисовка плавного перемещения запускается здесь:
                                                                                                                                                                                                                                  FgDst.fx=Cursor.fx ;
                                                                                                                                                                                                                                  FgDst.fy=Cursor.fy ;
                                                                                                                                                                                                                                  FgDst.sx=(float)(FgDst.fx*46)+40;
                                                                                                                                                                                                                                  FgDst.sy=(float)(FgDst.fy*46)+70;
                                                                                                                                                                                                                                  FgCur.sx=(float)(FgSel->x*46)+40;
                                                                                                                                                                                                                                  FgCur.sy=(float)(FgSel->y*46)+70;
                                                                                                                                                                                                                                  FgMvng = true;
                                                                                                                                                                                                                                  prev_time = timer;

                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                  float dt= hge->Timer_GetDelta();
                                                                                                                                                                                                                  timer+= dt;

                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                  // перемещение
                                                                                                                                                                                                                  if(timer>prev_time+0.01)
                                                                                                                                                                                                                  {
                                                                                                                                                                                                                      if(FgCur.sx<FgDst.sx) FgCur.sx++;
                                                                                                                                                                                                                      if(FgCur.sy<FgDst.sy) FgCur.sy++;
                                                                                                                                                                                                                      if(FgCur.sx>FgDst.sx) FgCur.sx--;
                                                                                                                                                                                                                      if(FgCur.sy>FgDst.sy) FgCur.sy--;
                                                                                                                                                                                                                      prev_time+=(float)0.01;
                                                                                                                                                                                                                  }
                                                                                                                                                                                                            -выдернуто из разных функций, но суть, я думаю, понятна.

                                                                                                                                                                                                            FgDst - место назначения перемещаемой фигуры
                                                                                                                                                                                                            fx, fy- координаты поля на шахматной доске (0..7,0..7)
                                                                                                                                                                                                            sx, sy- координаты на экране
                                                                                                                                                                                                            FgCur - текущее место нахождения перемещаемой фигуры

                                                                                                                                                                                                            теперь перемещение происходит без искажений))
                                                                                                                                                                                                            Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                              обзор поделок начинающих игроделов на гцупе:
                                                                                                                                                                                                              http://gcup.ru/forum/70-6940-105403-16-1278004071
                                                                                                                                                                                                              мне было интересно посмотреть))

                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                              в шахматах на данный момент сделано:
                                                                                                                                                                                                              - ну, почти всё сделано, и главное: теперь гамер может щёлкать по кнопочкам даже во время перемещения фигур- переворачивать доску, например))
                                                                                                                                                                                                              НЕ сделаны:
                                                                                                                                                                                                              - ИИ(сделаю несколько версий шахмат, в первой будет слабенький ИИ)
                                                                                                                                                                                                              - рокировка(нужно либо наставить костылей либо переписать всё заново)
                                                                                                                                                                                                              - превращение пешек(откладываю на потом создание окошка выбора)
                                                                                                                                                                                                              - правило битого поля(откладываю на потом)
                                                                                                                                                                                                              - этюды(хочу, чтобы в последних версиях можно было исследовать заложенные в игру этюды)

                                                                                                                                                                                                              и как бы работа столько времени над одним и тем же приедается, НО с другой стороны- хрен бы я сделал другой сложный проект сразу на MS Visual C++. так что подход был выбран верный- довести до ума игрушку, начатую на Delphi.
                                                                                                                                                                                                                А взятие на проходе твои шахматы умеют?
                                                                                                                                                                                                                Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                                                                                                                                                                                                                  Цитата amk @
                                                                                                                                                                                                                  А взятие на проходе твои шахматы умеют?

                                                                                                                                                                                                                  Цитата ya2500 @
                                                                                                                                                                                                                  - правило битого поля(откладываю на потом)

                                                                                                                                                                                                                  это- одно и то же разными словами. т е- будут уметь обязательно. и при этом будет выводиться какая-нить надпись поясняющая, типа: "взятие на проходе". потому как мои шахматы ориентированы на молодое поколение, которые могут не понять, как их пешку побили.

                                                                                                                                                                                                                  и, да- надо будет систему вывода сообщений тоже переделать. в-общем и целом, похоже я столкнулся со всеми сложностями, какие только были.

                                                                                                                                                                                                                  теперь непредвиденные сложности могут возникнуть только когда я продвинутый интеллект буду делать, просчёт на 1-2 хода вперёд.
                                                                                                                                                                                                                  Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                    "Взятие на проходе" - это скорее возможный ход, который возникает в определенной ситуации, а не правило. Многие существующие шахматные программы, кстати его не различают. Хорошо хоть с рокировку под боем не пытаются делать.
                                                                                                                                                                                                                    А вот правило 40 ходов или тройного повтора позиции это именно правила (соглашения). Так же как ничья при отсутствии возможности хода (пате).

                                                                                                                                                                                                                    Для молодого поколения не помешает изложить правила, и привести там основную терминологию. И в общепринятом и в модерновом вариантах.
                                                                                                                                                                                                                    Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                                                                                                                                                                                                                      добавил ИИ. столкнулся с глюками. почему- не могу понять. иногда, когда я ставлю компу шах, игра вылетает с ошибкой. когда писал на Delphi, таких глюков не было.

                                                                                                                                                                                                                      думаю, что делать дальше. варианты следующие:
                                                                                                                                                                                                                      1. отложить пока шахматы и начать другой проект.
                                                                                                                                                                                                                      2. детально продумать устройство программы шахмат и написать её максимально просто и корректно.

                                                                                                                                                                                                                      на всякий случай выкладываю сделанное:
                                                                                                                                                                                                                      http://dl.dropbox.com/u/52494730/CHESS/2012_02_05/0020.zip
                                                                                                                                                                                                                      на мой взгляд, всё довольно прозрачно.

                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                      написание проги преследовало две цели:
                                                                                                                                                                                                                      1. самообучение
                                                                                                                                                                                                                      2. создание хорошего кода, на котором и другие могли бы поучиться

                                                                                                                                                                                                                      буду преодолевать трудности и когда-нить добью свои шахматы до конца.
                                                                                                                                                                                                                        Цитата ya2500 @
                                                                                                                                                                                                                        когда я ставлю компу шах, игра вылетает с ошибкой

                                                                                                                                                                                                                        Какой у тебя неуравновешенный ИИ. Ты ему дай успокоительного. :D
                                                                                                                                                                                                                          в данный момент осваиваю LabView 2010 Pro, т к на работе, куда я пытаюсь устроиться, требуется знание C++ и LabView. директор вернётся в город только в понедельник, и примерно в пн-пт я смогу пройти собеседование. а до тех пор мне в срочном порядке нужно изучить C++, LabView и English.

                                                                                                                                                                                                                          самое непонятное- как учить C++. с синтаксисом я уже освоился. что там ещё важно? ООП? работа с памятью? взаимодействие с ОС?
                                                                                                                                                                                                                          и ещё надо бы выяснить, как совмещаются LabView и C++.

                                                                                                                                                                                                                          есть ещё другие вакансии, где нужно знать C++ и Python, но платят мало или где нужен C#,UML,SQl.
                                                                                                                                                                                                                            Как вставить в LabVIEW код на C :
                                                                                                                                                                                                                            http://www.youtube.com/watch?v=D6xM7DRbOXQ
                                                                                                                                                                                                                              user posted image
                                                                                                                                                                                                                              Самиздат sources.ru:
                                                                                                                                                                                                                              1
                                                                                                                                                                                                                              2
                                                                                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                                                                                Как вставить в LabVIEW код на C :

                                                                                                                                                                                                                                О, Боже. Мне плохо. Я не хочу вспоминать эти ужасные практикумы...
                                                                                                                                                                                                                                  теперь учу Python. с той работой, где labView, какая-то ерунда- то ждали, пока кто-то приедет из отпуска, теперь просят подождать до пятницы, пока они примут решение.

                                                                                                                                                                                                                                  короч- перечитав объяву про питон, неожиданно увидел, что там написано не 10-15тыр, а 15-50тыр, что в корне меняет дело. вообще-то я по-началу разевать варежку на хорошую зарплату не собираюсь, НО я так понял, что на низкооплачиваемых работах проггеров юзают не так, чтобы они могли получить хороший полезный опыт. а мне нужен именно опыт работы настоящим программистом.

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

                                                                                                                                                                                                                                  тем не менее, надеюсь, что мне выдадут какое-нить задание, с которым я разберусь блестяще и в рекордные сроки. такое обучение вродь не затратно для компании, а в итоге они могут получить хорошего сотрудника. программисты у нас завсегда востребованы, так что профит есть.
                                                                                                                                                                                                                                    Удачи! :)
                                                                                                                                                                                                                                      Цитата Polinom2686 @
                                                                                                                                                                                                                                      Удачи! :)

                                                                                                                                                                                                                                      спасибо.

                                                                                                                                                                                                                                      здесь есть всякие полезные программерам тесты: http://www.quizful.net/test
                                                                                                                                                                                                                                      очень хорошо, что я узнал об этом сайте, но жаль, что только сейчас.

                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                      очень хороший ресурс для обучения SQL: http://sql-ex.ru/
                                                                                                                                                                                                                                      сижу там со среды включительно и до сих пор(работодатель направил).

                                                                                                                                                                                                                                      если у вас знания по SQL на нуле- сразу щёлкайте упражнения SELECT (обучающий этап). там под каждым упражнением даётся ссылка на материал, который нужно изучить, чтобы это упражнение выполнить. очень удобно!

                                                                                                                                                                                                                                      выполнив несколько десятков упражнений обучающего этапа, приступайте к упражнениям по DML. там немножко сложнее, но нового материала требуется знать самую малость- в-основном всё то же самое.
                                                                                                                                                                                                                                        ещё на http://www.brainbench.com/ есть сертификация, но там обычно денег хотят. зато их сертификаты котируются почти везде.
                                                                                                                                                                                                                                          изучить основы Python3(и не только python) можно здесь: http://informatics.mccme.ru/moodle/ нашёл только сейчас. окончательное собеседование + первое и последнее 'испытательное тестирование' будет завтра днём. нужно освоить python + фреймворки к нему: Twisted Network Framework, Django Web Framework.

                                                                                                                                                                                                                                          два дня проходил гугл-класс по питону, а при тестировании выяснилось, что за эти два дня очень много не дали. совершенно не эффективно время потратил. не уверен, что по этой ссылке найду всё, что нужно, НО по крайней мере материал более упорядочен и плотен, чем в гугл-классе.

                                                                                                                                                                                                                                          тест, давший представление о том, сколько всего я ещё не знаю, проходил на том сайте, что давал уже выше:
                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                          к счастью, по Django там тоже есть тест, так что у меня есть шансы это всё выучить. осталось найти материал + тесты по twisted network framework.

                                                                                                                                                                                                                                          ---------------

                                                                                                                                                                                                                                          и, да- чтобы изучить англ.яз. достаточно получить основы грамматики на каких-нить курсах, а потом смотреть и переводить видюшки. каждый день. я смотрю видюшки по инглишу здесь: http://lingualeo.ru/jungle%3C/div%3E%3C/div%3E там есть видео\уроки англ яз\. другой способ выбрать простых видюшек для начинающих- сделать фильтр по сложности материала(столбики вверху справа). если лень смотреть и переводить- просто смотрите. при этом желательно, чтобы вы понимали б0льшую часть слов И главное- смотрите инглиш каждый день, если хотите изучить англ.яз.

                                                                                                                                                                                                                                          ещё есть такая тонкость: для сдачи тестов по инглишу, главное- уметь сдавать тесты такого типа.

                                                                                                                                                                                                                                          ---------------

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

                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                          --

                                                                                                                                                                                                                                          блин, лучше всего было бы начать изучение python сразу с официальной документации:
                                                                                                                                                                                                                                          http://informatics.mccme.ru/moodle/mod/res...iew.php?id=1987
                                                                                                                                                                                                                                          официальная документация частично переведена здесь:
                                                                                                                                                                                                                                          http://informatics.mccme.ru/moodle/mod/res...iew.php?id=1991
                                                                                                                                                                                                                                            сегодня- день числа ПИ:
                                                                                                                                                                                                                                            Цитата
                                                                                                                                                                                                                                            День числа пи отмечается любителями математики 14 марта в 1:59:26.

                                                                                                                                                                                                                                            Этот неофициальный праздник придумал в 1987 году физик из Сан-Франциско Ларри Шоу (Larry Shaw)[1], который подметил, что в американской системе записи дат (месяц / число) дата 14 марта — 3/14 — и время 1:59:26 совпадает с первыми разрядами числа \pi = 3,1415926….
                                                                                                                                                                                                                                            Обычно празднуют в 1:59:26 дня (в 12-часовой системе), но придерживающиеся 24-часовой системы считают, что в этот момент время 13:59, и предпочитают отмечать ночью.

                                                                                                                                                                                                                                            В это время читают хвалебные речи в честь числа \pi, его роли в жизни человечества, рисуют антиутопические картины мира без \pi, пекут и едят «пи-рог» («pie») с изображением греческой буквы «пи» или с первыми цифрами самого числа, пьют напитки и играют в игры, начинающиеся на «пи», решают математические головоломки и загадки, водят хороводы вокруг предметов, связанных с этим числом.


                                                                                                                                                                                                                                            Это интересно:
                                                                                                                                                                                                                                            Цитата
                                                                                                                                                                                                                                            Ученые до сих пор пытаются разгадать, каким образом в нем отсутствует какая-либо последовательность и цикличность. Что это значит: в десятичном разложении Пи есть любая последовательность цифр, которые не вычисляются путем простых уравнений (это и есть трансцендентность) какую только можно себе представить. Где-то там можно даже увидеть редко встречающуюся последовательность из миллиона нетривиальных нулей. Группе токийских ученых и математиков во главе с профессором Ясумаса Канада удалось поставить мировой рекорд в вычислениях числа Пи до 12411-триллионного знака. (Книга рекордов Гиннесса).

                                                                                                                                                                                                                                            Дэвид Бэйли (Национальная лаборатория Лоуренса Беркли в США) со своими коллегами разработал специальную программу, которая позволяла увидеть любые цифры после запятой числа Пи в независимости от предыдущих. То есть как бы наугад: раз – и вы в любой точке последовательности цифр! Отсюда сделали вывод, что цифры числа «пи» ведут себя в соответствии с теорией хаоса и их последовательность действительно случайна (проверяли 500 млрд. знаков числа).

                                                                                                                                                                                                                                            Не будем далее вдаваться в математические просторы. Отметим, зачем нужны такие глобальные исследования и вычисления. Считается, что в числе Пи зашифровано абсолютно всё! Начиная от вашего номера телефона и заканчивая шедеврами будущей мировой литературы. Существует даже целая теория, что число пи управляет миром, ибо является неиссякаемым источником закодированной информации обо всем. Кроме всего такого мистического, пока ученые пытались выяснить цифры после запятой, были открыты ценные научные методы и целые науки. В наши дни результаты этих исследований активно применяются в криптографии и при выведении нового алгоритма генератора случайных чисел.

                                                                                                                                                                                                                                            Число ПИ

                                                                                                                                                                                                                                            По-моему, самое полезное применение числа Пи – это как действенный способ тренировки памяти =) Кстати японец Хидеаки Томойори может воспроизвести число ПИ до 40 000 знаков (10 лет тренировок как никак).
                                                                                                                                                                                                                                              статья для игроделов:
                                                                                                                                                                                                                                              Цитата
                                                                                                                                                                                                                                              Как рассказать про вашу игру засранцу
                                                                                                                                                                                                                                              Даже не ожидайте, что аудитория вашего сайта, интервью или ролика будет состоять исключительно из умных, серьёзных и заинтересованных людей. Потому что в худшем случае это могу прочесть я — а я тот ещё засранец.

                                                                                                                                                                                                                                              http://habrahabr.ru/post/140636/
                                                                                                                                                                                                                                                Хмммм... :rolleyes:

                                                                                                                                                                                                                                                Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                                                                  статья реальных чуваков, пробующих заработать игродельчеством:
                                                                                                                                                                                                                                                  http://habrahabr.ru/post/143724/
                                                                                                                                                                                                                                                    Талантливый клон остается клоном :-?

                                                                                                                                                                                                                                                    Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                                                                      перевод статьи 2006-го года "секс ложь и видеоигры":
                                                                                                                                                                                                                                                      Скрытый текст
                                                                                                                                                                                                                                                      Может, кто еще не видел. Эта статья появилась в журнале Atlantic Monthly в ноябре 2006 года - первая статья о компьютерных играх в журнале такого уровня "серьезности". Центральная тема - "интерактивная драма" Facade, а также ненавязчивые дифирамбы еще одному свеженькому проектику. Автор - довольно известный социальный обозреватель - не очень компетентен в игрушках (по собственному признанию), поэтому статья читается довольно своеобразно... и тем не менее, это интересное приглашение к размышлению о судьбах компьютерных игр и нашего любимого жанра в частности. Наслаждайтесь и комментируйте smile


                                                                                                                                                                                                                                                      Что было бы, если бы компьютерная программа соединила в себе действие и графику видеоигры с эмоциональной силой высокого искусства? Результат этого сближения мог бы произвести революцию в индустрии интерактивных развлечений – и даже изменить значение самого слова «играть».

                                                                                                                                                                                                                                                      Секс, ложь и видеоигры
                                                                                                                                                                                                                                                      (Джонатан Раух)

                                                                                                                                                                                                                                                      Майкл Матеас – человек особого сорта, если о таком человеке можно говорить как о принадлежащем к какому-либо сорту. Когда-то он создал домашнюю робо-пальму, наделенную искусственным интеллектом (или чем-то вроде того), которая могла просматривать вашу электронную почту и изменять свою форму в зависимости от тона прочитанного письма. Это было в 1998 году, когда Матеас был студентом аспирантуры, а в голове его витали несколько авангардных идей. «Офисная пальма №1» («Office Plant #1»), как называлось его детище, «поедала» почтовый траффик и, соответственно, росла, уменьшалась, цвела, засыхала и помахивала своими листьями, похожими на фортепианные струны. Конечно, она еще и посвистывала, пела, стонала и жаловалась на жизнь. Тем не менее, вскоре после завершения «Офисной пальмы №1», Матеас отложил этот проект в сторону. Его стали интересовать более серьезные вещи, например, создание совершенно новых форм искусства.
                                                                                                                                                                                                                                                      В это время Эндрю Стерн, программист и дизайнер одной ныне не существующей компании по разработке видеоигр, проектировал виртуальных домашних животных, наделенных искусственным интеллектом (или чем-то вроде того). Они назывались «Lюбимцы» («Petz») и некоторое время были хитом в индустрии видеоигр. Сначала, в 1995м, появились «Sобаки» («Dogz»), затем «Коshки» («Catz»), и, наконец, «Пупsики» («Babyz») – восхитительные мультипликационные создания, обитающие на жестком диске компьютера. Работая над эмоциональной привлекательностью и игровой реалистичностью этих виртуальных существ, Стерн стал наделять их неким искусственным сознанием: целями, характерами, воспоминаниями. Внезапно он понял, что хочет работать со взрослыми персонажами, вступающими в реальные жизненные отношения. Его стали интересовать более серьезные вещи, например, создание совершенно новых форм искусства.
                                                                                                                                                                                                                                                      Вскоре после появления «Lюбимцев» Стерн стал посещать некоторые конференции по искусственному интеллекту – те самые, на которых часто бывал и Матеас. Вероятно, Стерн, демонстрировавший своих (почти) разумных виртуальных животных, неизбежно должен был столкнуться с Матеасом, демонстрировавшим свою (почти) разумную робо-пальму. И, разумеется, каждый из них очень быстро узнал в другом родственную душу.
                                                                                                                                                                                                                                                      В определенных узких кругах ученых, занимающихся искусственным интеллектом, как и в кругах игровых дизайнеров, время от времени появляются теории о компьютерной программе, которая могла бы соединить в себе графический реализм современной видеоигры и эмоциональное воздействие высокого искусства. Это концепция так называемой «интерактивной драмы». В ней можно было бы встретить искусственных людей, с которыми вы могли бы беседовать, узнавая их ближе, и в конце концов полюбить или возненавидеть их. Программа могла бы организовывать драматические ситуации, скрывающие в себе внезапные открытия и сюжетные повороты. Погружаясь в этот мир, вы чувствовали бы себя так, как если бы попали в разгар действия мыльной оперы или реалити-шоу.
                                                                                                                                                                                                                                                      «У меня были некоторые мысли о том, как это можно сделать», говорит Стерн. С другой стороны, Матеас с детства мечтал создавать искусственных людей. Теперь он получил возможность исполнить свою мечту, создавая искусственных актеров. В конце концов, есть ли лучший способ научить компьютер «играть в человека», чем научить его играть?
                                                                                                                                                                                                                                                      В 1998 году, после жаркой дискуссии на конференции в Сноуберде, штат Юта, Матеас и Стерн решили объединить усилия. Матеас вспоминает: «Разговаривая с Эндрю, мы как бы подталкивали друг друга к тому, чтобы прыгнуть так высоко над мейнстримом, как только получится». Они приняли решение создать игру, которая отрицала бы все существующие конвенции игровой индустрии. Они рассматривали свою игру как исследовательский проект и рассчитывали, что ее создание займет два года. На самом деле им понадобилось больше пяти лет. Теперь они начинают работу над более полной версией игры, на этот раз - коммерческой.
                                                                                                                                                                                                                                                      Они считают, что интерактивная драма может стать для этого века тем же, чем для прошлого стал кинематограф. Недавно, когда я провел несколько дней, знакомясь с ними, я спросил, почему они не пробуют сделать что-то менее амбициозное, например, создать более жизненные персонажи для существующих видеоигр. Матеас ответил: «Это была бы, можно сказать, постепенная инновация, а это не интересно, мне кажется, ни одному из нас. Нас интересуют только революционные инновации».

                                                                                                                                                                                                                                                      Если сравнивать сегодняшнюю индустрию видеоигр с человеком, то она находится в том состоянии, которое раньше называли «этот ужасный возраст». И вдруг оказывается, что в текущем году доход этого угловатого длинноногого подростка составляет, по оценкам консалтинговой компании ПрайсуотерхаузКуперз, 31 миллиард долларов в мировом масштабе, из которых около десяти миллиардов - только в США. По прогнозам Прайсуотерхауз, если темп роста в отрасли сохранится, то к 2010 году она составит конкуренцию мировой индустрии звукозаписи. Тем не менее, при всей своей славе и процветании, она остается, в определенном смысле, в собственной узкой нише. В Соединенных Штатах ее оборот меньше, чем у индустрии парков развлечений; а в 2010 году, по оценкам Прайсуотерхауз, даже при таком стремительном росте он составит всего треть от оборота киноиндустрии, рынка радиопрограмм или книг, и приблизительно одну седьмую от рынка телепрограмм.
                                                                                                                                                                                                                                                      В компьютерные игры сейчас играет много людей, и не только детей: по данным Ассоциации производителей развлекательного программного обеспечения (ESA), возраст среднестатистического игрока составляет тридцать три года. Но в то время как практически каждый человек регулярно слушает музыку, читает книги или смотрит фильмы, многие взрослые никогда не берут в руки джойстика. В игровых каталогах 2005 года фривольная или жестокая продукция, имеющая рейтинг М («для взрослых»), составляла всего одну седьмую часть; сложившийся стереотип видеоигр как сплошной антисоциальной стрелянины – не более чем стереотип. И головоломок, и виртуальных домашних животных, и стратегических, и социальных игр существует очень много. Но молодежные жанры, ориентированные на выброс адреналина, действительно занимают ведущее положение. Согласно ESA, почти три четверти игр-бестселлеров на рынке – симуляторы различных видов борьбы, боевики, игры на реакцию, гоночные и спортивные имитаторы. Сексисты назвали бы все это игрушками для мальчиков.
                                                                                                                                                                                                                                                      Графика в лучших современных играх захватывает дух, и едва ли уступает графике их “физика” – способность к созданию мира, который воспринимается как окружающая нас реальность. Однако многие игровые дизайнеры обеспокоены “эпидемией сериалов” и творческой ограниченностью, царящей в этой отрасли. Уоррен Спектор, один из ведущих разработчиков на рынке, в недавней статье для посвященного видеоиграм журнала «Эскапист», спрашивает: «Намерены ли мы бороться с этим однообразием нашей продукции, которое роковым образом ограничивает нашу аудиторию? Я вижу, что мы по-прежнему работаем для того же узкого слоя мальчиков-подростков, для которого работали и всегда. Если это так, то для нас это потеря всяких возможных перспектив».
                                                                                                                                                                                                                                                      «Не существует жанра драмы, не существует жанра комедии», сказал мне недавно Эндрю Стерн. «В общем-то, сейчас существуют только боевики». Можно добавить – немые боевики. Ежегодная ярмарка видеоигр в Лос-Анджелесе, «Экспозиция Электронных Развлечений», сокращенно Е3 – одно из самых громких мест, в которых я когда-либо бывал. И в то же самое время – одно из самых бессловесных.
                                                                                                                                                                                                                                                      В этом году выставка занимала все помещения огромного выставочного центра Лос-Анджелеса. Энергии, которую потребляли тысячи микропроцессоров, мониторов и звуковых систем, хватило бы на приличный пригород. Возьмите толпу на Таймз-Сквер, смешайте с ослепительными технологиями Токио и оглушительными децибелами из ближайшего стерео-кинотеатра, пропорционально добавьте старлеток в стиле Лас-Вегаса (в этом бизнесе они известны как «красотки у стендов»), и вы поймете, как примерно выглядит Е3.
                                                                                                                                                                                                                                                      В мае, прохаживаясь по этой выставке, я видел много игр глупых и много игр явно вторичных: поединки супергероев с гигантскими роботами, скейтбордеров, сверкающих логотипами «Найк», боксеров, которые осыпали друг друга ударами в потоках пота и слюны, и солдат, которые устало тащились через джунгли или снег. Выстояв одну особенно длинную очередь, я очутился в маленькой темной комнате, где разработчики представляли «Stranglehold (Удушающий захват) от Джона Ву» производства Midway. Два борца разносили все вокруг в щепки. «Посмотрите на этот чайный домик - как после бомбежки» - влюбленно произнес дизайнер, - «И каждый раз все выглядит по-другому». Когда он обратил внимание аудитории на то, как реалистичны следы, которые каждая пуля оставляет на стенах, один из посетителей выкрикнул: «Целься в голову!» (аудитория этой презентации, как и всей выставки, состояла из мужчин как минимум на 80 процентов). Но даже в таком хламе удавалось иногда обнаружить примеры удивительного мастерства и оригинальности, и я нашел несколько игр, потрясающих яркостью образов, в том числе один боевик о вторжении инопланетян, «Lost Planet: Extreme Condition (Покинутая планета: Критическое состояние)» производства Capcom, визуальный ряд которого был настолько завораживающим, что я буквально не мог оторвать глаз.
                                                                                                                                                                                                                                                      Только выйдя из зала, я понял, что во всем этом шуме было что-то странное. Громоподобные звуковые эффекты на самом деле маскировали отсутствие каких-либо диалогов. В реальной жизни большинство действительно интересных вещей подразумевают общение с людьми. В этих же играх персонажи могли выдать прописанные в сценарии строчки вроде «Вот теперь можно вышибить кому-нибудь мозги!» или обронить заранее записанную фразу, комментирующую действие, но диалог со мной или друг с другом был абсолютно за пределами их возможностей. Я понял, что если видеоигры и кажутся бесчеловечными, то это происходит из-за того, что в них попросту нет людей. Их эзотерический синтаксис – порожденние набора декораций, в которых прострелить кому-нибудь голову проще простого, но поговорить с кем-нибудь невозможно.
                                                                                                                                                                                                                                                      Месяц спустя я спросил Эндрю Стерна, что он думает о Е3. «Не нравится мне все это» - ответил он, - «Столько усилий и денег брошено во все эти вторичные и бездушные работы. Мне скучно и немного противно». В мейнстримной индустрии мало кто отважится выразить отвращение к собственному продукту, но многие дизайнеры, люди умные и творческие, понимают, что достигли много меньшего, чем позволяет использование их мощного выразительного средства. Они мучаются от недостатка самореализации. Как сказал Уилл Райт, самый известный и успешный американский игровой дизайнер, в одном из переполненных залов Е3: «Интерактивный дизайн – это огромный игрушечный ящик, а мы на самом деле исследовали только маленький его уголок». При других обстоятельствах еще один выдающийся дизайнер, Дэвид Кейдж, сказал: «Что поражает меня в этой индустрии, так это то, что во всем этом поразительно мало смысла».
                                                                                                                                                                                                                                                      Именно смысл – тот катализатор, который превращает действие в драму. Смысл требует слов, а не просто звуков. Он требует персонажей, а не просто фигур. Он требует драматической формы: ощущения действия, ведущего к некоему преобразованию или развязке. Все это и решили дать видеоиграм Стерн и Матеас.

                                                                                                                                                                                                                                                      Майкл Матеас – доцент кафедры компьютерных наук в Калифорнийском университете, Санта-Круз. Среди прочего, в его обязанности входит разработка нового курса для студентов – курса компьютерных игр. Он носит две серьги и его густые каштановые волосы завязаны в длинный хвост. Он низкорослый и с большой головой, так что издалека очень похож на мальчишку. Взгляд его светло-зеленых глаз пронзает насквозь, хотя эта пронзительность не так заметна благодаря его лучезарной улыбке. Он считает себя в равной мере и специалистом по компьютерам, и художником, и удачно совмещает обе эти роли.
                                                                                                                                                                                                                                                      Стерн, наоборот, выглядит настолько обыкновенно, что описать его внешность нелегко: среднего роста, с редеющими каштановыми волосами, мягкими чертами лица и сдержанными, интровертными манерами. В Америке он легко затеряется в любой толпе. Тем не менее, в наших разговорах из всех троих именно Стерн в конце концов всегда оказывался лидером, в частности - благодаря своей четкой и прямолинейной, как у настоящего художника, эстетической позиции. Экономия средств, элегантность и формальная завершенность имеют для него глубоко личное значение.
                                                                                                                                                                                                                                                      Стерну тридцать шесть, он живет в Портленде, Орегон, а детство его прошло в разных городах Восточного Побережья. Матеасу сорок, он вырос в Неваде, в Карсон Сити. В некотором отношении, их детство очень похоже. В 1970х оба открыли для себя видеоигры, которые тогда только зарождались. Они проводили целые дни в игровых залах супермаркетов, а когда в 1977м появилась игровая консоль Атари 2600, они жадно набросились на нее. Им было мало просто играть в игры и вскоре они стали их программировать. В четырнадцать лет Матеас написал приключенческую игру, а так как брат Стерна держал домашнего кролика по имени Бонни, Стерн сделал игру «Атака Бонни», где игрок управлял кроликом, который сбрасывал на прыгающих котов мочу и экскременты. В школьном эссе Матеас заявил, что хочет стать великим игровым дизайнером и разрабатывать игры на основе «цифровых логических схем нового типа, реализующих трехзначную логику». Стерн в это время заинтересовался кино и компьютерной анимацией, и с помощью ручной камеры начал снимать фильмы, в которых натурные съемки были совмещены с анимацией.
                                                                                                                                                                                                                                                      В колледже оба перестали интересоваться видеоиграми. «Я по-прежнему играл», - говорит Стерн, - «но игры уже начинали казаться несколько инфантильными. Я увлекался съемкой фильмов, живыми персонажами, взрослыми персонажами, их историями, основанными на психологии и эмоциях, а в играх ничего этого не было. Когда тебе восемнадцать или двадцать, ты понимаешь, что в искусстве и литературе есть много интересного и ты разочаровываешься в развлечениях, которые ориентированы только на активное действие.»
                                                                                                                                                                                                                                                      Матеас, стремясь к исполнению своей давней мечты об искусственном интеллекте, решил стать ученым и поступил в аспирантуру. Стерна не приняли ни в одну киношколу и в конце концов он устроился на работу в компанию, разрабатывавшую игры. Работа над серией «Lюбимцы» вызвала у него интерес к искусственному интеллекту как необходимой составляющей достоверных персонажей – неважно, людей или животных. С другой стороны, работа Матеаса над проблемой искусственного интеллекта возродила его интерес к играм. Мечта об ИИ была мечтой о создании достоверных виртуальных людей, а игры показались ему идеальной сценой, на которой их можно было бы испытать.
                                                                                                                                                                                                                                                      Когда их пути пересеклись, они уже были единомышленниками, и очень скоро начали задумывать свою анти-игру. Вместо того, чтобы делать игру об игрушечных человечках в подробно прорисованном, но примитивном игровом мире, они делали историю о взрослых людях и взрослых отношениях. Вместо того, чтобы стрелять в персонажей пулями, игрок должен был стрелять словами. Игрок должен был говорить с персонажами – на обычном английском, с помощью клавиатуры, а не джойстика. А персонажи должны были отвечать, отвечать друг другу и игроку. Это значило – подумать только! – что их игра должна была понимать естественный язык и сама говорить на нем. Это уже само по себе – одна из величайших проблем ИИ. Но они хотели еще большего.
                                                                                                                                                                                                                                                      Традиционные игры создают огромные, реалистичные физические миры. Действие новой игры должно было разворачиваться в одном помещении, как в коробке театральной сцены. Вместо пятидесяти часов игры их игра потребует двадцать минут. Вместо прохождения множества уровней, лишенных какого-либо сюжета, игра будет содержать компактное и законченное драматическое действие, как в одноактовой пьесе. «Мы представляли себе, как человек мог бы прийти домой с работы и проиграть ее от начала до конца, как вы можете прийти домой с работы и посмотреть получасовой сериал по телевизору» - говорит Матеас. – «Вы могли бы прийти домой и пережить полчаса интерактивной драмы. Само по себе это полноценный, волнующий опыт. Это развлечение. А потом, на следующий день, вы можете прийти домой с работы и проиграть ее снова так, чтобы произошло что-нибудь другое». Вместо того, чтобы предлагать игроку списки заданий или вариантов, их игра должна была протекать естественно, как сама жизнь.
                                                                                                                                                                                                                                                      Когда Матеас, еще будучи дипломником, рассказал своему руководителю о том, что они задумали, тот ответил, что на такую игру команде из десяти человек потребуется десять лет. Во-первых, таких технологий просто не существовало. Во-вторых, в коммерческой разработке игр часто задействованы десятки людей, а здесь было просто двое парней, один из них вчерашний студент, другой – свободный предприниматель (впоследствии Стерн бросил работу, чтобы полностью сосредоточиться на работе над игрой), которые хотели создать совершенно новый тип компьютерных игр, полагаясь только на свои силы и практически без копейки денег.
                                                                                                                                                                                                                                                      Прежде, чем программировать саму игру, они должны были сконструировать такой язык программирования, на котором эту игру можно было бы написать. Более двух лет ушло у них на разработку того, что они назвали ABL («Язык программирования поведения»), на котором кодируются и управляются виртуальные актеры. «Сознание актеров написано на ABL» - объясняет Матеас. У ABL тоже есть своего рода сознание – его искусственный интеллект достаточно силен, чтобы придумать, как определенный персонаж может, например, одновременно смешивать коктейль, ходить по комнате и кричать на мужа – так же, как и живой актер.
                                                                                                                                                                                                                                                      После этого они написали, тоже с нуля, еще одну программу ИИ, которую назвали мастером драмы. Это было что-то вроде виртуального драматурга и режиссера, который, анализируя действия игрока и персонажей, управляет развитием сюжета и диалогами с тем, чтобы нагнетать драматическое напряжение, а затем привести его к развязке. Наконец, они создали процедуру распознавания естественного языка, которая «слушает» текст, набираемый игроком, и ищет в нем эмоциональные и смысловые ремарки, на которые реагируют персонажи игры.
                                                                                                                                                                                                                                                      К тому времени их игра включала в себя уже целый пакет различных экспериментальных технологий, но о чем будет она сама? Им нужно было построить интенсивное драматическое действие в ограниченном пространстве и всего с несколькими персонажами. Под влиянием пьесы Эдварда Олби «Кто боится Вирджинии Вулф?» и нескольких фильмов («Секс, ложь и видеолента» Стивена Содерберга, «Мужья и жены» Вуди Аллена и «Сцены из супружеской жизни» Ингмара Бергмана), они решили забросить игрока в бурю семейного кризиса. Они наняли актеров, которые записали для них пять часов диалогов – исходный материал, из которого мастер драмы строит двадцать минут игрового действия.
                                                                                                                                                                                                                                                      В конце концов им удалось сделать, по их собственным прикидкам, около тридцати процентов из того, что они задумывали изначально. «Мы надеялись долететь до Луны» - говорит Стерн – «а вылетели только на орбиту.» В июле 2005 года, сидя за компьютером дома у Стерна в Портленде, они вместе нажали кнопку и запустили в интернет новую игру – игру под названием «Фасад (Façade)».

                                                                                                                                                                                                                                                      Когда я брался писать эту статью, то представлял себе, как зазубрю побольше сведений о видеоиграх и со всеми стану держаться со скромным достоинством эксперта. В конце концов, в свое время я много играл в Тетрис. Сохранять хладнокровие мне удавалось около трех минут – именно столько времени ушло на загрузку «NBA Live 06 (Игры Баскетбольной лиги)» от Electronic Arts. Джек Снайдер, работник ESA, двадцати с чем-то лет, вручил мне пульт консоли Microsoft Xbox 360 и перед моими глазами возникли две невероятно реалистичные баскетбольные команды. Отчаянно барабаня по кнопкам, которые видел впервые в жизни, и едва удерживая мяч, я вдруг осознал, что комментатор и его ассистент в игре говорят… обо мне. Точнее, не совсем так – они издеваются надо мной. «Еще один неплохой бросок и опять мимо», говорили они. «Полная неорганизованность», ухмылялись они. Сгорая от стыда, я понял, что этот программный продукт уже никогда не будет меня уважать.
                                                                                                                                                                                                                                                      Полный решимости выдержать все дальнейшие унижения в гордом одиночестве, я купил копию игры «The Elder Scrolls IV: Oblivion (Древние свитки 4: Забвение)», бестселлера от компании Bethesda, названного критикой новым словом в своем жанре. К игре прилагалось руководство на пятидесяти страницах с инструкциями в таком духе: «СНЯТИЕ ЗАКЛЯТИЯ: Снимает магическое заклятие с объекта назначения. Не влияет на способности, болезни, проклятия и постоянные эффекты от магических предметов. Для успешного снятия заклятия мощность Снятия Заклятия должна превышать сопротивляемость заклятия к снятию (вычисляемую на основе стоимости наложения)». Я впал в уныние. Это было так же увлекательно, как изучение Microsoft Windows.
                                                                                                                                                                                                                                                      Запуская игру, я был озадачен и насторожен, но уже очень скоро успешно резал гоблинов, воровал сокровища, накладывал заклятья и исследовал пещеры. Час проходил за часом и я чувствовал сначала просто интерес, затем увлеченность, а под конец просто не мог оторваться. Я чувствовал, что имею дело с мощным выразительным средством. Тетрис не шел с этим ни в какое сравнение.
                                                                                                                                                                                                                                                      Мир «Забвения» огромен. Пресс-секретарь компании сказал мне, что полное его исследование требует пятисот часов игрового времени. В этой игре меня окружали яркие кинематографичные ландшафты, менялась погода, день сменял ночь, в городах жило множество людей. Под ногами зеленела скрупулезно прорисованная трава, над головой синело небо и проплывали перистые облака, вокруг сновало бесчисленное множество различных существ, города сменялись бескрайними просторами. Иллюзия погружения в этот мир граничила с чудом.
                                                                                                                                                                                                                                                      А потом все рушилось. Подходя к какому-нибудь персонажу, я нажимал на кнопку диалога. Персонаж произносил несколько трафаретных фраз в порядке знакомства. В ответ на еще один щелчок мышью проходило несколько отрывков заученного диалога. Современные высокотехнологичные игры передают действие и окружение с головокружительным реализмом и уникальной эстетической изысканностью. Но их персонажи – не люди, а всего-навсего куклы.
                                                                                                                                                                                                                                                      Не больше пары минут понадобилось мне, чтобы увидеть, что в «Фасаде» все по-другому. Грейс и Трип, супружеская пара, мои старые друзья, приглашают меня в гости. Он блондин, она брюнетка, им чуть за тридцать. Стоя у двери, я слышу, как они ссорятся. Я стучу в дверь, Трип тепло приветствует меня и вводит в маленькую квартиру без излишка мебели, из окна которой открывается вид на жилые многоэтажки на фоне темного ночного неба.
                                                                                                                                                                                                                                                      Я начинаю разговор с ними, печатаю «Привет, Грейс, отлично выглядишь!». Они пытаются втянуть меня в свой горячечный спор, привлечь каждый на свою сторону. Я могу говорить все, что хочу, никаких правил здесь нет. Я могу быть хмурым и неразговорчивым (тогда они вышвыривают меня из квартиры), могу говорить какую-то ерунду, но в большинстве случаев я стараюсь вести себя как импровизационный актер, отталкиваясь от их текста и подавая собственные реплики – соглашаясь с одним, критикуя другого, флиртуя с кем-то одним или сразу с обоими. Ни одно прохождение не похоже на другое. Тем не менее, в типичной игре Грейс и Трип спорят друг с другом, кто-то из них может льстить мне, другой в это время ставит под сомнение честность моих намерений, и напряжение между ними нарастает, пока чувства не вырвутся наружу, тогда наступает развязка или перелом сюжета. Вот я играю роль Эда:
                                                                                                                                                                                                                                                      Трип: Ладно, знаешь что, Эд, я хочу у тебя кое-что спросить.
                                                                                                                                                                                                                                                      Грейс: Трип…
                                                                                                                                                                                                                                                      Эд: Что?
                                                                                                                                                                                                                                                      Трип: Грейс, дай мне задать человеку вопрос. Эд, вот правда или нет…
                                                                                                                                                                                                                                                      Эд: Грейс, пусть спросит.
                                                                                                                                                                                                                                                      Трип: Каждый человек в браке должен изо всех сил пытаться быть на одной волне с другим человеком, правда?
                                                                                                                                                                                                                                                      Грейс: Чего-чего?
                                                                                                                                                                                                                                                      Трип: Я имею в виду, когда ты женат, чтобы все было хорошо, ты должен всегда быть позитивным, уступчивым и… быть вместе, правда?
                                                                                                                                                                                                                                                      Эд: (раздумывает)
                                                                                                                                                                                                                                                      Трип: Так или нет?
                                                                                                                                                                                                                                                      Эд: Нет, не всегда.
                                                                                                                                                                                                                                                      Грейс: Что? Ой, ну ладно. Да. Просто согласись, Трип, согласись, семья у нас ни к черту! Мы же никогда не были счастливы, никогда, ни одного дня!
                                                                                                                                                                                                                                                      Здесь мастер драмы нагнетает напряжение, чтобы подготовить развязку; обратите внимание, как он требует моего участия. Игра может закончится примирением или расставанием, а иногда ни тем, ни другим. В этот раз оказывается, что когда-то Грейс уступила Трипу, который пытался отговорить ее стать художницей, Трип понимает свою ошибку и они мирятся. «Эд, спасибо, что зашел» - говорит мне Трип, его голос теперь звучит мягко и приглушенно. «Ты… кажется, ты здорово помог нам». Я ухожу; игра окончена. В следующий раз произойдет что-то совсем другое.
                                                                                                                                                                                                                                                      «Фасад» выиграл гран-при жюри фестиваля независимых игр «Слэмдэнс» и привлек пристальное внимание игровых журналов и блоггеров. Если вы хотите сыграть в эту игру, ее можно бесплатно скачать на www.interactivestory.net . На сегодняшний день ее скачало 350 тысяч человек. Поиграйте и решайте сами, но лично мне «Фасад» показался, с одной стороны, пугающим, а с другой – разочаровывающим.
                                                                                                                                                                                                                                                      Пугающим потому, что Грейс и Трип, хотя и нарисованы очень просто, в какие-то моменты бывают шокирующе натуральными. «Меня поразило то, как тонко все это было», сказал Уилл Райт, выдающийся игровой дизайнер, когда я спросил его о «Фасаде». «Большинство игр обрушивают тебе на голову всякие взрывы, спасение мира, вопросы жизни и смерти. А здесь все так тонко!». Лицо Трипа, восхищался он, иногда выражает легкую досаду. «Сам факт того, что лицо игрового персонажа может выражать легкую досаду!».
                                                                                                                                                                                                                                                      И разочаровывающим потому, что при всей своей инновационной искусственно-интеллектуальной механике, Грейс и Трип остаются слишком тупыми, чтобы все же убедить нас в своей человечности. Когда я играл роль женщины (свой пол можно выбирать) и объявил, что у меня будет ребенок от Трипа, Грейс и Трип решили, что я с ними заигрываю. На самом деле они только угадывают, что имеет в виду игрок – и у них не очень хорошо получается. «Оно как бы работает» - говорит Даг Черч, весьма уважаемый дизайнер, работающий на компанию Electronic Arts, этакого Кинг-Конга американской игровой индустрии. «Бывают просто великолепные моменты. Как раз такие, после которых люди думают «Здорово, вот бы сыграть в эту штуку!». А потом ты делаешь следующий шаг и бац - все! Ты спотыкаешься и все идет наперекосяк».
                                                                                                                                                                                                                                                      Но тогда, когда оно все же работает, когда игра протекает плавно и игрок уже знает, как работать в команде с Грейс и Трипом, такие моменты действительно наступают. После одного особенно удачного исполнения (возможно, это не следует называть игрой) я набросал такую заметку: «Я чувствую странное желание доставить удовольствие этим персонажам, и невзирая на голос рассудка, я был тронут, когда Грейс призналась, что боится рисовать, а потом они помирились.» «Фасад» выглядит как пробный, безбюджетный исследовательский проект малого масштаба, каковым в сущности и является. Но тем не менее, он все же способен оказывать на людей эмоциональное воздействие.

                                                                                                                                                                                                                                                      В январе, на Слэмдэнсе, Матеасу и Стерну удалось найти инвесторов, заинтересованных в идее интерактивной драмы. После долгих телефонных переговоров, они подписали двухмиллионный контракт на разработку коммерческой игры. Для них это было важным шагом вперед. В частности, Стерн в будущем видит себя руководителем коммерческой студии интерактивной драмы. И он, и Матеас верят, что сегодняшняя индустрия видеоигр занимает лишь маленькую часть потенциального рынка интерактивных видеоразвлечений.
                                                                                                                                                                                                                                                      «Большинство людей, самые обычные Джо или Джейн, которые ходят по улицам и любят смотреть кино и телевизор, даже не представляют себе, на что способны компьютерные игры» - сказал Стерн, когда я спросил его, кто будет покупать интерактивные драмы.
                                                                                                                                                                                                                                                      «Я думаю, что существует реальный рынок для сюжетно-ориентированных интерактивных произведений с яркими персонажами» - добавил Матеас. «Я думаю, весь сегодняшний рынок видеоигр покажется крошечным по сравнению с потенциалом этого рынка. Существует огромный и абсолютно неисследованный рынок развлечений, которые не связаны с опасными приключениями, поисками, уничтожением чудовищ и решением головоломок.»
                                                                                                                                                                                                                                                      Рабочее название их следующей игры – «Вечеринка». Сейчас она находится на концептуальной стадии, но они планируют, что в то время, как в «Фасаде» действовали два компьютерных персонажа, в «Вечеринке» их будет десять – проект намного более сложный, но и более богатый драматически. На стадии разработки он потребует уже не двоих программистов, но десятерых или даже больше. Графика станет более детальной и проработанной. Пространство действия расширится. Игра будет длиться около сорока минут, а не двадцать. Программа позволит совершать большее количество физических действий, например, встречаться с персонажами в отдельной комнате, запирать двери, переносить вещи с места на место и стрелять из пистолета. Они рассчитывают, что она будет лучше понимать игрока, чем «Фасад» и предоставлять большее разнообразие ходов.
                                                                                                                                                                                                                                                      Эстетика игры также будет отличаться. Если «Фасад» - психологическая драма, то «Вечеринка» - социальная мелодрама с элементами черного юмора, а-ля «Отчаянные домохозяйки». Согласно предварительным сценарным разработкам, вы организовываете званую вечеринку вместе со своей женой (или мужем, если играете женщину), которая умоляет вас приложить все силы для поддержания плавного течения беседы (и притока алкоголя). По мере того, как собираются гости, вечеринка заполняется персонажами, у каждого из которых есть свои планы на вас и друг на друга. Ваша бывшая девушка может захотеть разрушить ваш брак, ваш сосед - пошпионить за вами, а босс – найти повод выгнать вас с работы. Вы можете пытаться угодить всем сразу или бросаться оскорблениями, соблазнить жену своего лучшего друга или объявить, что вы гей, можете вообще отказаться принимать гостей (в этом случае в дом их впустит, со злостью на вас поглядывая, ваша жена) или запереть своего босса в подвале. Можно, наконец, попытаться заняться своими делами и предоставить гостей самим себе. Однако на каждом этапе другие персонажи (а за их спинами – мастер драмы) – стремятся вернуть вас «в коллектив». Со всеми вытекающими отсюда головоломными осложнениями.
                                                                                                                                                                                                                                                      В этой игре будет секс, и будет насилие. Будет и пистолет, правда, только с одним патроном, так что никаких перестрелок. Здесь дизайнеры опять-таки инвертируют стандарты Страны Видеоигр, где стрелять в людей легко, но говорить с ними трудно: насилие в «Вечеринке» будет встречаться редко и нести драматическую нагрузку, приводя по ходу игры к непредсказуемым последствиям – как в жизни. Так же и секс будет скорее драматичным, чем порнографичным. Он может разрушить брак или толкнуть кого-то на убийство. Сексуальные сцены не будут чересчур откровенными, но они будут реалистичными. «Вы этого не увидите в буквальном смысле слова, но стонать персонажи будут», как сказал Стерн.
                                                                                                                                                                                                                                                      Матеас и Стерн считают, что разработка «Вечеринки» потребует по крайней мере двух с половиной лет. Они хотят сделать из этой игры доходную торговую марку и использовать прибыль от нее для достижения настоящей цели: создания игры, понимающей естественный язык и строящей свою собственную драму.
                                                                                                                                                                                                                                                      «Вечеринка», как и «Фасад», будет собирать вместе заранее записанные кусочки диалогов и запланированные сюжетные ходы; мастер драмы, анализируя ход действия, будет выстраивать последовательность этих кусочков, словно нанизывая бусы на ниточку. В конечном итоге такая игра не может быть ничем большим, чем ее ресурс заготовленных драматических возможностей. Путь в по-настоящему свободный драматический мир откроется только тогда, когда компьютер научится писать свои собственные диалоги и сюжетные ходы, используя правила, по которым он сможет эмулировать работу драматурга или сценариста.
                                                                                                                                                                                                                                                      Я поднял бровь. Возможно ли такое? Создание простого прототипа, сказал Матеас, «вполне осуществимо на протяжении ближайших двадцати лет».
                                                                                                                                                                                                                                                      «Мы абсолютно серьезно хотим реализовать эти проекты», добавил Стерн.

                                                                                                                                                                                                                                                      Мейнстримная индустрия видеоигр заинтересована не в исследованиях, а в продажах. Среди коммерческих работников этой отрасли никто из опрошенных мной не слышал о Матеасе и Стерне, а те, кому я описывал проект интерактивной драмы, воспринимали его с вежливым скептицизмом или (не для прессы) со скептицизмом не таким уж вежливым. Один из них сообщил мне: «Народ обожает вышибать дерьмо». Разумеется, исключения возможны, сказал он, но при этом добавил: «Вышибание дерьма фундаментально, потому что видеоигры основаны на глаголах и ни на чем другом. А у этих ребят ничего не выйдет». На Е3 я упомянул о проекте Матеаса-Стерна в разговоре с Митчем Ласки, который до того сам преодолел царивший в отрасли скептицизм и сделал состояние на играх для мобильных телефонов. В качестве ответа он изобразил воображаемую самокрутку марихуаны и сделал длинную затяжку. Что называется, удачи – но он бы не вложил ни копейки.
                                                                                                                                                                                                                                                      В более тесном мире игровых дизайнеров Матеас и Стерн, наоборот, фигуры известные, и относятся к ним с неким почтительным любопытством. Дизайнеры уже видели достаточно неудачных проектов искусственного интеллекта, чтобы ожидать какой бы то ни было революции в этой области, но на сегодняшний день они были бы счастливы, даже если бы персонажи просто чуточку поумнели. «Над этим работало много людей», сказал мне Даг Черч из Electronic Arts. «Каждый год одно и то же – мы спроектируем невероятно разумных, реалистичных людей с непринужденных поведением. Мы каждый раз пробуем сделать этот скачок – и каждый раз остаемся там, где и были». О Матеасе и Стерне он сказал: «По крайней мере, они пришли к чему-то новому. Не все работает так, как нужно, но это по крайней мере шаг вперед».
                                                                                                                                                                                                                                                      «Это действительно серьезная проблема, но постепенно, шаг за шагом, мы решим ее» - размышляет Уилл Райт в ответ на мой вопрос о создании достоверных персонажей. «Это как взбираться на очень высокую гору». Матеас и Стерн, сказал он, не имеют готовых ответов, но они нашли дорожку, которая ведет вверх.
                                                                                                                                                                                                                                                      Сейчас внимание всей индустрии приковано к проекту самого Райта, проекту, который пользуется многомиллионной финансовой поддержкой ЕА (эта компания владеет студией Райта, Maxis). Райт заканчивает свою игру под названием «Spore (Спора)», которая ожидается к выходу в следующем году. Его последняя игра, «The Sims (Симулы)», стала величайшим хитом среди компьютерных игр всех времен и народов и также была в своем роде радикальной инновацией. По силе творческого воображения и отточенности технического мастерства «Спора» кладет «Симулы» на обе лопатки. Игра вызвала настоящую бурю в масс-медиа, что может вызвать удивление, если учесть, что на полках магазинов еще нет ни одной ее копии. Получив возможность испытать эту игру сам, я могу сказать только одно – что пресса недооценивает реальное положение дел.
                                                                                                                                                                                                                                                      Как и «Фасад», и «Вечеринка», «Спора» переворачивает традиционные представления индустрии – просто речь идет о другом наборе представлений. Вместо того, чтобы снабдить компьютер огромным заранее созданным миром, который должен исследовать игрок, она предоставляет игроку самому заниматься созданием мира. «Играть», собственно, не во что – выигрывать не у кого, соревноваться не с кем. Вместо этого игрок начинает управлять микробом, затем помогает ему развиться в существо своего собственного изобретения. Это существо размножается, приобретает разум, в конце концов формируя племена и заселяя планету; затем игрок может расширить поле зрения до целой вселенной, состоящей из планет и существ, созданных другими пользователями и загруженными в его компьютер с мощного центрального сервера Electronic Arts. В «Споре», как сказал бы Карл Саган, есть миллионы и миллионы планет, и каждая из них – ручная работа одного из тысяч или миллионов игроков, вдохновенная или скучная, чудесная или страшная.
                                                                                                                                                                                                                                                      На Е3, понаблюдав за тем, как Уилл Райт демонстрирует игру паре десятков людей в маленькой комнатке с черными стенами, я попал в еще более маленькую комнатку, где меня посадили за обычный компьютер и я смог заняться созданием своего собственного живого существа. Как ни странно, через пять минут я уже устроился с полным комфортом и рисовал чешуйчатого, с острым клювом, инопланетянина, отображаемого в трех измерениях так же детально, как герои мультфильмов от Pixar. Когда я пририсовал ему достаточно частей тела, чтобы он мог двигаться, он… начал двигаться! Он ходил. Подпрыгивал. Я хихикнул. Самое существенное техническое достижение «Споры» состоит в том, что компьютер умеет анимировать любое существо, какое бы игрок ни вообразил. Пять ног? Хвост с циркулярной пилой на конце и глаза, посаженные на шею? Не вопрос – программа, как будто управляемая духом Чака Джонса, смотрит на созданное вами существо и оживляет его, со всеми повадками, характером и даже вместе с отпрысками этого вида. Немногим труднее для меня было и создание своей планеты, с ярко раскрашенными горами и ледяными озерами. Это было похоже на целую мультипликационную студию прямо под рукой.
                                                                                                                                                                                                                                                      «Спора» ни капли не похожа на «Фасад» и «Вечеринку». Это крупнобюджетный корпоративный продукт, а не дешевая независимая разработка; его структура и время игры не компактны и плотно подогнаны друг к другу – наоборот, они ничем не ограничены (можно играть до бесконечности); это произведение визуальное, а не словесное (в «Споре» нет людей и нет слов). Тем не менее, во многих аспектах это другая сторона той же медали – порожденные не в последнюю очередь разочарованием в существующих играх из-за их обескураживающей ограниченности, все три продукта пытаются привлечь к видеоиграм новую аудиторию, переопределяя само значение слова «играть в видеоигру»: «играть» не в смысле участия в соревнованиях в рамках правил («играть в Тетрис»), но «играть», получая наслаждение от свободного творчества («Спора» в своей основе – фантастическая по своим возможностям игрушка), или «играть», исполняя драматическое произведение («Фасад» и «Вечеринка» в своей основе – интерактивный театр). «Спора», если проект удастся, подарит игроку чувство волшебной, ни с чем не сравнимой радости. Интерактивная драма, если проект удастся, подарит игроку глубокий эмоциональный катарсис.

                                                                                                                                                                                                                                                      Но действительно ли нужен катарсис потребителям индустрии развлечений, особенно после трудного дня на работе? Большинству потребителей индустрии развлечений нужно именно развлечение. Легенда гласит, что однажды к Уиллу Райту пришел некий дизайнер и принес концепцию игры, основанной на новой, тщательно разработанной системе ведения боя. Как рассказывают Хизер Чаплин и Аарон Руби в своей книге об истории видеоигр «Хитрая бомба», Райт выслушал идею, после чего огорошил автора одной-единственной уничтожающей фразой. «Хмм,» - сказал он, – «не слишком весело звучит».
                                                                                                                                                                                                                                                      «Фасад» оригинален, но он не весел. Он и не должен таким быть. «Вечеринка» может оказаться веселой, даже смешной. Но веселить – занятие трудное и ниоткуда не следует, что интерактивная драма обязана развиваться именно в сторону развлекательности.
                                                                                                                                                                                                                                                      Когда речь заходит о развлекательности, Матеас и Стерн как будто слегка раздражаются. Они с готовностью отвечают, что такие игры, как «Профессиональный скейтбордер от Тони Хока», «Легенды Людей Икс» и «Уничтожить Всех Землян!» никуда не денутся, и они ничего против этого не имеют. Они просто хотят добавить к этому что-то еще. Матеас говорит: «Когда ты смотришь серьезный фильм или серьезную, напряженную пьесу, ты не выходишь и не говоришь «Боже, как это было круто!». Это было ценное переживание, которое ты хотел испытать и которое что-то тебе дало, но то, что оно тебе дало, не было «развлечением». Это было что-то глубокое, богатое мыслью, оно подтолкнуло тебя к размышлениям о собственной жизни, о существовании человека, оно потрясло тебя. И мне кажется, что интерактивные средства выражения могут достичь того же самого, причем в потенциале - с большей силой, чем неинтерактивные.»
                                                                                                                                                                                                                                                      Я спросил, к каким эстетическим переживаниям они стремятся. «Мы хотим вызвать у игрока чувство истинной привязанности к персонажам на экране» - отвечает Стерн. «Чтобы вы чувствовали себя так, как будто вступаете в реальные отношения с этими персонажами».
                                                                                                                                                                                                                                                      «Да», - соглашается Матеас. – «Чтобы судьба этих персонажей действительно была важна для игрока».
                                                                                                                                                                                                                                                      Возможно, они ошибаются относительно коммерческих перспектив того жанра, который пытаются создать, но они наверняка правы относительно того влечения, которое человек испытывает к литературным персонажам. Игра, даже самая замечательная, заканчивается, когда в нее больше не играют, но замечательный персонаж, с которым мы однажды познакомились, остается с нами всегда. Вспомним Шерлока Холмса и мистера Спока, Дон Кихота и капитана Ахава, Холдена Колфилда и Гумберта Гумберта, Скруджа и Гэндальфа, Чарли Брауна и Северуса Снейпа.
                                                                                                                                                                                                                                                      А теперь давайте представим себе анимационный интеллект «Споры» и драматический интеллект «Фасада», увеличим их сложность на несколько порядков и продолжим оба эти вектора до точки их пересечения. Представим себе игру, которая могла бы познакомить нас с еще одним Холмсом или еще одним Споком, или такую, которая могла бы создать, или позволить игроку создать, всевозможнейшие персонажи, и каждого из них не просто анимировать, но одушевить – сыграть. Представим себе игру, которая могла бы не только показать на экране мощеные дороги викторианского Лондона или красные небеса Вулкана, но и зарядить каждый город и каждую планету напряжением драматического потенциала. Представим, наконец, возможность войти в эту драму и встретиться с этими персонажами. Сами игры, если это будут игры, могут быть короткими, как эпизод сериала или длинными, как целый сезон мыльной оперы, персонажей мы можем создать сами, можем купить, выменять или скачать из сети по совету друзей, жанры могут быть любыми – от комедии и сказки до триллера и трагедии. Возможно, нам даже не придется выбирать самим – программа может следить за нашей игрой, изучать наши вкусы и создавать персонажи, драмы и миры по нашему заказу. «Через двадцать лет,» - любит повторять Уилл Райт, – «игры будут для нас столь же личным делом, как сны, и столь же эмоционально глубокими и значительными, как наши сны».
                                                                                                                                                                                                                                                      Невозможно предсказать, к чему приведут попытки создать интерактивную драму, но можно сказать точно, что инструменты драматурга – старейшие и одновременно наиболее мощные из всех эмоциональных технологий. Рано или поздно драма войдет в видеоигры, освоив новейшую и наиболее динамичную технологию в культурной индустрии. А что потом? Недавно я посмотрел театральную постановку трагедии Эсхила «Персы». Это древнейшее драматическое произведение, известное человечеству, даже в переводе и даже по прошествии двух с половиной тысяч лет, в современной Америке, поразило и очаровало аудиторию с такой силой, как будто всех прошедших тысячелетий никогда не было. «Здорово,» - вдруг подумал я, - «вот бы сыграть в эту штуку!».
                                                                                                                                                                                                                                                      содрано отсюда: http://forum.ifiction.ru/viewtopic.php?id=1107
                                                                                                                                                                                                                                                        на данный момент у меня опять есть желание делать игры.

                                                                                                                                                                                                                                                        походовые тактические или стратегические.

                                                                                                                                                                                                                                                        а сейчас я опять побуду плохим танцором и пожалуюсь на свои шахматы:

                                                                                                                                                                                                                                                        1.
                                                                                                                                                                                                                                                        - для Delphi я нашёл графический 2d-движок Zen, к которому у меня нет ни малейших нареканий.
                                                                                                                                                                                                                                                        - я подзабыл паскалевский ООП и даже и не хочу вспоминать. а без этого в шахматах нереально тяжко.

                                                                                                                                                                                                                                                        2.
                                                                                                                                                                                                                                                        - юзал Visual C++ с графическим 2d-движком HGE, из-за особенностей которого работа и стала.
                                                                                                                                                                                                                                                        и, да- я верю в определяющий фактор степени изгиба рук и точки их произрастания, но философия HGE не просто менее привычна после Zen, она вообще работает иногда не ясно как, а движок этот более не поддерживается.

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

                                                                                                                                                                                                                                                        такие вот пироги.

                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                        --

                                                                                                                                                                                                                                                        тем временем наш форумчанин General довёл до релиза красивейшую походовую стратегию и даже запулил на серьёзные порталы:
                                                                                                                                                                                                                                                        Работаю над пошаговой стратегией (сообщение #3163930)

                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                        --

                                                                                                                                                                                                                                                        ну, а я- привычно деградирую и пишу про любимые игры.
                                                                                                                                                                                                                                                        на этот раз- про орионы и циву:
                                                                                                                                                                                                                                                        master of orion (сообщение #3170439)
                                                                                                                                                                                                                                                        Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                                          2d-движок Zen

                                                                                                                                                                                                                                                          ZenGL
                                                                                                                                                                                                                                                            Обзор зарплат программистов Java/C++/C#/Delphi
                                                                                                                                                                                                                                                            http://habrahabr.ru/company/it_dominanta/b...47866/#habracut
                                                                                                                                                                                                                                                              видео "ниндзя в деле":
                                                                                                                                                                                                                                                              http://www.youtube.com/watch?v=qcljlDHSKO0...ayer_detailpage

                                                                                                                                                                                                                                                              и о том, как это рисовалось:
                                                                                                                                                                                                                                                              https://www.youtube.com/watch?v=qW_d5qa8x3o

                                                                                                                                                                                                                                                              не имеют никакого отношения к тому, что и как
                                                                                                                                                                                                                                                              собирался в ближайшем будущем рисовать я)))
                                                                                                                                                                                                                                                                Ёк-макарёк, он каждый кадр рисовал отдельно? :wacko:

                                                                                                                                                                                                                                                                Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                                                                                  Цитата ya2500 @
                                                                                                                                                                                                                                                                  юзал Visual C++ с графическим 2d-движком HGE, из-за особенностей которого работа и стала.

                                                                                                                                                                                                                                                                  на другом форуме нашли ошибку в моей проге. особенности HGE были ни при чём :blush:

                                                                                                                                                                                                                                                                  в данный момент приступил к работе над рокировкой.

                                                                                                                                                                                                                                                                  мало того, что за ход рокировки перемещаются две фигуры, и это надо учитывать не только при отображении перемещений, но и при мысленных расчётах типа "а что будет, если я сделаю такой-то ход"(такие размышлизмы абсолютно необходимы для нормальной обработки шаха, мата, пата), НО засада ещё и в том, что у рокировки есть такое условие, что поле, через которое прыгает король, не должно быть под боем. спросите- в чём проблема? а проблема в том, что моя прога выясняет, под боем ли некое поле, путём рассмотрения всех вражеских фигур(в том числе и короля!) на предмет возможности туда походить(а для короля нужно учитывать возможность рокировки)- ну вы поняли..

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

                                                                                                                                                                                                                                                                  ну и вот, какую забавную вещь я нашёл в этих ваших интернетах:
                                                                                                                                                                                                                                                                  http://www.kursovik.com/programming/290026.html
                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                  Среда программирования: Borland C++ 3.1 (под DOS)
                                                                                                                                                                                                                                                                  Название работы: Шахматы (2 игрока)
                                                                                                                                                                                                                                                                  Вид работы: Курсовая работа
                                                                                                                                                                                                                                                                  Тематика работы: Игры, Алгоритмы
                                                                                                                                                                                                                                                                  Объем программы: 9 (по десятибалльной шкале)
                                                                                                                                                                                                                                                                  Уровень сложности: 7 (по десятибалльной шкале)
                                                                                                                                                                                                                                                                  Разработчик: программист сайта kursovik.com
                                                                                                                                                                                                                                                                  Ключевые слова: шахматы графика быстро классы
                                                                                                                                                                                                                                                                  Функции программы: Игра в шахматы на двоих без компьютерного интеллекта.
                                                                                                                                                                                                                                                                  Наличие всех необходимых методов даёт возможность реализовать интеллект.
                                                                                                                                                                                                                                                                  Все фигуры ходят только по правилам. НО отсутствует возможность роккировки, взятия пешки "на проходе", почти дописана функция "король под шахом", но не до конца. Остальное всё есть.
                                                                                                                                                                                                                                                                  ...
                                                                                                                                                                                                                                                                  Приобрести исходники программы за 850 руб (+описание(отчет) за 680 руб)

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

                                                                                                                                                                                                                                                                  работа движется со скрипом. в-основном проблема в отсутствии мотивации. но, с другой стороны- нельзя же все время сидеть без дела. очень помогает разбиение задачи на много маленьких. вот как я разбил свои текущие (которые на VC под HGE) шахматы:
                                                                                                                                                                                                                                                                  Цитата

                                                                                                                                                                                                                                                                  сделано:
                                                                                                                                                                                                                                                                  0000- шаблон HGE-приложения
                                                                                                                                                                                                                                                                  0001- выводится поле на вращающемся фоне
                                                                                                                                                                                                                                                                  0002- подсвечивается поле, над которым проходит курсор мыши
                                                                                                                                                                                                                                                                  0003- видим курсор мыши
                                                                                                                                                                                                                                                                  0004- баттон на 2-й позиции
                                                                                                                                                                                                                                                                  0005- баттон реагирует на наведение мыши доску можно переворачивать в любой момент
                                                                                                                                                                                                                                                                  0006- выводятся и подсвечиваются все кнопки
                                                                                                                                                                                                                                                                  0007- заведёна структура Universe, по нажатию "начать игру"- отображаются какие-то фигуры
                                                                                                                                                                                                                                                                  0008- допилено, чтобы отображались все фигуры, образуя начальную шахматную позицию
                                                                                                                                                                                                                                                                  0009- допилено, чтобы фигуры корректно отображались и на перевёрнутой доске
                                                                                                                                                                                                                                                                  0010- допилены кнопочки и выбор любой фигуры
                                                                                                                                                                                                                                                                  0011- любой фигурой можно походить в любое место
                                                                                                                                                                                                                                                                  0012- можно переворачивать доску во время движения фигуры
                                                                                                                                                                                                                                                                  0013- введена структура Game, белые и чёрные ходят каждый на своём ходу и могут бить противника
                                                                                                                                                                                                                                                                  0014- пешки ходят по правилам, учитывается только правило перемещения и боя фигуры, без учёта всего остального
                                                                                                                                                                                                                                                                  0015- при выбранной фигуре подсвечиваются свои фигуры и только те поля, куда она может походить
                                                                                                                                                                                                                                                                  0016- пешки ходят с учётом того, что короля нельзя подставлять под шах
                                                                                                                                                                                                                                                                  0017- все фигуры ходят по правилам, кроме особых правил: превращение пешек, рокировка, правило битого поля
                                                                                                                                                                                                                                                                  0018- объявляются шах или пат/мат. игра имеет конец.
                                                                                                                                                                                                                                                                  0019- доделаны кнопки, кроме паузы
                                                                                                                                                                                                                                                                  0020- хоть как-то сделан ИИ
                                                                                                                                                                                                                                                                  0021- после долгого перерыва устранена ошибка ИИ
                                                                                                                                                                                                                                                                  0022- сделана часть рокировки(ход короля через одну клетку при соблюдении всех условий рокировки)

                                                                                                                                                                                                                                                                  надо сделать:
                                                                                                                                                                                                                                                                  0023- доделана рокировка(...)
                                                                                                                                                                                                                                                                  0024- сделано превращение пешек в ферзи
                                                                                                                                                                                                                                                                  0025- сделан выбор фигуры, в которую превратится пешка, для человека
                                                                                                                                                                                                                                                                  0026- сделано взятие на проходе с выводом поясняющего сообщения
                                                                                                                                                                                                                                                                  0027- сделаны различные (не слишком умные) ИИ (вместо ИИ теперь ИИ_0, ИИ_1, ИИ_2)
                                                                                                                                                                                                                                                                  0028- учитывается правило троекратных повторений
                                                                                                                                                                                                                                                                  0029- учитывается правило 50-ти ходов


                                                                                                                                                                                                                                                                  в-общем, дел осталось не так уж и много. а скорость продвижения проекта целиком и полностью зависит от моего умения себя мотивировать.
                                                                                                                                                                                                                                                                  --

                                                                                                                                                                                                                                                                  на потом у меня запланированы:
                                                                                                                                                                                                                                                                  - простенький пример платформера с примитивной графикой(прыжки, лестницы, убивание врагов напрыгиванием, стрельба по врагам медленно летящими пулями)
                                                                                                                                                                                                                                                                  - что-нить простое в 3d(даже не знаю, что. хочу программно генерить мир. модели стопудово будут заимствованные)
                                                                                                                                                                                                                                                                  - кусочек платфомера с реалистично двигающимся персонажем(попробую реализовать пару препятствий из таких игр, как: prince of Persia, another world, flash back, black thorne, limbo).

                                                                                                                                                                                                                                                                  люблю строить планы. вместо того, чтобы съесть шоколадку, я сажусь и строю планы :D
                                                                                                                                                                                                                                                                  Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                    у рокировки есть такое условие, что поле, через которое прыгает король, не должно быть под боем.
                                                                                                                                                                                                                                                                    Не только через которое прыгает, но и начальное с конечным. И не только рокировка является не бьющим ходом. Пешка тоже не бьет поля, на которые может переместиться.
                                                                                                                                                                                                                                                                    Так что лучше разделять битые поля и поля возможных ходов. Или реализовать две процедуры, или передавать в нее флаг, что проверяется.

                                                                                                                                                                                                                                                                    Рокировка возможна, только если король и ладья, в сторону которой делается рокировка, еще не ходили.
                                                                                                                                                                                                                                                                    0016 - не только пешки подвержены этому ограничению. Для других фигур оно тоже действует.
                                                                                                                                                                                                                                                                    Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                                                                                                                                                                                                                                                                      Цитата amk @
                                                                                                                                                                                                                                                                      Не только через которое прыгает, но и

                                                                                                                                                                                                                                                                      это я в курсе. все правила узнаю и стараюсь реализовать в точности. просто хотел обрисовать проблему по-возможности кратко.

                                                                                                                                                                                                                                                                      Цитата amk @
                                                                                                                                                                                                                                                                      Так что лучше разделять битые поля и поля возможных ходов. Или

                                                                                                                                                                                                                                                                      именно. ты успел написать это раньше меня)) необходимо для каждой фигуры разделить "возможность походить" на возможность атаковать и возможность переместиться. и оперировать этим отдельно.

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

                                                                                                                                                                                                                                                                      жаль, сейчас времени на это нет буквально совсем.

                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                      Цитата ya2500 @

                                                                                                                                                                                                                                                                      0014- пешки ходят по правилам, учитывается только правило перемещения и боя фигуры, без учёта всего остального
                                                                                                                                                                                                                                                                      ..
                                                                                                                                                                                                                                                                      0016- пешки ходят с учётом того, что короля нельзя подставлять под шах
                                                                                                                                                                                                                                                                      0017- все фигуры ходят по правилам, кроме особых правил: превращение пешек, рокировка, правило битого поля

                                                                                                                                                                                                                                                                      Цитата amk @
                                                                                                                                                                                                                                                                      0016 - не только пешки подвержены этому ограничению. Для других фигур оно тоже действует.

                                                                                                                                                                                                                                                                      да, и в списке расписана последовательность того, как это реализовывалось.

                                                                                                                                                                                                                                                                      т е в пунктах 0014 и 0016 были реализованы правила для пешек, и затем, одним махом, в п 0017 это было расширено на все фигуры(просто добавлены разнообразные условия проверки того, как ходят фигуры, в рамках уже созданной и отлаженной основной программы).
                                                                                                                                                                                                                                                                        Цитата ya2500 @
                                                                                                                                                                                                                                                                        жаль, сейчас времени на это нет буквально совсем.

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

                                                                                                                                                                                                                                                                          статья немного о независимых разработчиках
                                                                                                                                                                                                                                                                          Цитата
                                                                                                                                                                                                                                                                          Так случилось, что я уже длительное время занимаюсь фултайм инди разработкой. Это значит, что единственный источник дохода — это игры, которые я делаю не на заказ. Никакого фриланса или удаленной работы. Параллельно явлюясь соведущим подкаста для инди разработчиков, где гости рассказывают каково это быть независимыми разработчиками в той или иной части рынка, используя определенную технологию и целясь на какие-то платформы. Эта статья — небольшой FAQ по частым вопросам, которые приходят.

                                                                                                                                                                                                                                                                          http://habrahabr.ru/post/200980/
                                                                                                                                                                                                                                                                            ya2500, ты когда уже на обсираниесуд общественности представишь свое? :)

                                                                                                                                                                                                                                                                            Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                                                                                              Цитата Астарот @
                                                                                                                                                                                                                                                                              ya2500, ты когда уже на обсираниесуд общественности представишь свое? :)

                                                                                                                                                                                                                                                                              так то я хоббячил, когда работал строителем.

                                                                                                                                                                                                                                                                              а теперь я снова программист и мне не до этого.

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

                                                                                                                                                                                                                                                                              можно годами самому ковыряться, а потом как тыкнут в то, как делается эффективно.. ээх!
                                                                                                                                                                                                                                                                                И тем не менее!

                                                                                                                                                                                                                                                                                Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                                                                                                  Наткнулся тут сегодня, старенькое:
                                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                                  Я не верю, что существует единственный верный способ сделать игру. Это творческое предприятие, поэтому нету жестких правил, которые нельзя было бы нарушить в определенный момент. Однако, как разработчик игр, который обсуждал этот вопрос с другими разработчиками игр, я думаю, что есть ловушки умственного характера, в которые мы часто попадаем на том или ином этапе, особенно если только начинаем разрабатывать игры. Знание этих ловушек само по себе является очень важным шагом на пути к завершению вашего проекта.

                                                                                                                                                                                                                                                                                  Итак, далее следуют 15 советов для тех, кто хочет успешно довести до конца свой игровой проект:

                                                                                                                                                                                                                                                                                  http://habrahabr.ru/post/119711/

                                                                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                                                                  Михаил Кадиков написал:
                                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                                  Серия статей по теории и практике дизайна уровней. Основная цель - собрать и структурировать все имеющиеся знания по теме в единое пособие для интересующихся разработкой компьютерных игр.
                                                                                                                                                                                                                                                                                  Также будет рассмотрена практическая часть - каким образом максимально эффективно построить свою работу от начала до конца.


                                                                                                                                                                                                                                                                                  Дизайн уровней (теория и практика)
                                                                                                                                                                                                                                                                                    GameDev как хобби: http://habrahabr.ru/post/204494/

                                                                                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                                                                                    Работая в программистом в области никак не связанной с играми я вдруг решил написать мобильную игру. Не зная ни инструментов, ни технологий и специфики разработки. Какой она получилась? Какие выводы я для себя сделал и может ли геймдев быть хобби – всё под катом.
                                                                                                                                                                                                                                                                                      вот для этого доделываю сейчас свои шахматы и ужасаюсь, как там всё неправильно. прямо возникает желание взяться за ещё более радикальную переделку. главное- упорство и желание этим заниматься... хотя бы изредка ))

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

                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                                                                                                                      и ужасаюсь, как там всё неправильно


                                                                                                                                                                                                                                                                                      самая засада в том, что из-за неудачного проектирования в моём проекте легко запутаться.
                                                                                                                                                                                                                                                                                        Делая, вы добавьте вариант с клетками, запретными для стояния и с дополнительными к доске 8 на 8. А то вдруг - понадобится, а потом много переделывать. ;)
                                                                                                                                                                                                                                                                                        Вполне интересен вариант и с тремя противоборствующими сторонами, но... слишком экзотично?.. :-?
                                                                                                                                                                                                                                                                                          Цитата Славян @
                                                                                                                                                                                                                                                                                          Делая, вы добавьте вариант с клетками, запретными для стояния и с дополнительными к доске 8 на 8. А то вдруг - понадобится, а потом много переделывать. ;)
                                                                                                                                                                                                                                                                                          Вполне интересен вариант и с тремя противоборствующими сторонами, но... слишком экзотично?.. :-?


                                                                                                                                                                                                                                                                                          фишка не в том, чтобы заранее предусмотреть всё, что может понадобиться, а в том, чтобы в проге было легко ориентироваться и легко её расширять, привинчивая всё что понадобилось.
                                                                                                                                                                                                                                                                                            игра пишется, если, когда есть время, находишь в себе силы её продолжить, а не говорить себе: "ну этот ужос на фик, лучше потом, когда времени будет больше".
                                                                                                                                                                                                                                                                                              вся неделя коту под хвост- даже не притрагивался. думаю, недели должно с головой хватить на то, чтобы слепить какую-то версию "шахматной революции", которую можно показать и которой можно поиграться. вот, например, следующей недели может хватить...
                                                                                                                                                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                                                                                                                                                вся неделя коту под хвост- даже не притрагивался. думаю, недели должно с головой хватить на то, чтобы слепить какую-то версию "шахматной революции", которую можно показать и которой можно поиграться. вот, например, следующей недели может хватить...

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

                                                                                                                                                                                                                                                                                                  вообще же "стратегическая идея" была в том, чтобы:
                                                                                                                                                                                                                                                                                                  1. научиться себя мотивировать
                                                                                                                                                                                                                                                                                                  2. постоянно писать мелкие игрушки и распространять за деньги(проще всего флешки, но и не только)

                                                                                                                                                                                                                                                                                                  как я слышал, деньги обычно получаются небольшие, но бывает так, что какая-то игрушка продаётся(и приносит деньги)много лет.
                                                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                                                    вообще же "стратегическая идея" была в том, чтобы:
                                                                                                                                                                                                                                                                                                    1. научиться себя мотивировать


                                                                                                                                                                                                                                                                                                    А чего себя мотивировать? Ты либо делаешь, либо нет.

                                                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                                                    2. постоянно писать мелкие игрушки

                                                                                                                                                                                                                                                                                                    Наверное тут поможет только составление дельного расписания дел и чётко следовать ему.
                                                                                                                                                                                                                                                                                                    Сообщение отредактировано: Polinom2686 -
                                                                                                                                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                                                                                                                                      вообще же "стратегическая идея" была в том, чтобы:
                                                                                                                                                                                                                                                                                                      1. научиться себя мотивировать
                                                                                                                                                                                                                                                                                                      2. постоянно писать мелкие игрушки и распространять за деньги(проще всего флешки, но и не только)

                                                                                                                                                                                                                                                                                                      :yes: тож хочется так

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

                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                      Например была игра вот эта: The Ball решил переписать и портировать на дроиды и социалочки - в итоге закончил только на физическом движке http://jsbin.com/quxigoruho/1/edit?output :jokingly:

                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                      короче перфекционизм - зло. Polinom2686 правильно говорит
                                                                                                                                                                                                                                                                                                      Цитата Polinom2686 @
                                                                                                                                                                                                                                                                                                      составление дельного расписания дел и чётко следовать ему.

                                                                                                                                                                                                                                                                                                      Т.е. прописываешь всё чётко и грамотно, если не успеваешь - пропускаешь пункт плана, а потом думаешь в чём причины и почему сроки сорваны
                                                                                                                                                                                                                                                                                                      user posted image user posted image
                                                                                                                                                                                                                                                                                                        Цитата Serafim @
                                                                                                                                                                                                                                                                                                        только всё, что придумывается - в итоге вылезает в слишком крутые штуки, на которые времени можно потратить просто толпы

                                                                                                                                                                                                                                                                                                        Ага, такая же беда у меня. Тоже пытался делать проекты с учётом на будущее, но потом понял, что мягко говоря это не разумно.
                                                                                                                                                                                                                                                                                                        Поэтому сейчас если пишу ПО, то делаю его под конкретную задачу с минимально необходимой гибкостью в настройках, чтобы работало. А уже потом начинаю оптимизировать все процессы. Благо сейчас осваиваюсь в git + bitbucket, так что проблем с модификацией никаких не возникает.
                                                                                                                                                                                                                                                                                                          блин, есть великая проблема всех программистов. Когда неопытный - делаешь медленно потому что плохо понимаешь предмет, а когда опытный - пишешь медленно, потому что постоянно отвлекаешься на что-то, чтобы сделать лучше или удобнее, накидываешь поверх тучку интерфейсов, абстрактных классов, потом переписываешь, сносишь, опять реализовываешь и т.д. :D
                                                                                                                                                                                                                                                                                                          user posted image user posted image
                                                                                                                                                                                                                                                                                                            Цитата Serafim @
                                                                                                                                                                                                                                                                                                            блин, есть великая проблема всех программистов. Когда неопытный - делаешь медленно потому что плохо понимаешь предмет, а когда опытный - пишешь медленно, потому что постоянно отвлекаешься на что-то, чтобы сделать лучше или удобнее, накидываешь поверх тучку интерфейсов, абстрактных классов, потом переписываешь, сносишь, опять реализовываешь и т.д. :D

                                                                                                                                                                                                                                                                                                            Прикреплённая картинка
                                                                                                                                                                                                                                                                                                            Прикреплённая картинка

                                                                                                                                                                                                                                                                                                            Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
                                                                                                                                                                                                                                                                                                              точно :good: :D
                                                                                                                                                                                                                                                                                                              user posted image user posted image
                                                                                                                                                                                                                                                                                                                Цитата Serafim @
                                                                                                                                                                                                                                                                                                                Например была игра вот эта: The Ball решил переписать и портировать на дроиды и социалочки - в итоге закончил только на физическом движке

                                                                                                                                                                                                                                                                                                                Цитата Polinom2686 @
                                                                                                                                                                                                                                                                                                                Поэтому сейчас если пишу ПО, то делаю его под конкретную задачу с минимально необходимой гибкостью в настройках, чтобы работало. А уже потом начинаю оптимизировать все процессы. Благо сейчас осваиваюсь в git + bitbucket, так что проблем с модификацией никаких не возникает.


                                                                                                                                                                                                                                                                                                                ну вот- поналезли мега-монстры в мою маленькую темку ))

                                                                                                                                                                                                                                                                                                                мне бы слепить хоть какую-то фигнюшку, которую можно будет запулить на какой-нибудь kongregate.

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

                                                                                                                                                                                                                                                                                                                и знаете, что? этот уровень для меня недостижим и близко. эх...

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

                                                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                                                ...

                                                                                                                                                                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                слегка переделанную(дико упрощённую) desctop dungeons


                                                                                                                                                                                                                                                                                                                это я про Dungelot. на самом деле не всё с ней так плохо- вполне оригинальная приятная игруха. и засунули её наверняка не только на kongregate.
                                                                                                                                                                                                                                                                                                                  Цитата ya2500 @

                                                                                                                                                                                                                                                                                                                  мне бы слепить хоть какую-то фигнюшку, которую можно будет запулить на какой-нибудь kongregate.

                                                                                                                                                                                                                                                                                                                  А идея то есть какая?
                                                                                                                                                                                                                                                                                                                    Цитата Polinom2686 @
                                                                                                                                                                                                                                                                                                                    А идея то есть какая?


                                                                                                                                                                                                                                                                                                                    какие-то мелкие идеи всегда есть.

                                                                                                                                                                                                                                                                                                                    та на одних шахматах легко можно десяток идей разной степени оригинальности придумать.

                                                                                                                                                                                                                                                                                                                    а ещё рогалики; шутеры-платформеры; платформеры-головоломки; - легко можно придумать что-то чуть не такое, как было раньше.
                                                                                                                                                                                                                                                                                                                      Цитата ya2500 @

                                                                                                                                                                                                                                                                                                                      какие-то мелкие идеи всегда есть.


                                                                                                                                                                                                                                                                                                                      Ну так записывай.
                                                                                                                                                                                                                                                                                                                        Напишите, например, Сапёра с какими-то хитрыми полями :scratch: . Работы очень мало, а кому-нибудь может понравиться:
                                                                                                                                                                                                                                                                                                                        Прикреплённая картинка
                                                                                                                                                                                                                                                                                                                        Прикреплённая картинка
                                                                                                                                                                                                                                                                                                                          Буду пробовать 3d. Наконец-то есть что-то, вроде идеи. Для заработать денег вряд ли подойдёт(потому как сплошной плагиат), но на вдохновиться поработать над проектом- вполне.

                                                                                                                                                                                                                                                                                                                          Отсюда: 3D шутер Be Quits (Расквитаться). (сообщение #3646181)

                                                                                                                                                                                                                                                                                                                          Цитата Mikle
                                                                                                                                                                                                                                                                                                                          Буду помогать, но, наверное, лучше создать для этого новую тему.
                                                                                                                                                                                                                                                                                                                            Цитата ya2500
                                                                                                                                                                                                                                                                                                                            Немного освободился. Больше времени, чем сейчас, у меня, наверное, не будет целый год, а то и больше. В-общем, я- готов.

                                                                                                                                                                                                                                                                                                                            Планы:

                                                                                                                                                                                                                                                                                                                            Скрытый текст
                                                                                                                                                                                                                                                                                                                            1. Сделать хоть что-нибудь, чтобы побегать.

                                                                                                                                                                                                                                                                                                                            2. Сделать генерацию простейших уровней- несколько соединённых квадратных комнат, в одной- появляется ГГ, в одной из других- финальная точка, по достижению которой выдаётся какая-нить заставка. На заставке игрок нажимает клавишу и попадает в следующий сгенерированный уровень. // рандомная генерация уровней- ключевой момент, интересующий больше всего.

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

                                                                                                                                                                                                                                                                                                                            4. Попробовать "искажение пространства": допустим, идём всё время прямо на север, из комнаты А попадаем в комнату Б, а из комнаты Б попадаем в комнату А. То есть, идя из Б на север, проходим в портал, сделанный, как обычный проём между комнатами. Неотличимый от обычного перехода. -- возможно ли такое?

                                                                                                                                                                                                                                                                                                                            5. Ну и дальше- вечная доработка генерации уровней, как в смысле генерации интересной архитектуры, так и в смысле включения всё новых и новых элементов(отключаемые поля; толкаемые кубы; компьютеры, которые можно взламывать; различные мини-игры).


                                                                                                                                                                                                                                                                                                                            Цитата Mikle @
                                                                                                                                                                                                                                                                                                                            Я то не против, только это всё Visual Basic 6, тебя устроит?


                                                                                                                                                                                                                                                                                                                            Хорошо. Значит- нужно скачать Visual Basic 6. Что ещё?

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

                                                                                                                                                                                                                                                                                                                              Цитата ya2500
                                                                                                                                                                                                                                                                                                                              Visual Basic 6. Что ещё?

                                                                                                                                                                                                                                                                                                                              Ничего.
                                                                                                                                                                                                                                                                                                                              В п.1 я обновил ссылку, теперь с исходником. Но это нельзя считать целиком движком, здесь многое заточено под конкретную игру, но многое универсально. Что-то сделать на уровне мода к игре можно уже сейчас, но, если оставлять только элементы движка, то нужно разбираться в коде, определиться, что выкинуть.
                                                                                                                                                                                                                                                                                                                              Буду помогать, но, наверное, лучше создать для этого новую тему.
                                                                                                                                                                                                                                                                                                                                Цитата B.V.
                                                                                                                                                                                                                                                                                                                                А не хочешь развить идею с порталами и сделать как в Prey? ИМХО, это бы заинтересовало потенциальную аудиторию больше, чем еще одна пострелушка.
                                                                                                                                                                                                                                                                                                                                Цитата B.V.
                                                                                                                                                                                                                                                                                                                                Оружие, модели людей и текстуры есть в свободном доступе.
                                                                                                                                                                                                                                                                                                                                  Наконец-то добрался и поставил VB6(с рутракера) на свою W7.

                                                                                                                                                                                                                                                                                                                                  Исходники Майкла посмотрел: всё интересное начинается где-то в модуле modMain, в функции PlayGame(), которая вызывает всё остальное, включая рендеринг.

                                                                                                                                                                                                                                                                                                                                  Так же поковырялся в прилагаемом редакторе(тоже с исходниками). Пока что самым интересным было то, что редактор оказался очень похож на старые редакторы игры Doom 1,2 и мне это нравится(а, помнится, в NeoAxis приходилось составлять уровень из заранее заготовленных кусков и это плохо подходило для моей идеи генерации разнообразных уровней). Но при этом есть и такая плюшка, как формирование террайна из битмапа.

                                                                                                                                                                                                                                                                                                                                  Что сейчас хочу, для начала:

                                                                                                                                                                                                                                                                                                                                  Генерить уровни из просто закрытых кубических комнат, без террайна. Каждый уровень должен включать в себя точку входа и точку выхода. При выходе генерится новый уровень... Думаю, уровни лучше сохранять на винт и загружать с винта.

                                                                                                                                                                                                                                                                                                                                  Это должно быть очень просто, но VB для меня непривычен и вообще, потребуется какое-то время, чтобы с этим разобраться, а свободного времени у меня не так уж много.

                                                                                                                                                                                                                                                                                                                                  В-общем, посмотрим, сколько времени это займёт.
                                                                                                                                                                                                                                                                                                                                    Немножко о генерации уровней:

                                                                                                                                                                                                                                                                                                                                    Лучший(а на самом деле и единственный) генератор лабиринтов для 3d-шутеров, который я видел, это- Oblige. И он даёт действительно потрясающие результаты. Его скрипты открыты, но разобраться в них, для меня- слишком сложно.

                                                                                                                                                                                                                                                                                                                                    Помимо прочего, вычитал в нём:

                                                                                                                                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                                                                                                                                    OBLIGE was written from scratch. It does not contain any code
                                                                                                                                                                                                                                                                                                                                    from SLIGE (by David Chess) or from any other random level
                                                                                                                                                                                                                                                                                                                                    generator.

                                                                                                                                                                                                                                                                                                                                    Part of the cave algorithm used in OBLIGE was described by Jim
                                                                                                                                                                                                                                                                                                                                    Babcock in his article: "Cellular Automata Method for Generating
                                                                                                                                                                                                                                                                                                                                    Random Cave-Like Levels".

                                                                                                                                                                                                                                                                                                                                    The random number generator used by OBLIGE is the Mersenne Twister,
                                                                                                                                                                                                                                                                                                                                    with code by Richard J. Wagner / 15 May 2003 / rjwagner@writeme.com
                                                                                                                                                                                                                                                                                                                                    based on code by Makoto Matsumoto, Takuji Nishimura, and Shawn Cokus.

                                                                                                                                                                                                                                                                                                                                    OBLIGE uses the FLTK widget library (http://www.fltk.org)
                                                                                                                                                                                                                                                                                                                                      Так ты хочешь именно генерировать лабиринт?
                                                                                                                                                                                                                                                                                                                                      Такой пойдёт: http://www.gamedev.ru/files/?id=91360
                                                                                                                                                                                                                                                                                                                                        Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                        Так ты хочешь именно генерировать лабиринт?
                                                                                                                                                                                                                                                                                                                                        Такой пойдёт:


                                                                                                                                                                                                                                                                                                                                        Эммм... Спасибо, но такие, я, когда учился на первом курсе, генерил.
                                                                                                                                                                                                                                                                                                                                        Скрытый текст
                                                                                                                                                                                                                                                                                                                                        А не так давно я умничал на гцупе:
                                                                                                                                                                                                                                                                                                                                        Цитата
                                                                                                                                                                                                                                                                                                                                        задача: разместить в лабиринте вход, три ключа(красный, синий, зелёный), три двери(красная, синяя зелёная) и три сундука(красный, синий, зелёный) так, чтобы игрок, вошедший в лабиринт через вход, гарантированно имел бы возможность добраться до каждого сундука. но при этом, чтобы до сундука можно было добраться только после прохода через дверь такого же цвета. изначально все двери заперты, но могут быть открыты ключом такого же цвета.
                                                                                                                                                                                                                                                                                                                                        - пару алгоритмов решения описал в той же теме ниже.


                                                                                                                                                                                                                                                                                                                                        Посмотри OBLIGE:

                                                                                                                                                                                                                                                                                                                                        user posted image

                                                                                                                                                                                                                                                                                                                                        Если кратко- он может генерить совершенно полноценные уровни к Doom (у меня- Oblige 6.10). И я только что посмотрел ещё SLIGE(by David Chess), так вот- уровни SLIGE тоже, как бы, полноценные уровни к Doom, но от OBLIGE(если подёргать настройки), можно добиться значительно более впечатляющих результатов.

                                                                                                                                                                                                                                                                                                                                        То есть, конечным результатом должна быть генерация не просто лабиринтов, а- полноценных уровней. Таких, которые не стыдно будет выдать за сделанные вручную :yes:
                                                                                                                                                                                                                                                                                                                                          Понятно. Просто я хочу понять, с чего начинать. Как у тебя с владением DirectX?
                                                                                                                                                                                                                                                                                                                                            Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                            Как у тебя с владением DirectX?


                                                                                                                                                                                                                                                                                                                                            Когда-то, давным-давно, писал для пробы какие-то простейшие вещи (на Delphi с какой-то библиотекой) под тогдашний DirectX.

                                                                                                                                                                                                                                                                                                                                            Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                            Понятно. Просто я хочу понять, с чего начинать.


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

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

                                                                                                                                                                                                                                                                                                                                            Что должно получиться:

                                                                                                                                                                                                                                                                                                                                            1. при запуске игры видна какая-то заставка, игра ждёт нажатия клавиши.
                                                                                                                                                                                                                                                                                                                                            2. по нажатию клавиши генерируется, сохраняется и запускается уровень.
                                                                                                                                                                                                                                                                                                                                            3. если игрок убился на уровне- уровень запускается заново.
                                                                                                                                                                                                                                                                                                                                            4. если игрок прошёл уровень- опять показывается заставка, игра ждёт нажатия клавиши.
                                                                                                                                                                                                                                                                                                                                            5. к п.2
                                                                                                                                                                                                                                                                                                                                            - очень надеюсь сделать это за неделю, помешать могут только непредвиденные сложности в освоении бейсика и в понимании твоей программы.

                                                                                                                                                                                                                                                                                                                                            вопросов по генерации пока нет- всё нужное собираюсь подсмотреть в твоём редакторе.

                                                                                                                                                                                                                                                                                                                                            собственно, пока вопросов вообще нет- я только пытаюсь разобраться и дело это не быстрое, потому что времени всегда не хватает.
                                                                                                                                                                                                                                                                                                                                            Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                              Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                              всё нужное собираюсь подсмотреть в твоём редакторе.

                                                                                                                                                                                                                                                                                                                                              Редактор не генерирует геометрию уровня, он сохраняет 2D карту.
                                                                                                                                                                                                                                                                                                                                              При запуске игры эта карта читается в MapLoad, далее генерируется уровень. Геометрия генерируется в GMapLoad, при чтении 2D сектора карты, создаётся новый объект Sector типа cSector, далее ему передаётся управление, сектор сам генерирует геометрию.
                                                                                                                                                                                                                                                                                                                                              Возможно эта игра сложновата для разбора, там куча наворотов, типа управляемых секторов (лифты), да и я её писал без расчёта на то, что кто-то будет разбирать :)
                                                                                                                                                                                                                                                                                                                                                Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                Возможно эта игра сложновата для разбора,


                                                                                                                                                                                                                                                                                                                                                Нормально.

                                                                                                                                                                                                                                                                                                                                                Очень напрягает, что в VB6 нет многострочных комментариев(как я понял). Поэтому ковырять прогу не так весело.

                                                                                                                                                                                                                                                                                                                                                Что хочу сейчас, для пробы: в функции GMapLoad заменить "Sector(i).Load nf" на:
                                                                                                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                  arg = Generate(i)
                                                                                                                                                                                                                                                                                                                                                  Sector(i).Create(arg)

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

                                                                                                                                                                                                                                                                                                                                                Для этого нужно описать метод cSector Create() (если Create в VB служебное слово, то пусть будет Build). И нужно описать ф-цию Generate(в модуле modMap), которая будет возвращать аргумент, который затем будет передаваться в Create.

                                                                                                                                                                                                                                                                                                                                                Передаваемый аргумент arg должен содержать кол-во и координаты точек. Как я понял, cSector кроме этих и других необходимых данных, хранит ещё какие-то вычисляемые значения типа максимальных, минимальных и средних координат(похоже, они вычисляются в редакторе). Это уже должно вычисляться в методе Create, в нём же должны подставляться остальные значения(текстуры и что там ещё- по умолчанию), а так же- запускаться Triangulator(?).

                                                                                                                                                                                                                                                                                                                                                Предметы в GMapLoad загружаются отдельно от секторов, так что главгероя можно будет пришлёпывать после генерации всех секторов.

                                                                                                                                                                                                                                                                                                                                                В дальнейшем изменённая GMapLoad будет переименована, а в коде будут обе функции: и загрузка GMapLoad и генерация(переделанная из GMapLoad).

                                                                                                                                                                                                                                                                                                                                                ---

                                                                                                                                                                                                                                                                                                                                                И, да- я сильно туплю из-за бейсика. Читать ещё куда ни шло, хотя догадываться о смысле написанного, всё же хуже, чем точно это понимать. А вот пытаться что-то правильно написать- реально тяжело.

                                                                                                                                                                                                                                                                                                                                                Похоже, мне для начала нужно VB изучить. И, в-общем, это неплохо. Почему бы и нет?

                                                                                                                                                                                                                                                                                                                                                Хотя, честно говоря, не раз уже хотелось погуглить "как создать 3d шутер на C++".
                                                                                                                                                                                                                                                                                                                                                Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                  Ещё, как вариант, хотелось бы начать свой минимальный 3d-проект с нуля, с ресурсами из BeQuits.

                                                                                                                                                                                                                                                                                                                                                  И всерьёз подумываю, в субботу и воскресенье пройти курс по VB на Интуите.
                                                                                                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                    Очень напрягает, что в VB6 нет многострочных комментариев(как я понял). Поэтому ковырять прогу не так весело.

                                                                                                                                                                                                                                                                                                                                                    Кликни правой кнопкой по туллбару VB6 IDE, отметь "Правка", появится несколько новый кнопок, в том числе для установки-снятия комментариев на выделенный блок текста.
                                                                                                                                                                                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                      в первом секторе всегда будет главгерой

                                                                                                                                                                                                                                                                                                                                                      У меня сектора - противоположность секторам из DOOM. Если в DOOM сектор, это пространство, окружённое со всех сторон монолитом (либо другими секторами), то у меня наоборот, сектор - это монолит, окружённый пространством, ГГ не может быть в нём, может на нём, под ним, может быть вообще не привязан к сектору.
                                                                                                                                                                                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                      Передаваемый аргумент arg должен содержать кол-во и координаты точек. Как я понял, cSector кроме этих и других необходимых данных, хранит ещё какие-то вычисляемые значения типа максимальных, минимальных и средних координат(похоже, они вычисляются в редакторе)

                                                                                                                                                                                                                                                                                                                                                      Нет, редактор ничего не вычисляет, в GMap файле содержится только необходимый минимум информации. Сектор в процедуре Load берёт из файла сначала:
                                                                                                                                                                                                                                                                                                                                                      Tag - индекс сектора для кнопок, у неактивный секторов равен нулю.
                                                                                                                                                                                                                                                                                                                                                      Action - величина перемещения при нажатии кнопки.
                                                                                                                                                                                                                                                                                                                                                      yMax - уровень верха.
                                                                                                                                                                                                                                                                                                                                                      yMin - уровень низа.
                                                                                                                                                                                                                                                                                                                                                      MtrlUp - материал верха.
                                                                                                                                                                                                                                                                                                                                                      MtrlDown материал низа.
                                                                                                                                                                                                                                                                                                                                                      vCnt - количество углов (и сторон) в 2D проекции сектора.
                                                                                                                                                                                                                                                                                                                                                      По количеству vCnt редимится массив 2D вертексов, далее читаются их данные, тип массива:
                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                        Private Type Map2Vertex
                                                                                                                                                                                                                                                                                                                                                          x As Single
                                                                                                                                                                                                                                                                                                                                                          z As Single
                                                                                                                                                                                                                                                                                                                                                          Mtrl As Integer
                                                                                                                                                                                                                                                                                                                                                          Target As Integer
                                                                                                                                                                                                                                                                                                                                                        End Type

                                                                                                                                                                                                                                                                                                                                                      Далее триангуляция, расчёт TBN, текстурных координат и т. п.
                                                                                                                                                                                                                                                                                                                                                        Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                        может быть вообще не привязан к сектору.
                                                                                                                                                                                                                                                                                                                                                        Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                        Нет, редактор ничего не вычисляет, в GMap файле содержится только необходимый минимум информации. Сектор в процедуре Load берёт из файла сначала:


                                                                                                                                                                                                                                                                                                                                                        Вот! Спасибо за разъяснение.

                                                                                                                                                                                                                                                                                                                                                        Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                        У меня сектора - противоположность секторам из DOOM


                                                                                                                                                                                                                                                                                                                                                        Это я понял, просто неверно выразился.
                                                                                                                                                                                                                                                                                                                                                          Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                          По количеству vCnt редимится массив 2D вертексов,


                                                                                                                                                                                                                                                                                                                                                          Вот, кстати, да- работа с массивами "любого" размера в VB очень понравилась.
                                                                                                                                                                                                                                                                                                                                                            Но совсем не понравилось то, что VB6 не ищет ошибок не совпадения типов на этапе компиляции. Странно.

                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                            И всерьёз подумываю, в субботу и воскресенье пройти курс по VB на Интуите.


                                                                                                                                                                                                                                                                                                                                                            Прохожу сейчас. Так, по-мелочи, интересное узнать можно. Например, что в VB несколько разновидностей функций/процедур/..(4 или 5) и нет полноценного ООП.
                                                                                                                                                                                                                                                                                                                                                              Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                              не понравилось то, что VB6 не ищет ошибок не совпадения типов на этапе компиляции.

                                                                                                                                                                                                                                                                                                                                                              Смотря что ты имеешь ввиду. Если запуск по F5, то процедура компилируется только при первом обращении к ней, если хочешь каждый раз при запуске искать все ошибки - запускай через Ctrl+F5.
                                                                                                                                                                                                                                                                                                                                                              Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                              нет полноценного ООП.

                                                                                                                                                                                                                                                                                                                                                              Это да, мне не хватает конструкторов с параметрами (заменяю костылём Init()) и наследования реализаций (наследование интерфейсов есть).
                                                                                                                                                                                                                                                                                                                                                              Сообщение отредактировано: Mikle -
                                                                                                                                                                                                                                                                                                                                                                Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                Смотря что ты имеешь ввиду. Если запуск по F5, то процедура компилируется только при первом обращении к ней, если хочешь каждый раз при запуске искать все ошибки - запускай через Ctrl+F5.


                                                                                                                                                                                                                                                                                                                                                                Ну например:

                                                                                                                                                                                                                                                                                                                                                                ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                  Private Sub Text1_Change()
                                                                                                                                                                                                                                                                                                                                                                   Str (Text1.Text)
                                                                                                                                                                                                                                                                                                                                                                  End Sub


                                                                                                                                                                                                                                                                                                                                                                прекрасно компилируется по Ctrl+F5, но выдаёт ошибку при попытке изменения текста в текстбоксе Text1.

                                                                                                                                                                                                                                                                                                                                                                НО, вот только сейчас заметил, что если вводить только числа, то- работает. То есть, система сама незаметно преобразует типы и выдаёт ошибку только в том случае, если не может этого сделать. Ну, не знаю... Мне бы больше понравилось, если бы ошибки не соответствия типов выдавались бы на этапе компиляции.
                                                                                                                                                                                                                                                                                                                                                                  В VB6 типы приводятся автоматически, по крайней мере те, которые можно привести. Кроме того, у классов есть свойства по умолчанию, например, у текстбокса это свойство Text. Можно написать:
                                                                                                                                                                                                                                                                                                                                                                  ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                    Caption = Text1

                                                                                                                                                                                                                                                                                                                                                                  И в заголовок формы попадёт текст из текстбокса Text1. Согласен, тут это спорное удобство, но вот как это очищает математику от лишних приведений типов - это мне нравится.
                                                                                                                                                                                                                                                                                                                                                                    По не ясной причине BeQuits у меня сейчас запускается в окне.
                                                                                                                                                                                                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                      По не ясной причине BeQuits у меня сейчас запускается в окне.

                                                                                                                                                                                                                                                                                                                                                                      Исходник запускается только в окне и не реагирует на настройки режимы экрана, это сделано для облегчения отладки, так же не скрывается курсор мыши.
                                                                                                                                                                                                                                                                                                                                                                      В модуле modD3D есть строка:
                                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                        #Const Test = True

                                                                                                                                                                                                                                                                                                                                                                      Это значит, что мы объявили тестовый режим, перед компиляцией релиза эту строку нужно заремить.
                                                                                                                                                                                                                                                                                                                                                                        Сделано за неделю:

                                                                                                                                                                                                                                                                                                                                                                        1. С помощью курса "интуит" более-менее освоился с VB6(курс проходил выборочно и не всё, что хотел).

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


                                                                                                                                                                                                                                                                                                                                                                        Я понимаю, что сделал совсем мало, но, действительно, времени нет. Очень надеялся на выходные, но тоже был довольно загружен домашними делами.
                                                                                                                                                                                                                                                                                                                                                                        Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                          С помощью курса "интуит" более-менее освоился с VB6(курс проходил выборочно и не всё, что хотел).


                                                                                                                                                                                                                                                                                                                                                                          Из того, что хотел, но не успел- про классы в VB надо будет пройти лекцию+тест.

                                                                                                                                                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                          2. Привинтил к классу cSector метод Create, который создаёт пока всего один сектор. При этом, первый сектор, с игроком на нём, загружается, а создаваемый сектор вклинивается в то, что загружено.


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

                                                                                                                                                                                                                                                                                                                                                                          И ещё я на той неделе просмотрел много Oblige-сгенерированных карт и я понял некоторые базовые моменты генерации. Они простые совсем.

                                                                                                                                                                                                                                                                                                                                                                          Сегодня времени нет совсем, но, вообще, я готовлюсь к подвигам ))
                                                                                                                                                                                                                                                                                                                                                                          ---

                                                                                                                                                                                                                                                                                                                                                                          ВОПРОСЫ:

                                                                                                                                                                                                                                                                                                                                                                          1. как сделать освещение совсем примитивным: нет единого источника света, всё освещено одинаково хорошо, даже внутри закрытых комнат с потолком? вроде бы это ambient называется? (пока не проверил)

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

                                                                                                                                                                                                                                                                                                                                                                          3. как убрать холмистую землю совсем? (с наскоку не получилось)

                                                                                                                                                                                                                                                                                                                                                                          4. можно ли сделать "косые" сектора, чтобы низ и верх сектора не были строго параллельны?

                                                                                                                                                                                                                                                                                                                                                                          - вопросы расположены по степени важности, единственный на самом деле важный- первый вопрос.
                                                                                                                                                                                                                                                                                                                                                                          Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                            как сделать освещение совсем примитивным: нет единого источника света, всё освещено одинаково хорошо, даже внутри закрытых комнат с потолком? вроде бы это ambient называется?

                                                                                                                                                                                                                                                                                                                                                                            Да, это ambient, просто блокнотом подредактируй .map файл, ambient задай = "1, 1, 1", а "diffuse" и "specular" = "0, 0, 0".
                                                                                                                                                                                                                                                                                                                                                                            Но при этом шейдеры всё равно будут просчитывать свет, который не видно, если тебе нужно так и оставить - есть смысл упростить шейдеры, а так же выбросить из проекта рендер в текстуру теней, это сильно поднимет производительность. Так же станут не нужны карты нормалей (текстуры tex1n.jpg, tex2n.jpg и т. д.)
                                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                            как отслеживается завершение уровня? допустим, я хочу, чтобы при собирании предмета(аптечки), уровень завершался?

                                                                                                                                                                                                                                                                                                                                                                            Сейчас там завершение уровня притянуто за уши к боссам, это было сделано временно для конкурса.
                                                                                                                                                                                                                                                                                                                                                                            Есть три режима игры:
                                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                              Public Enum eGameMode
                                                                                                                                                                                                                                                                                                                                                                                gm_normal = 0
                                                                                                                                                                                                                                                                                                                                                                                gm_final = 1
                                                                                                                                                                                                                                                                                                                                                                                gm_god = 2
                                                                                                                                                                                                                                                                                                                                                                              End Enum
                                                                                                                                                                                                                                                                                                                                                                              Public GameMode As eGameMode

                                                                                                                                                                                                                                                                                                                                                                            При старте ставится gm_normal, далее в процедуре HeadTick (это "головы", боссы) при рождении первой головы становится GameMode = gm_final, а после уничтожения последней головы GameMode = gm_god:
                                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                If HeadCnt > 0 And GameMode = gm_normal Then
                                                                                                                                                                                                                                                                                                                                                                                  GameMode = gm_final
                                                                                                                                                                                                                                                                                                                                                                                ElseIf HeadCnt = 0 And GameMode = gm_final Then
                                                                                                                                                                                                                                                                                                                                                                                  AddHealth 100
                                                                                                                                                                                                                                                                                                                                                                                  GameMode = gm_god
                                                                                                                                                                                                                                                                                                                                                                                End If

                                                                                                                                                                                                                                                                                                                                                                            В режиме gm_final отображаются уровни здоровья боссов, а в режиме gm_god ГГ становится неуязвим, в процедуре ConsoleTick регулярно выводится сообщение "You win!".
                                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                            как убрать холмистую землю совсем?

                                                                                                                                                                                                                                                                                                                                                                            Это часть карты, объект "ландшафт":
                                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                              Public LS As cLandScape

                                                                                                                                                                                                                                                                                                                                                                            Можно вычистить всё с ним связанное, начиная от загрузки из карты высот, заканчивая уничтожением, удалить сам класс cLandScape, не забыть удалить ландшафт из теста коллизий: SphereInMap и RayInMap и из физики ГГ: PhysTick.
                                                                                                                                                                                                                                                                                                                                                                            Если не выйдет, могу почистить, но уже не сегодня.
                                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                            можно ли сделать "косые" сектора, чтобы низ и верх сектора не были строго параллельны?

                                                                                                                                                                                                                                                                                                                                                                            Это не сложно, главная сложность - учесть это в физике. Я этого не сделал не из-за сложности в написании игры, а из-за того, что это усложнит редактор и работу в нём, а мне хотелось максимально простое редактирование, как в DOOM.
                                                                                                                                                                                                                                                                                                                                                                            Сообщение отредактировано: Mikle -
                                                                                                                                                                                                                                                                                                                                                                              Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                              Да, это ambient, просто блокнотом подредактируй .map файл, ambient задай


                                                                                                                                                                                                                                                                                                                                                                              Ага! Главный вопрос решён :yes:

                                                                                                                                                                                                                                                                                                                                                                              Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                              Но при этом шейдеры всё равно будут просчитывать свет, который не видно, если тебе нужно так и оставить - есть смысл упростить шейдеры, а так же выбросить из проекта рендер в текстуру теней, это сильно поднимет производительность. Так же станут не нужны карты нормалей (текстуры tex1n.jpg, tex2n.jpg и т. д.)


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

                                                                                                                                                                                                                                                                                                                                                                              Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                              в процедуре ConsoleTick регулярно выводится сообщение "You win!".


                                                                                                                                                                                                                                                                                                                                                                              Эмм... Было полезно узнать про процедуры, но мне, чтобы оформить завершение уровня, видимо, нужно будет присмотреться к тому, что происходит по нажатию <Esc>.

                                                                                                                                                                                                                                                                                                                                                                              И, да- заставки надо будет засунуть при загрузке, а так же в конце каждого уровня.

                                                                                                                                                                                                                                                                                                                                                                              Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                              Если не выйдет, могу почистить, но уже не сегодня.


                                                                                                                                                                                                                                                                                                                                                                              Попробую вычистить всё сам. В идеале, мне бы понадобился такой террайн, но только сгенерированный под уровень. А пока что- уберу нафик. Зато смогу делать смертельные провалы в полу.

                                                                                                                                                                                                                                                                                                                                                                              Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                              Это не сложно, главная сложность - учесть это в физике. Я этого не сделал не из-за сложности в написании игры, а из-за того, что это усложнит редактор и работу в нём, а мне хотелось максимально простое редактирование, как в DOOM.


                                                                                                                                                                                                                                                                                                                                                                              Отлично. Буду знать.

                                                                                                                                                                                                                                                                                                                                                                              ---

                                                                                                                                                                                                                                                                                                                                                                              До проекта доберусь только завтра.
                                                                                                                                                                                                                                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                видимо, нужно будет присмотреться к тому, что происходит по нажатию <Esc>

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

                                                                                                                                                                                                                                                                                                                                                                                  Что касается добавления при генерации предметов вообще, то это ещё не скоро понадобится и... думаю, нужно вообще переписать проект с нуля: в новый проект скопипастить только самое нужное и понятное И переделать по-своему.

                                                                                                                                                                                                                                                                                                                                                                                  На сейчас вырисовываются следующие направления деятельности:

                                                                                                                                                                                                                                                                                                                                                                                  1. борьба с движком- освоение и переделка исходников Майкла.

                                                                                                                                                                                                                                                                                                                                                                                  2. генерация уровней- уже можно начинать пилить потихонечку.

                                                                                                                                                                                                                                                                                                                                                                                  3. поиск фриварного контента для игры: текстуры, модели, эффекты.

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

                                                                                                                                                                                                                                                                                                                                                                                    3.

                                                                                                                                                                                                                                                                                                                                                                                    из моделей больше всего интересует оружие... вообще, оружие- это отдельная песня.

                                                                                                                                                                                                                                                                                                                                                                                    из эффектов больше всего интересуют "защитные поля", как во многих играх, начиная с Duke Nukem 3d; различные виды горящего огня; текущая вода.

                                                                                                                                                                                                                                                                                                                                                                                    4.

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


                                                                                                                                                                                                                                                                                                                                                                                      Попытался начать... ВОПРОС: как лучше всего организовать работу со списками в VB 6.0 ?

                                                                                                                                                                                                                                                                                                                                                                                      То есть, мне нужно добавлять элементы, убирать элементы и тыпы.

                                                                                                                                                                                                                                                                                                                                                                                      Сами элементы могут иметь сложную структуру- и с этим тоже небольшой вопрос: как, блин, сделать нормальную запись типа сишного Record?
                                                                                                                                                                                                                                                                                                                                                                                        Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                        запись типа сишного Record?
                                                                                                                                                                                                                                                                                                                                                                                        :blink: :lol:
                                                                                                                                                                                                                                                                                                                                                                                          упс! record- это в Delphi, в С/C++ это struct.
                                                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                            record- это в Delphi, в С/C++ это struct.

                                                                                                                                                                                                                                                                                                                                                                                            Так Type же, в моём исходнике их достаточно, например:
                                                                                                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                              Public Type Map3Vertex
                                                                                                                                                                                                                                                                                                                                                                                                Pos As D3DVECTOR
                                                                                                                                                                                                                                                                                                                                                                                                tu As Single
                                                                                                                                                                                                                                                                                                                                                                                                tv As Single
                                                                                                                                                                                                                                                                                                                                                                                                Tang As D3DVECTOR
                                                                                                                                                                                                                                                                                                                                                                                                Bnrm As D3DVECTOR
                                                                                                                                                                                                                                                                                                                                                                                                Norm As D3DVECTOR
                                                                                                                                                                                                                                                                                                                                                                                              End Type

                                                                                                                                                                                                                                                                                                                                                                                            Это и есть структура.
                                                                                                                                                                                                                                                                                                                                                                                            На остальное позже отвечу.
                                                                                                                                                                                                                                                                                                                                                                                              Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                                              Так Type же, в моём исходнике их достаточно, например


                                                                                                                                                                                                                                                                                                                                                                                              Да, Type я пробовал, но что-то не срослось... Мож, из-за того, что public/private не указал.

                                                                                                                                                                                                                                                                                                                                                                                              Основной вопрос на сейчас, вот:
                                                                                                                                                                                                                                                                                                                                                                                              Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                              как лучше всего организовать работу со списками в VB 6.0 ?

                                                                                                                                                                                                                                                                                                                                                                                              То есть, мне нужно добавлять элементы, убирать элементы и тыпы.


                                                                                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                                                                                              И, да- в BeQuits есть и это, но... извиняюсь, но хотелось бы получить отдельные разъяснения.
                                                                                                                                                                                                                                                                                                                                                                                                выполнил поиск по "односвязный список на VB 6.0" и что-то нашлось. ранее поиск просто списков выдавал какую-то фигню про работу с листбоксами.

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

                                                                                                                                                                                                                                                                                                                                                                                                про записи Mikle выше написал и, да- надо было мне внимательнее быть к коду. а то я уже начал думать, что записи с помощью Type не сделаешь, но дело было в том, что я неверно его использовал.

                                                                                                                                                                                                                                                                                                                                                                                                ну, что же- про списки можно сказать, что вопрос решён.

                                                                                                                                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                для расширения кругозора нужно будет ещё попробовать использовать коллекции для реализации списков: списки в VB 6.0
                                                                                                                                                                                                                                                                                                                                                                                                https://msdn.microsoft.com/ru-ru/library/yb...#code-snippet-1
                                                                                                                                                                                                                                                                                                                                                                                                  Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                  нашёлся алгоритм реализации "списка" на основе массива, заведомо достаточного размера для хранения всех элементов

                                                                                                                                                                                                                                                                                                                                                                                                  У меня примерно так сделано задымление в модуле modCloud:
                                                                                                                                                                                                                                                                                                                                                                                                  CloudAdd добавляет к дыму ещё один партикль в конец списка и приращает счётчик на 1.
                                                                                                                                                                                                                                                                                                                                                                                                  CloudDel переставляет последний элемент на место удаляемого и уменьшает на 1 счётчик.
                                                                                                                                                                                                                                                                                                                                                                                                  По тому же принципу работают ещё несколько списков.
                                                                                                                                                                                                                                                                                                                                                                                                  А коллекции я бы не стал использовать, разве что для чего-то совсем уж глобального, они довольно тормозные, постоянно выделяют-освобождают память.
                                                                                                                                                                                                                                                                                                                                                                                                  Сообщение отредактировано: Mikle -
                                                                                                                                                                                                                                                                                                                                                                                                    Блин, размышления о VB 6.0 и выборе языка для программирования игр немного сбили меня с толку. Но сегодня времени всё равно не было, так что- я ничего не потерял.

                                                                                                                                                                                                                                                                                                                                                                                                    Планы, в-общем, остаются прежними: пожалуй, продолжу разбираться с VB 6.0 для себя. Генерация уровней- не сложная задачка и хорошо подходит для ознакомления с языком. А как понадобится- легко можно будет перевести написанное на другой язык.

                                                                                                                                                                                                                                                                                                                                                                                                    В будущем планирую перейти на C++, заинтересовался библиотекой SFML.
                                                                                                                                                                                                                                                                                                                                                                                                      По поводу VB6 vs C++ и возможного перехода с первого на второй в будущем. Оно-то, конечно, можно, я сам именно таким путем и пошел, поэтому могу сказать, что все не так уж и просто: в C++ практически отсутствует в объективном понимании "синтаксический сахар", а многие вещи, которые на VB6 делаются неявно, требуют явного описания. Особенно тяжело, думаю, будет даваться работа с COM в случае желания совместить наработки на VB6 с плюсами. Даже ATL не скрывает той низкоуровневой кухни, которая есть в COM и которую надо прописывать для совершения элементарных действий, таких, как копирование массивов или работа со строками.

                                                                                                                                                                                                                                                                                                                                                                                                      Что касается перспективности, то опять же, https://en.wikipedia.org/wiki/Game_programm...mming_languages
                                                                                                                                                                                                                                                                                                                                                                                                      В топе C, C++ и C#. Кое-где Java. Если уж начинать более-менее серьезный проект, пусть и для себя, то лучше его начинать на чем-то актуальном, на чем можно найти примеры, документацию, помощников, в конце концов
                                                                                                                                                                                                                                                                                                                                                                                                      const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                                                                                                                                                                                                                                                                                                                                                                                                      for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                                                                                                                                                                                                                                                                                                                                                                                                      user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                                                                                                                                                                                                                                                                                                                                                                                                        Цитата B.V. @
                                                                                                                                                                                                                                                                                                                                                                                                        По поводу VB6 vs C++ и возможного перехода с первого на второй в будущем. Оно-то, конечно, можно, я сам именно таким путем и пошел, поэтому могу сказать, что все не так уж и просто

                                                                                                                                                                                                                                                                                                                                                                                                        Как я понял, ya2500 с C++ уже знаком, а сейчас идёт знакомство скорее с DirectX и вообще с общей концепцией написания игры на нём.
                                                                                                                                                                                                                                                                                                                                                                                                        Цитата B.V. @
                                                                                                                                                                                                                                                                                                                                                                                                        Особенно тяжело, думаю, будет даваться работа с COM в случае желания совместить наработки на VB6 с плюсами

                                                                                                                                                                                                                                                                                                                                                                                                        Цитата B.V. @
                                                                                                                                                                                                                                                                                                                                                                                                        надо прописывать для совершения элементарных действий, таких, как копирование массивов или работа со строками.

                                                                                                                                                                                                                                                                                                                                                                                                        А у меня COM практически не используется. Да, в VB6 мы неявно создаём окно-контекст для рендера, в C++ мы это найдём в любом туториале из SDK.
                                                                                                                                                                                                                                                                                                                                                                                                        Со строками особой работы нет, разве что вывод текстовых сообщений, типа "You Win!". Я обхожусь без D3DX, печатая текст в невидимый PictureBox, далее копируя изображение в текстуру, при таком небольшом количестве сообщений можно просто хранить их в виде картинок в файлах, а можно таки задействовать D3DX - это делается с помощью ID3DXFont:DrawText метода.
                                                                                                                                                                                                                                                                                                                                                                                                        Копирование массивов? Тут ещё проще, memcpy.
                                                                                                                                                                                                                                                                                                                                                                                                        Я сам немного знаю C++, но даже при таком небольшом уровне владения вижу, что разница невелика, перевод не сложен. Вот что сложно - эта сама работа на C++, отладка, прототипирование. Это легко и приятно на C#, практически как и на VB, но на шарпе мы привязываемся к фреймворку (что пол-беды) и обязательно к какой-либо NET надстройке над DirectX, которую нужно не просто таскать с игрой, но и заставлять пользователя её инсталлировать, а у него она может оказаться уже инсталлирована, но другой версии (старее-новее), и да, вроде как более новые версии совместимы с более старыми, но это только "вроде как".
                                                                                                                                                                                                                                                                                                                                                                                                        Я считаю большой ошибкой, что Microsoft не стали поддерживать ManagedDX и включать его в NET фреймворк, причём достаточно было бы просто иметь ManagedDX обёрткой над обычным DirectX без раздутия его дополнительным функционалом. Будь так, я бы сам давно забросил VB6.
                                                                                                                                                                                                                                                                                                                                                                                                          Пока пилю на VB простенькую генерацию лабиринтов, НО не таких как у Майкла, а более других. Это- самая базовая основа будущего алгоритма генерации, который потом будет вечно допиливаться.

                                                                                                                                                                                                                                                                                                                                                                                                          Делаю в отдельном проекте.

                                                                                                                                                                                                                                                                                                                                                                                                          В планы могу добавить ещё одно направление своей деятельности:

                                                                                                                                                                                                                                                                                                                                                                                                          5. переписывание проекта на C++

                                                                                                                                                                                                                                                                                                                                                                                                          это не приоритетно, но потихонечку надо бы заниматься и этим тоже. И хорошо бы сделать поддержку и OpenGL и DirectX. Попробовать и то и то, чтобы сравнить.

                                                                                                                                                                                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                          ---

                                                                                                                                                                                                                                                                                                                                                                                                          Вообще, в плане алгоритма генерации, меня удивляет, что автор Oblige не стал ориентироваться на настоящие уровни Doom-1, к примеру. Насколько я мог наблюдать Oblige, ни при каких настройках нет ни малейшего шанса, что сгенерится первый уровень первого эпизода Doom-1. Ну, то есть, он и не должен генериться, но, в данном случае, он вообще не вписывается в алгоритм. Когда-нибудь можно будет подумать в этом направлении.
                                                                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                            Пока пилю на VB простенькую генерацию лабиринтов, НО не таких как у Майкла, а более других. Это- самая базовая основа будущего алгоритма генерации, который потом будет вечно допиливаться.

                                                                                                                                                                                                                                                                                                                                                                                                            Делаю в отдельном проекте.


                                                                                                                                                                                                                                                                                                                                                                                                            Задачка не сложная, но, чтобы красиво реализовать, надо было изначально прогу распланировать. А если некрасиво, то время от времени приходится что-то переделывать и получается всё некрасивее и некрасивее ))

                                                                                                                                                                                                                                                                                                                                                                                                            Что-то я хватку потерял. То ли это от непривычности бейсика. Определённо, на C++ я бы писал иначе. Но в моём бесплатном VC++ 2008 нет возможности писать под винду(окошки виндовые и всякое такое). А на моём VB 6.0 можно очень просто и красиво организовать вывод.
                                                                                                                                                                                                                                                                                                                                                                                                              А не проще ли было тогда взять ES7+Flow (Babel compiler) и пользовать WebGL (OpenGL ES 2.0)? И переносимо, и ООП нормальное, и современно, и запускается на вообще всех существующих платформах, хоть на часах :-?
                                                                                                                                                                                                                                                                                                                                                                                                              Сообщение отредактировано: Serafim -
                                                                                                                                                                                                                                                                                                                                                                                                              user posted image user posted image
                                                                                                                                                                                                                                                                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                Но в моём бесплатном VC++ 2008 нет возможности писать под винду(окошки виндовые и всякое такое).

                                                                                                                                                                                                                                                                                                                                                                                                                Гм. А про бесплатную и достаточно функциональную Visual Studio 2015 слышал?
                                                                                                                                                                                                                                                                                                                                                                                                                const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                                                                                                                                                                                                                                                                                                                                                                                                                for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                                                                                                                                                                                                                                                                                                                                                                                                                user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                  Но в моём бесплатном VC++ 2008 нет возможности писать под винду(окошки виндовые и всякое такое)

                                                                                                                                                                                                                                                                                                                                                                                                                  Не понял. А подо что, как не под Винду, можно писать на VC++ 2008?
                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                                                                    А подо что, как не под Винду, можно писать на VC++ 2008?
                                                                                                                                                                                                                                                                                                                                                                                                                    Под консоль.
                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата Serafim @
                                                                                                                                                                                                                                                                                                                                                                                                                      А не проще ли было тогда взять ES7+Flow (Babel compiler) и пользовать WebGL (OpenGL ES 2.0)? И переносимо, и ООП нормальное, и современно, и запускается на вообще всех существующих платформах, хоть на часах


                                                                                                                                                                                                                                                                                                                                                                                                                      Ни фига не понятно, но выглядит интересно. Буду иметь ввиду. +1

                                                                                                                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата B.V. @
                                                                                                                                                                                                                                                                                                                                                                                                                      Гм. А про бесплатную и достаточно функциональную Visual Studio 2015 слышал?


                                                                                                                                                                                                                                                                                                                                                                                                                      Не ясно, что такое "достаточно функциональна", НО за совет +1 upd: не нашёл, куда +1 всунуть ))

                                                                                                                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                                                                      Не понял. А подо что, как не под Винду, можно писать на VC++ 2008?


                                                                                                                                                                                                                                                                                                                                                                                                                      Я имел ввиду, что в бесплатной версии нет библиотек, обеспечивающих взаимодействие с виндой. А так- можно, конечно, под винду писать, но только, например, интерфейс придётся прописывать самому, ручками.
                                                                                                                                                                                                                                                                                                                                                                                                                      Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                                                                        Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                        Не ясно, что такое "достаточно функциональна"

                                                                                                                                                                                                                                                                                                                                                                                                                        По ссылочке выделяется слово "полнофункциональная". Понимай как хочешь, я её еще не пробовал, но предполагаю, что туда включено все, чего тебе не хватало в бесплатной редакции VC++ 2008, например, MFC
                                                                                                                                                                                                                                                                                                                                                                                                                        const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                                                                                                                                                                                                                                                                                                                                                                                                                        for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                                                                                                                                                                                                                                                                                                                                                                                                                        user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                                                                                                                                                                                                                                                                                                                                                                                                                          Воскресенье. Почти весь день был свободен, для проекта ни фига не сделал. Мож оно и правильно-то в воскресенье... Но, чувствую, что я таки не программист.

                                                                                                                                                                                                                                                                                                                                                                                                                          Нет влечения, нет мотивации, не затягивает это дело. А если что-то есть, то быстро пропадает. Я таки попробую бороться за то, чтобы остаться "немножко программистом", но... не думаю, что при моей не-увлечённости, из этого может выйти что-то толковое.

                                                                                                                                                                                                                                                                                                                                                                                                                          Можно пойти по другому пути и нащупывать то, что увлекает. Проблема только в том, что увлекаюсь я ненадолго, а чтобы сделать хорошо даже простые вещи, мне требуется время и усилия.
                                                                                                                                                                                                                                                                                                                                                                                                                            Таки поясню, что конкретно я хотел(и всё ещё хочу сделать). Ну, то есть, про ту самую "основу генерации":

                                                                                                                                                                                                                                                                                                                                                                                                                            1. Если в моей версии Oblige(одна из последних, точнее версию указывал здесь ранее), убрать все навороты(галочки в меню) и погенерить уровни, то, можно заметить, что они всегда состоят из соединённых друг с другом прямоугольных комнат разного размера. К этому ещё можно добавить, что пространство самих прямоугольных комнат разбито на крупные квадраты, размер которых для всех комнат одинаков... но внутреннее наполнение комнат- разговор отдельный.

                                                                                                                                                                                                                                                                                                                                                                                                                            То есть, основа всей чудесной генерации Oblige предельно проста.

                                                                                                                                                                                                                                                                                                                                                                                                                            И примерно это я и хотел сделать, а именно: отрисовывать план комнат. Но чуть-чуть не так, а чтобы комнаты лепились друг к другу без соединений. Так, чтобы было не ясно, где заканчивается одна комната, а начинается другая- просто так чуточку проще- не надо прорисовывать соединений комнат. -- вот над этим и бьюсь сейчас. По ходу возникли некоторые тонкости насчёт размеров и упихивания комнат в узкие неиспользованные места, так что, в итоге алгоритм получается чисто мой, уникальный.

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

                                                                                                                                                                                                                                                                                                                                                                                                                            В конечном варианте алгоритма должна бы до генерации задаваться частота различных соединений комнат: просто переход одной комнаты в другую или вставлять разделяющую стену с проёмом(или проёмами).
                                                                                                                                                                                                                                                                                                                                                                                                                            Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                              Ни фига не понятно, но выглядит интересно. Буду иметь ввиду. +1

                                                                                                                                                                                                                                                                                                                                                                                                                              Babel - транспайлер ES7 в ES5
                                                                                                                                                                                                                                                                                                                                                                                                                              Flow - надстройка над бабелом для статической типизации аргументов
                                                                                                                                                                                                                                                                                                                                                                                                                              WebGL - стандарт для OpenGL, поддерживаемого в web, основанный на OpenGL ES 2.0. WebGL 2.0 на OpenGL ES 3.0 соответственно (но пока лишь в ночных билдах оно). Например вот демка в качестве примера: http://www.edankwan.com/experiments/smashing-mega-scene/

                                                                                                                                                                                                                                                                                                                                                                                                                              Код ES7 выглядит примерно так

                                                                                                                                                                                                                                                                                                                                                                                                                              Контроллер главного меню из моей игры:
                                                                                                                                                                                                                                                                                                                                                                                                                              Скрытый текст
                                                                                                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                import View from "/View/View";
                                                                                                                                                                                                                                                                                                                                                                                                                                import Sound from "/Audio/Sound";
                                                                                                                                                                                                                                                                                                                                                                                                                                import Video from "/Render/Video";
                                                                                                                                                                                                                                                                                                                                                                                                                                import Sprite from "/Render/Sprite";
                                                                                                                                                                                                                                                                                                                                                                                                                                import Inject from "/Container/Inject";
                                                                                                                                                                                                                                                                                                                                                                                                                                import Container from "/View/Container";
                                                                                                                                                                                                                                                                                                                                                                                                                                import Connection from "/Socket/Connection";
                                                                                                                                                                                                                                                                                                                                                                                                                                import RenderLoop from "/Render/RenderLoop";
                                                                                                                                                                                                                                                                                                                                                                                                                                import BaseViewModel from "/ViewModels/BaseViewModel";
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                /**
                                                                                                                                                                                                                                                                                                                                                                                                                                 * @TODO Клик по птичке - запуск битвы с птичкой =)
                                                                                                                                                                                                                                                                                                                                                                                                                                 */
                                                                                                                                                                                                                                                                                                                                                                                                                                class Background {
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {Video}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    fire = new Video('/img/menu/fire', 100, 175);
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {Image}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    bg = new Image;
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {Image}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    overlay = new Image;
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {RenderLoop}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    loop = new RenderLoop();
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {[{i:Sprite, x:number, y:number}]}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    birds = [
                                                                                                                                                                                                                                                                                                                                                                                                                                        {i: new Sprite('/img/menu/bird-1.png', 18, 3, 2), x: 241, y: 253},
                                                                                                                                                                                                                                                                                                                                                                                                                                        {i: new Sprite('/img/menu/bird-2.png', 18, 3, 2), x: 420, y: 396},
                                                                                                                                                                                                                                                                                                                                                                                                                                    ];
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {CanvasRenderingContext2D|null}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    ctx = null;
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @constructor
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    constructor() {
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.bg.src      = '/img/menu/bg.jpg';
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.overlay.src = '/img/menu/overlay.png';
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.fire.loop   = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        var videoSize = {
                                                                                                                                                                                                                                                                                                                                                                                                                                            width:  Math.round(100 / 1.2),
                                                                                                                                                                                                                                                                                                                                                                                                                                            height: Math.round(175 / 1.2)
                                                                                                                                                                                                                                                                                                                                                                                                                                        };
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.loop.subscribe(i => {
                                                                                                                                                                                                                                                                                                                                                                                                                                            if (this.ctx) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.drawImage(this.bg, 0, 0, 1000, 560);
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.save();
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.globalAlpha              = 0.8;
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.birds.forEach(bird => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                    bird.i.render(this.ctx, bird.x, bird.y);
                                                                                                                                                                                                                                                                                                                                                                                                                                                    if (bird.i.current == 1 || Math.random() > 0.9) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                        bird.i.random();
                                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                                });
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.restore();
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.save();
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.globalAlpha              = 0.5;
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.globalCompositeOperation = 'lighter';
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.drawImage(this.fire.source, 518, 252, videoSize.width, videoSize.height);
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.restore();
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.ctx.drawImage(this.overlay, 0, 0, 1000, 560);
                                                                                                                                                                                                                                                                                                                                                                                                                                            } else {
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.loop.stop();
                                                                                                                                                                                                                                                                                                                                                                                                                                                throw new Error('Starting loop without canvas context');
                                                                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param canvas
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    render(canvas) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.ctx = canvas.getContext('2d');
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.fire.play();
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.loop.start();
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     *
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    dispose() {
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.fire.stop();
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.loop.stop();
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                @View('menu')
                                                                                                                                                                                                                                                                                                                                                                                                                                export default class MainMenuViewModel extends BaseViewModel {
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * Search status
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {KnockoutObservableStatic}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    searchStatus = ko.observable(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @type {Background}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    bg = new Background;
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @constructor
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    constructor() {
                                                                                                                                                                                                                                                                                                                                                                                                                                        super();
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.searchStatus.subscribe(state => {
                                                                                                                                                                                                                                                                                                                                                                                                                                            if (state) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                this.playSound('search:start');
                                                                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param sound
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param alias
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    @Inject('sound')
                                                                                                                                                                                                                                                                                                                                                                                                                                    playSound(sound:Sound, alias) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        return sound.play(alias);
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param socket
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    @Inject('socket')
                                                                                                                                                                                                                                                                                                                                                                                                                                    show(socket:Connection) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.bg.render(document.getElementById('menu'));
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        super.show();
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        if (socket.hasAnswer('rooms')) {
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.loadRoom(socket.getAnswer('rooms'));
                                                                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     *
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    hide() {
                                                                                                                                                                                                                                                                                                                                                                                                                                        super.hide();
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.bg.dispose();
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param view
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param room
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    @Inject('view')
                                                                                                                                                                                                                                                                                                                                                                                                                                    loadRoom(view:Container, room) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.playSound('search:found');
                                                                                                                                                                                                                                                                                                                                                                                                                                        view.hide('menu').show('battle', room);
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param {Connection} socket
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    @Inject('socket')
                                                                                                                                                                                                                                                                                                                                                                                                                                    search(socket:Connection) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        socket.waitAnswer('search_start').then(data => {
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.searchStatus(true);
                                                                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        socket.waitAnswer('rooms').then(data => {
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.searchStatus(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.loadRoom(data);
                                                                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        socket.on('close', e => {
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.searchStatus(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.playSound('search:stop');
                                                                                                                                                                                                                                                                                                                                                                                                                                        }).once();
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        socket.send('Battle/PrepareController@search');
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param {Connection} socket
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    @Inject('socket')
                                                                                                                                                                                                                                                                                                                                                                                                                                    searchStop(socket:Connection) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        socket.waitAnswer('search_cancel').then(data => {
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.searchStatus(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.playSound('search:stop');
                                                                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                                                                        socket.send('Battle/PrepareController@searchStop');
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                }



                                                                                                                                                                                                                                                                                                                                                                                                                              Результат работы:





                                                                                                                                                                                                                                                                                                                                                                                                                              Тупо эвент диспатчер

                                                                                                                                                                                                                                                                                                                                                                                                                              Скрытый текст
                                                                                                                                                                                                                                                                                                                                                                                                                              ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                import EventObject from "/Events/EventObject";
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                /**
                                                                                                                                                                                                                                                                                                                                                                                                                                 * Event Dispatcher
                                                                                                                                                                                                                                                                                                                                                                                                                                 */
                                                                                                                                                                                                                                                                                                                                                                                                                                export default class Dispatcher {
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @constructor
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    constructor() {
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.events = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param name
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param callback
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @returns {EventObject}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    listen(name:String, callback:Function) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        var event = new EventObject(this, name, callback);
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.getHandlers(name).push(event);
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        return event;
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param name
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param callback
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @returns {Event}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    once(name:String, callback:Function) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        return this.listen(name, callback).once();
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param name
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param args
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @returns {boolean}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    fire(name:String, ...args) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        this.getHandlers(name);
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        var handlers = this.getCompatibleEvents(name);
                                                                                                                                                                                                                                                                                                                                                                                                                                        var result   = args;
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        for (var i = 0; i < handlers.length; i++) {
                                                                                                                                                                                                                                                                                                                                                                                                                                            var eventResult = handlers[i].fire(...(result.concat([name])));
                                                                                                                                                                                                                                                                                                                                                                                                                                            if (eventResult === false) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                return false;
                                                                                                                                                                                                                                                                                                                                                                                                                                            } else if (typeof eventResult !== 'undefined') {
                                                                                                                                                                                                                                                                                                                                                                                                                                                result = eventResult;
                                                                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        return result.length === 1 ? result[0] : result;
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param name
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @returns {*}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    getHandlers(name) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        if (!this.events[name]) {
                                                                                                                                                                                                                                                                                                                                                                                                                                            this.events[name] = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        return this.events[name];
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param name
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @returns {Array}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    getCompatibleEvents(name) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        var compatible = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        Object.keys(this.events).forEach(event => {
                                                                                                                                                                                                                                                                                                                                                                                                                                            var regexp = Dispatcher.createHandlerNameRegexp(event);
                                                                                                                                                                                                                                                                                                                                                                                                                                            if (name.match(regexp)) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                compatible = compatible.concat(this.events[event]);
                                                                                                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                        return compatible;
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                    /**
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @param name
                                                                                                                                                                                                                                                                                                                                                                                                                                     * @returns {RegExp}
                                                                                                                                                                                                                                                                                                                                                                                                                                     */
                                                                                                                                                                                                                                                                                                                                                                                                                                    static createHandlerNameRegexp(name) {
                                                                                                                                                                                                                                                                                                                                                                                                                                        name = name
                                                                                                                                                                                                                                                                                                                                                                                                                                            .replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g, "\\$&")
                                                                                                                                                                                                                                                                                                                                                                                                                                            .replace('*', '(.*?)');
                                                                                                                                                                                                                                                                                                                                                                                                                                        return new RegExp(`^${name}$`, 'gi');
                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                                                              Сообщение отредактировано: Serafim -
                                                                                                                                                                                                                                                                                                                                                                                                                              user posted image user posted image
                                                                                                                                                                                                                                                                                                                                                                                                                                В-общем, сейчас я решил расслабиться и отдохнуть. Иногда появляются какие-то идеи, но... я ведь прекрасно знаю, что моя увлечённость проходит слишком быстро и я ничего не доделаю до конца.

                                                                                                                                                                                                                                                                                                                                                                                                                                Вообще, над начатым 3d-проектом собираюсь работу продолжить. Утрясу кое-какие дела в реале и когда будет поспокойнее, то- займусь. Просто ради того, чтобы давать нагрузку мозгам.

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

                                                                                                                                                                                                                                                                                                                                                                                                                                Вообще, я читал, что для мозга лучше всего, если приходится искать решение за ограниченное время И если в ходе решения приходится учитывать вероятности. Типа игры в дурака на время )) Или в Heartstone(если бы там больше зависело от ума, чем от покупки крутых карт). Или... в покер? Но- нет. Игра в покер имеет точное решение и, хотя оно не простое, но решать каждый раз одну и ту же задачу- это не то. Идеал- это сборник головоломок, из которого головоломки выбираются рандомно и даётся мало времени на их решение. Когда-то я встречал такое- там было про ядерный взрыв: игрок попадает в различные ситуации за 5 сек до ядерного взрыва и нужно успеть сообразить, что надо делать и сделать это(заранее известно только управление- четырьмя стрелками).
                                                                                                                                                                                                                                                                                                                                                                                                                                  -------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                  что было

                                                                                                                                                                                                                                                                                                                                                                                                                                  Что было:

                                                                                                                                                                                                                                                                                                                                                                                                                                  1. Опять начал проходить [относительно]новый X-COM: Enemy Unknown на терминаторе, чтобы почувствовать себя умным.

                                                                                                                                                                                                                                                                                                                                                                                                                                  2. Проанализировал причины своего переключения на эту игру(см п.1), взялся за новый мелкий VB-проект, проанализировал свои успехи, проанализировал причины своих затупов с шахматами и ПОНЯЛ, собственно, вполне очевидную вещь: я плохой программист. Кое-что могу, знаю кое-какие алгоримтические фишки, могу что-то пообсуждать, но практика даётся мне с трудом.

                                                                                                                                                                                                                                                                                                                                                                                                                                  3. Сделал новый мелкий VB-проект из п.2, ссыль на пакет с ихсодниками и экзешником: https://yadi.sk/d/zU2lqd2Tq9LHb Этот проект так же продиктован теми соображениями, что мозги надо держать в тонусе и он является математическим тестом- арифметические примерчики на время: 30 сек на ответ, тест идёт до 10 верных ответов, если отвечаете верно- сложность незначительно растёт, если неверно- сложность ощутимо откатывается назад. Планировал проходить его каждое утро.


                                                                                                                                                                                                                                                                                                                                                                                                                                  ---

                                                                                                                                                                                                                                                                                                                                                                                                                                  Если Mikle сюда ещё заглянет, то у меня пара вопросов:

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

                                                                                                                                                                                                                                                                                                                                                                                                                                  2. как в текстбоксе хорошо обрабатывать нажатие клавиши enter? то есть, мне нужно, чтобы по этому событию выполнялся соответствующий sub.

                                                                                                                                                                                                                                                                                                                                                                                                                                  про VB6
                                                                                                                                                                                                                                                                                                                                                                                                                                  По использованию VB6 возникли следующие замечания:

                                                                                                                                                                                                                                                                                                                                                                                                                                  1. трудно найти нормальную помощь, подходящую под эту версию VB. те ответы, что я находил, у меня не работают.

                                                                                                                                                                                                                                                                                                                                                                                                                                  2. бедная палитра инструментов. в привычном мне Delphi-5 она заметно богаче. да и Delphi-7 вроде бы почти то же самое.

                                                                                                                                                                                                                                                                                                                                                                                                                                  3. не помню, как в Delphi-5, но в Delphi-7 точно была прокрутка скроллбаров колёсиком мыши. в VB6 этого нет. если присмотреться, то можно найти и другие мелкие неудобства устаревшего VB.

                                                                                                                                                                                                                                                                                                                                                                                                                                  НО, в целом, хотя писать на VB и непривычно, но я, пожалуй, начал чувствовать, что в этом таки что-то есть.

                                                                                                                                                                                                                                                                                                                                                                                                                                  на данный момент у меня стоит версия VC++, которая не имеет фич для работы с виндой; а Delphi у меня сейчас не установлен вообще. так что, для мелких проектов под Windows, я буду использовать VB.


                                                                                                                                                                                                                                                                                                                                                                                                                                  планы на будущее
                                                                                                                                                                                                                                                                                                                                                                                                                                  планы на будущее:

                                                                                                                                                                                                                                                                                                                                                                                                                                  - дождаться ответов Mikle и доделать свой мелкий VB-проект

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

                                                                                                                                                                                                                                                                                                                                                                                                                                  - начать 3D-проект на VC++, с тем, чтобы таки реализовать свои хотелки насчёт генерации 3D-лабиринтов и всяческих... впрочем, пока ещё до них дело дойдёт. генерить интересные 3d-уровни- это уже мега-задача.
                                                                                                                                                                                                                                                                                                                                                                                                                                  Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                    бедная палитра инструментов. в привычном мне Delphi-5 она заметно богаче. да и Delphi-7 вроде бы почти то же самое.

                                                                                                                                                                                                                                                                                                                                                                                                                                    Всё остальное подключается через References и Components, отключено по умолчанию.
                                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                    в Delphi-7 точно была прокрутка скроллбаров колёсиком мыши. в VB6 этого нет. если присмотреться, то можно найти и другие мелкие неудобства устаревшего VB.

                                                                                                                                                                                                                                                                                                                                                                                                                                    Вот с колёсиком действительно есть проблемы, впрочем, это решается, я привык и не заморачивался, но видел, что на VBStreets есть решения.
                                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                    как программно делать фокус на нужном элементе(на текстбоксе), чтобы юзеру не приходилось переключаться на него, а чтобы в нужный момент он просто нажимал цифры.

                                                                                                                                                                                                                                                                                                                                                                                                                                    Как-то так:
                                                                                                                                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                      Private Sub Command1_Click()
                                                                                                                                                                                                                                                                                                                                                                                                                                        Text1.SetFocus
                                                                                                                                                                                                                                                                                                                                                                                                                                      End Sub

                                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                    как в текстбоксе хорошо обрабатывать нажатие клавиши enter? то есть, мне нужно, чтобы по этому событию выполнялся соответствующий sub.

                                                                                                                                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                      Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
                                                                                                                                                                                                                                                                                                                                                                                                                                        If KeyCode = vbKeyReturn Then Test
                                                                                                                                                                                                                                                                                                                                                                                                                                      End Sub
                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                      Sub Test()
                                                                                                                                                                                                                                                                                                                                                                                                                                        Caption = Text1.Text
                                                                                                                                                                                                                                                                                                                                                                                                                                      End Sub
                                                                                                                                                                                                                                                                                                                                                                                                                                      Mikle, спасибо большое. Со своей стороны я буду стараться совершенствовать свои навыки поиска ответов в тырнете.

                                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                                                                                      Text1.SetFocus


                                                                                                                                                                                                                                                                                                                                                                                                                                      Работает. Есть маленький ньюанс:
                                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                      You can't set focus on an object while in form load event.
                                                                                                                                                                                                                                                                                                                                                                                                                                      Try focus an object in form activate event.
                                                                                                                                                                                                                                                                                                                                                                                                                                      НО при запуске фокус стоит как раз как надо(выставляется через свойство TabIndex), так что всё отлично.

                                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата Mikle @
                                                                                                                                                                                                                                                                                                                                                                                                                                      If KeyCode = vbKeyReturn Then Test


                                                                                                                                                                                                                                                                                                                                                                                                                                      Работает, НО издаёт звук после нажатия Enter. Как бы этот звук убрать? Похоже, введённый Enter обрабатывается где-то ещё.

                                                                                                                                                                                                                                                                                                                                                                                                                                      В тырнетах нашёл ответ, но на VB6 это не работает:

                                                                                                                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                        Private Sub Text1_KeyPress(KeyAscii As Integer)
                                                                                                                                                                                                                                                                                                                                                                                                                                          if KeyAscii = vbKeyReturn Then KeyAscii = 0
                                                                                                                                                                                                                                                                                                                                                                                                                                          OnActiveControlKeyPress (vbKeyReturn) ' этого в VB6 нет
                                                                                                                                                                                                                                                                                                                                                                                                                                        End Sub
                                                                                                                                                                                                                                                                                                                                                                                                                                        О, разобрался:

                                                                                                                                                                                                                                                                                                                                                                                                                                        ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                                                                                                          Private Sub Text1_KeyPress(KeyCode As Integer)
                                                                                                                                                                                                                                                                                                                                                                                                                                            If KeyCode = vbKeyReturn Then
                                                                                                                                                                                                                                                                                                                                                                                                                                              KeyCode = 0
                                                                                                                                                                                                                                                                                                                                                                                                                                              Main
                                                                                                                                                                                                                                                                                                                                                                                                                                            End If
                                                                                                                                                                                                                                                                                                                                                                                                                                          End Sub


                                                                                                                                                                                                                                                                                                                                                                                                                                        - просто не заметил сразу, что в найденном ответе KeyDown изменён на KeyPress. Как только изменил- звук исчез.

                                                                                                                                                                                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                        Итак, мой доделанный до ума MathTest находится по всё той же ссылке(https://yadi.sk/d/zU2lqd2Tq9LHb), НО есть вопрос: чтобы он запускался не только у тех, у кого есть VB, его надо как-то Publish, или же это уже есть готовый экзешник?
                                                                                                                                                                                                                                                                                                                                                                                                                                        Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                          OnActiveControlKeyPress (vbKeyReturn) ' этого в VB6 нет

                                                                                                                                                                                                                                                                                                                                                                                                                                          В VB6 можно поставить у формы свойство KeyPreview = True, и форма будел ловить события любого активного контрола.
                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                          чтобы он запускался не только у тех, у кого есть VB, его надо как-то Publish, или же это уже есть готовый экзешник?

                                                                                                                                                                                                                                                                                                                                                                                                                                          Этот EXEшник будет работать везде (где есть msvbvm60.dll, а она сейчас есть везде), вот, если бы ты добавил что-то через References или Components, то нужно было бы тащить с собой соответствующую DLL или OCX и регистрировать их.
                                                                                                                                                                                                                                                                                                                                                                                                                                            Вот, никогда раньше не увлекался шахматами, но сейчас они манят меня, как испытание моих программерских способностей.

                                                                                                                                                                                                                                                                                                                                                                                                                                            Например, хотелось бы сделать КНБ-шахматы. С возможностью играть с другом или с компом различной сложности. С возможностью просматривать сыгранную партию и с возможностью стравить комп сам с собой, как для наглядного боя, так и для сыграть сотню партий по быстрому, для статистики, какой ИИ лучше.

                                                                                                                                                                                                                                                                                                                                                                                                                                            Идея насчёт ИИ у меня есть и она должна быть не такой уж плохой по соотношению скорость/сила игры. Посмотрим. Моя идея годится так же и для обычных шахмат и для шашек и вообще для подобных игр. Опирается она на перебор дерева вариантов, то есть, нужно будет уметь создавать, хранить и обрабатывать подобное дерево.

                                                                                                                                                                                                                                                                                                                                                                                                                                            Насчёт графики: наверное, возьму HGE под VC++. Не знаю ничего лучше. Хотя, знаю ZenGL, но он больше для Delphi. Но и для VC++, вроде кто-то говорил, что на нём тоже можно. Что меня огорчает в HGE, так это то, что я тогда так и не смог найти нормального хорошего примера для корректного просто перемещения спрайта. То, как я сделал в своих шахматах- не совсем корректно, на самом деле, поскольку скорость движения фигур может зависеть от скорости компа.

                                                                                                                                                                                                                                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                            Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                            идея годится так же и для обычных шахмат и для шашек и вообще для подобных игр


                                                                                                                                                                                                                                                                                                                                                                                                                                            А для го, рендзю и реверси- не годится.
                                                                                                                                                                                                                                                                                                                                                                                                                                              Какой графический 2d движок с++ выбрать для обучения? - там сам вопрос + 6 комментов. интересно. склоняются к SFML.

                                                                                                                                                                                                                                                                                                                                                                                                                                              Так же и здесь: Пишем игры на C++, Часть 1/3 — Написание мини-фреймворка - в комментах хабравцы нахваливают SFML.

                                                                                                                                                                                                                                                                                                                                                                                                                                              Потыкавшись, нашёл в тырнете немало уроков и примеров на SFML. Пока не вникал, но, похоже, что несложно найти ответы на нужные вопросы. Мне-то многого и не надо: просто нормальную отрисовку обычного перемещения. И я буду рад ознакомиться ещё и с SFML. Особенно, если это несложно ))

                                                                                                                                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                              думаю, что КНБ-шахматы вовсе не проще, чем генерация уровней(хотя, смотря какая генерация), но это просто разные вещи и... не могу объяснить, почему я выбираю то, а не это, но, в любом случае, главное- делать хоть что-нибудь. надеюсь со временем сделать и то и другое.

                                                                                                                                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                              ... а прямо сейчас буду рубиться в уфошку. кстати- если пропустить обучение, игра кажется заметно сложнее. играю в режиме "терминатор"- я полюбил этот режим и вообще, полюбил прохождение с одним сейвом, без возможности отката плохих последствий.
                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                Вообще, над начатым 3d-проектом собираюсь работу продолжить. Утрясу кое-какие дела в реале и когда будет поспокойнее, то- займусь. Просто ради того, чтобы давать нагрузку мозгам.


                                                                                                                                                                                                                                                                                                                                                                                                                                                Да. 3D - это вызов для меня.

                                                                                                                                                                                                                                                                                                                                                                                                                                                2017 год надеюсь сделать годом освоения 3D:
                                                                                                                                                                                                                                                                                                                                                                                                                                                Скрытый текст

                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата B.V.
                                                                                                                                                                                                                                                                                                                                                                                                                                                Проще всего -- на готовом движке. И не обязательно UE, это может быть и Unity, и Source, и даже Blitz3D -- сам с него когда-то начинал игростроение. Чем удобны движки уровня UE: редактор карт уже есть в наличии и можно сразу приступить к творческой части.

                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата ya2500
                                                                                                                                                                                                                                                                                                                                                                                                                                                Это- да. Нужен движок, НО не конструктор- чтобы было и просто и чтобы возможности не были искусственно ограничены.

                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата ya2500

                                                                                                                                                                                                                                                                                                                                                                                                                                                Планы:

                                                                                                                                                                                                                                                                                                                                                                                                                                                Скрытый текст
                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Сделать хоть что-нибудь, чтобы побегать.

                                                                                                                                                                                                                                                                                                                                                                                                                                                2. Сделать генерацию простейших уровней- несколько соединённых квадратных комнат, в одной- появляется ГГ, в одной из других- финальная точка, по достижению которой выдаётся какая-нить заставка. На заставке игрок нажимает клавишу и попадает в следующий сгенерированный уровень. // рандомная генерация уровней- ключевой момент, интересующий больше всего.

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                4. Попробовать "искажение пространства": допустим, идём всё время прямо на север, из комнаты А попадаем в комнату Б, а из комнаты Б попадаем в комнату А. То есть, идя из Б на север, проходим в портал, сделанный, как обычный проём между комнатами. Неотличимый от обычного перехода. -- возможно ли такое?

                                                                                                                                                                                                                                                                                                                                                                                                                                                5. Ну и дальше- вечная доработка генерации уровней, как в смысле генерации интересной архитектуры, так и в смысле включения всё новых и новых элементов(отключаемые поля; толкаемые кубы; компьютеры, которые можно взламывать; различные мини-игры).
                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата B.V.
                                                                                                                                                                                                                                                                                                                                                                                                                                                Возможно. А не хочешь развить идею с порталами и сделать как в Prey? ИМХО, это бы заинтересовало потенциальную аудиторию больше, чем еще одна пострелушка.
                                                                                                                                                                                                                                                                                                                                                                                                                                                ...
                                                                                                                                                                                                                                                                                                                                                                                                                                                Оружие, модели людей и текстуры есть в свободном доступе.



                                                                                                                                                                                                                                                                                                                                                                                                                                                Хочется слепить какое-нить мультиплатформенное 3D и слепить это на каком-нить C++

                                                                                                                                                                                                                                                                                                                                                                                                                                                И использовать готовый хороший движок, который позволяет делать что-то легко и позволяет делать любые собственные извраты.
                                                                                                                                                                                                                                                                                                                                                                                                                                                Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Хочется слепить какое-нить мультиплатформенное 3D и слепить это на каком-нить C++

                                                                                                                                                                                                                                                                                                                                                                                                                                                  И в чём же проблемы? Начинай прям сейчас.
                                                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата Polinom2686 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                    И в чём же проблемы? Начинай прям сейчас.


                                                                                                                                                                                                                                                                                                                                                                                                                                                    Сделано:

                                                                                                                                                                                                                                                                                                                                                                                                                                                    Опубликовано заявление о намерениях(см мой пост выше), он же- запрос советов.

                                                                                                                                                                                                                                                                                                                                                                                                                                                    Надо:

                                                                                                                                                                                                                                                                                                                                                                                                                                                    На данный момент, надо выбрать движок.
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Какой графический 2d движок с++ выбрать для обучения? - там сам вопрос + 6 комментов. интересно. склоняются к SFML.

                                                                                                                                                                                                                                                                                                                                                                                                                                                      Я бы взял http://irrlicht.sourceforge.net/, другие не пробовал. Этот не фердиперцевый, но я просто лет 10 следил за его развитием. Он очень грамотно спроектирован и реализован, плюс ко всему поставляется с исходными кодами, лицензия GPL. С ним очень удобно работать, так же кросплатформенный ЕМНИП.
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Ну и поддерживает последние новинки 3D.
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Сообщение отредактировано: KILLER -
                                                                                                                                                                                                                                                                                                                                                                                                                                                        Что-то я ещё не отошёл от отмечаний.. и, да- перед НГ работал больше обычного; а после НГ работаю не меньше, чем обычно, поэтому хочется и отдохнуть и расслабиться.

                                                                                                                                                                                                                                                                                                                                                                                                                                                        ===

                                                                                                                                                                                                                                                                                                                                                                                                                                                        Выбрал два движка: irrlicht и SFML. Компилить планирую на gcc(g++) и на каком-нить бесплатном vc++. То есть, одновременно будет делаться 2х2=4 аналогичных проекта.

                                                                                                                                                                                                                                                                                                                                                                                                                                                        На данный момент завис с выбором версии gcc, от чего зависит, какая версия SFML с ним совместится. Врубившись в то, что с gcc не всё так просто, перечитал уйму интересной литературы.

                                                                                                                                                                                                                                                                                                                                                                                                                                                        ===

                                                                                                                                                                                                                                                                                                                                                                                                                                                        Вдохновения на 3d, тяги к 3d сейчас нет. Ну, вот так вот оно у меня: то к одному тянет, то к другому, а чтобы сделать хоть что-то, требуется время и настойчивость. Что ж, буду учиться делать дело.
                                                                                                                                                                                                                                                                                                                                                                                                                                                        Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                          То есть, одновременно будет делаться 2х2=4 аналогичных проекта.

                                                                                                                                                                                                                                                                                                                                                                                                                                                          И зачем столько надо?

                                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                          На данный момент завис с выбором версии gcc

                                                                                                                                                                                                                                                                                                                                                                                                                                                          Бери самую последнюю. Или ставь MSYS2 или TDM-GCC.
                                                                                                                                                                                                                                                                                                                                                                                                                                                            Так что там с покером?
                                                                                                                                                                                                                                                                                                                                                                                                                                                            Над нами - правила форума, внутри нас - нравственный закон!
                                                                                                                                                                                                                                                                                                                                                                                                                                                            (Девиз начинающего модератора.)
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата Polinom2686 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Или ставь MSYS2 или TDM-GCC.

                                                                                                                                                                                                                                                                                                                                                                                                                                                              Ставь MSYS2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Нашёл интересный сайт https://wikium.ru/

                                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Тренируйте мозг с удовольствием
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Развивайте память, внимание и мышление с помощью онлайн-тренажеров


                                                                                                                                                                                                                                                                                                                                                                                                                                                                - действительно, приятная вещь И возможно, может что-то дать для памяти и внимания.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                Я пользуюсь бесплатным "базовым" аккаунтом. На премиум (более 2тыр в год) переходить пока не хочу, потому что сомневаюсь на счёт сего сайта. Очень похоже на разводилово на бабки, НО хорошее, культурное разводилово, замаскированное под эффективные курсы. Были б лишние деньги- заплатил бы. И мож и заплачу. Потому что интересно и разнообразно.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                Впрочем, надо присмотреться на их страничке чуть ниже:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                                О нас пишут и говорят
                                                                                                                                                                                                                                                                                                                                                                                                                                                                ...


                                                                                                                                                                                                                                                                                                                                                                                                                                                                - мож зря я так подозрителен.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                И, да- я ещё в ЭТУ тему вернусь. Программирование, как хобби, может дать опыт решения относительно больших задач. То есть, для такой тренировки мозга, которую не дадут другие интеллект-тесты и тренажёры.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Сообщение отредактировано: ya2500 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Стырено с гцупа:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Про 3D - тут многие берут Unity3D и пишут игру используя этот движок. Но там С# а не С++. Для любителей С++ есть Unreal Engine 4, штука мощная ноне самая простая в освоении. Но пилить 3D игру в одиночку - ИМО, очень не простая задача. Даже с использованием готовых текстур, моделей и прочих звуков.


                                                                                                                                                                                                                                                                                                                                                                                                                                                                  эххх....
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    В Unity ещё и Java Script. Правда более продвинутый диалект, чем в браузерах. Он типизирован и компилируется в коды процессора.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    И совершенно бестолковый API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Сообщение отредактировано: amk -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата ya2500 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      эххх....

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Пили 2D игру :)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        В Unity ещё и Java Script. Правда более продвинутый диалект, чем в браузерах. Он типизирован и компилируется в коды процессора.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        И совершенно бестолковый API.


                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Я бы предпочёл NeoAxis, но по нему гораздо меньше уроков, чем по Unity и совсем нет русскоязычного сообщества. Да и, наверное, вообще никакого.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Набирает популярность некий Godot Engine

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          (Lars Kokemohr) Поделился аж 5 проектами, сделанными и выпущенными с помощью Годота 2.1.4 с его участием, за прошлый семестр...

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Фейсбук: https://www.facebook.com/photo.php?fbid=102...3&theater&ifg=1
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Игры, достойные изучения

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Хорошие идеи, неожиданные решения, смелые сочетания — все это часто встречается именно в небольших инди-проектах. Единственная проблема в том, что находить эти проекты не всегда легко. Поэтому и я, и мои коллеги активно делимся друг с другом ссылками на такие игры.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    «В нашей индустрии постоянно безумные времена»: главное из интервью с Тимом Шейфером

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    О Psychonauts 2, будущих проектах и «российских ботах» в твиттере.