Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Как грамотно составить Roadmap

#python #panda3d #opensource #cpp


Есть у меня идея, на мой взгляд, хорошая. Но, как справедливо заметил товарищ Сиверс,
идеи ничего не стоят без реализации. Идея довольно сложная с точки зрения программирования,
и я пока ещё ничего сложнее 500 строк кода не писал, но всё случается в первый раз. 
На данном этапе я занимаюсь (громко сказано) разработкой архитектуры (ещё громче
сказано) программы: разбиваю основную задачу на подзадачи и составляю график выполнения
работ. Вот тут-то и начинаются проблемы. Если с разбиением я худо-бедно справляюсь
(на бумаге составил граф, что с чем связано), то вот с графиком у меня проблемы: хочется
взяться за всё и сразу, а так нельзя. Нужен совет более опытного мастера.
Ну и вообще любая помощь приветствуется.
Ещё два месяца спустя
Желание реализовать эту задумку не утихает, скорее даже наоборот: зреет и крепнет.
За это время со мной много чего случилось и не всегда было время на то, чтобы исследовать
панду и заниматься проектом. Но я всё-таки успел пройти туториал на MyGameFast (к сожалению,
незавершённое автором), наговнокодить змейку, которая вполне себе играбельная. Правда,
в ней нет ни меню, ни возможности изменить скорость, ни таблицы результатов, в неё
можно просто играть. Сейчас думаю над тем, стоит ли приводить её в более опрятный (с
точки зрения кода и особенностей панды) вид или бросить её как есть и начать вплотную
работать уже с Mad Lab.
Худо-бедно список фич, которые должны быть в версии 0.1 я набросал, но прежде всего
нужно грамотно определить общую архитектуру программы с учётом особенностей панды,
чтобы потом всё заново переписывать не пришлось.
UPD OCT 
Отчёт за сентябрь
Отчёт за октябрь
Долго думал выкладывать тут эти ссылки или нет. Если прочитаете, то поймёте почему.
Даже не знаю, буду ли выкладывать тут отчёт за ноябрь. В этом вопросе, пожалуй, лучше
уже ничего не писать, если вдруг захотите со мной связаться, то пишите в джаббер: montreal@jabber.ru
или на почту, указанную в профиле. Лучше будет сразу указать причину, по которой пишете.
UPD NOV
Отчёт за ноябрь. Точнее, ноябрьский отчёт за октябрь. Написан, разумеется, в большей
степени для себя и там вы найдёте все мои мысли о прошедшем месяце.
PS Не знаю, насколько всё это соответствует правилам хэшкода. Если мой вопрос сильно
им противоречит, то я его переработаю.
PPS Если эта идея всё ещё кому-то интересна, то я могу завести бложик на blogspot'e,
где можно писать "новости" 1-2 раза в месяц.    


Ответы

Ответ 1



Вообще, после составления 5-6 графов, которые изображали бы архитектуру программы, у меня получилась вот такая штука. И, честно говоря, она мне не очень нравится. Вот почему: все остальные модули зависят от ядра и если вдруг придётся его изменить, то изменения могут затронуть всю программу, а это явный признак плохой архитектуры. И потом: данный рисунок не отражает степень связанности разных модулей с ядром. Пожалуй, наиболее сильно с ядром связаны модули Input, GUI, Save/Load и AI. Чуть слабее связан 3D Render, так как он просто отрисовывает картинку, ну а генератор карт вообще почти никак с ядром не связан, от него требуется только генерировать карту по сигналу. Возвращаясь к вопросу о том, как грамотно составить Roadmap, теперь я понимаю, что нужно начать с ядра, как бы это не было банально. После чего перейти к модулям ввода и рендера. Дальше GUI, Save/Load, генератор карт и AI. Пока как-то так. Два месяца спустя За прошедшие два месяца в моей жизни поменялось довольно много: я переехал в другой город и нашёл работу. Мысли о Mad Lab не покидали мою голову и тут, ВНЕЗАПНО, случился невероятный прорыв: в сети я наткнулся на замечательный игровой движок, именуемый Panda3D. Написан он на С++, но все функции можно вызывать из питона. Открыт для любого использования и включает в себя очень обширный набор инструментов, таких как работа с GUI, физикой и звуком! Знакомиться с движком я только начал, но уже написал по инструкции своеобразный helloworld, в котором по небольшой сценке туда-сюда бродит панда, а камера вращается вокруг центра сцены. Всё это счастье укладывается в 45 строк кода на питоне, что не может не радовать. В голове уже начинает складываться пресловутый roadmap: "так сейчас нам нужно реализовать перемещение человечка по карте при помощи point-and-click, затем добавить врагов,NPC, шмот и всё заверте..." А вот, собственно, и код: from math import pi, sin, cos from panda3d.core import Point3 from direct.task import Task from direct.actor.Actor import Actor from direct.showbase.ShowBase import ShowBase from direct.interval.IntervalGlobal import Sequence class MyApp( ShowBase ): def __init__( self ): ShowBase.__init__( self ) self.disableMouse( ) self.environ = self.loader.loadModel( "models/environment" ) self.environ.reparentTo( self.render ) self.environ.setScale( 0.25, 0.25, 0.25 ) self.environ.setPos( -8, 42, 0 ) self.taskMgr.add( self.spinCameraTask, "SpinCameraTask" ) self.pandaActor = Actor( "models/panda-model", { "walk": "models/panda-walk4" } ) self.pandaActor.setScale( 0.005, 0.005, 0.005 ) self.pandaActor.reparentTo( self.render ) self.pandaActor.loop( "walk" ) pandaPosInterval1 = self.pandaActor.posInterval( 13, Point3( 0, -10, 0 ), startPos=Point3( 0, 10, 0 ) ) pandaPosInterval2 = self.pandaActor.posInterval( 13, Point3( 0, 10, 0 ), startPos=Point3( 0, -10, 0 ) ) pandaHprInterval1 = self.pandaActor.hprInterval( 3, Point3( 180, 0, 0 ), startHpr=Point3( 0, 0, 0) ) pandaHprInterval2 = self.pandaActor.hprInterval( 3, Point3( 0, 0, 0 ), startHpr=Point3( 180, 0, 0 ) ) self.pandaPace = Sequence( pandaPosInterval1, pandaHprInterval1, pandaPosInterval2, pandaHprInterval2, name="pandaPace") self.pandaPace.loop( ) def spinCameraTask( self, task ): angleDegrees = task.time * 6.0 angleRadians = angleDegrees * ( pi / 180.0 ) self.camera.setPos( 20 * sin( angleRadians ), -20.0 * cos( angleRadians ), 3 ) self.camera.setHpr( angleDegrees, 0, 0 ) return Task.cont app = MyApp( ) app.run( )

Ответ 2



Ну ёлки, а сама идея где, ведь если как вы правильно заметили: "идея ничего не стоит без реализации", то страха опубликовать быть не должно. А в остальном: Плюсы - плохо, потому что тяжело. Нужно быстро прототип написать (рекомендую Grails, ну для python'а есть что-то похожее Django), если идея будет стоящая её потом сто раз перепишут. Ваша цель прототип (должен основную фишку показывать), такой чтобы было понятно для чего это нужно и кому В первую очередь те этапы которые позволят проекту запускаться, работать и предоставлять ту функциональность ради которой писали, а потом украшать и удобство. Причём удобным в первую очередь должен быть процесс позволяющий отразить замысел.

Комментариев нет:

Отправить комментарий