Это реализация в компонентном стиле(поверх
ООП) третьего примера из заметки Компонентная философия на ЯП Scala.
Код сборки:
Также есть вариант для сборки апплета, но я не стал его рисовать, так как он отличается только одним компонентом(BuildingApplet(также содержащий код конструирования апплета) вместо Frame). Этот вариант собирается файлом "CompilApplet.bat".
Апплет:
Разработка заняла ~200 часов, половина этого времени ушло на movement(который так и не заработал должным образом:( ), четверть ушла на компонентный рантайм, и последняя
четверть на собственно игру.
В рантайме я реализовал некоторые из
возможностей описанных в заметке, в частности сборку из компонентов и
интерфейсы, а также(в некоторой степени) управление
жизненным циклом компонентов. Вышло это всё довольно криво и многобуквенное(ибо
натянуто на ООП и ФП), но тем не менее это работает :)
Код собирающий программу:
/*Build program*/
//View
name += ("frame" -> new Frame(name))
name += ("viewDraw" -> new ViewDraw(name, "IWidgets", name("frame")))
name += ("statusBar" -> new StatusBar(name, "IWidgets", name("frame")))
//Matrix
name += ("space" -> new Space(name))
name += ("camera" -> new Camera(name))
connect("ILayout", name("space"), name("camera"))
connect("IViewDraw", name("viewDraw"), name("camera"))
//Game
name += ("arena" -> new Arena(name))
connect("IViewSettings", name("viewDraw"), name("arena"))
name += ("joystick" -> new Joystick(name))
connect("IFrame",name("frame"),name("joystick"))
connect("IControl",name("space"),name("joystick"))
connect("IControl",name("camera"),name("joystick"))
name += ("targetGen" -> new TargetGen(name))
connect("ITargetGen",name("targetGen"),name("joystick"))
connect("ITracking",name("targetGen"),name("joystick"))
connect("ITracking",name("targetGen"),name("arena"))
name += ("observer" -> new Observer(name))
connect("IAvatarWatch",name("observer"),name("joystick"))
connect("ITargetWatch",name("observer"),name("targetGen"))
connect("IStatusBar",name("observer"),name("statusBar"))
Так же при разработке я использовал три
тестовых варианта сборки(вы также может их собрать раскомментировав
соответствующие строки в файле "Building.scala").
Код сборки:
/*Build test matrix physics*/
//Manager
name += ("testManager" -> new TestManager(name))
//View
name += ("frame" -> new Frame(name))
connect("IFrame",name("frame"),name("testManager"))
name += ("testViewDraw" -> new TestViewDraw(name, "IWidgets", name("frame")))
//Matrix
name += ("space" -> new Space(name))
connect("IControl",name("space"),name("testManager"))
name += ("testCamera" -> new TestCamera(name))
connect("IControl",name("testCamera"),name("testManager"))
connect("ITestViewDraw", name("testViewDraw"), name("testCamera"))
connect("ILayout", name("space"), name("testCamera"))
//Objects
name += ("obj1" -> new TestObj1(name))
name += ("obj2" -> new TestObj2(name))
Второй для отладки визуализации:
Код сборки:
/*Build test matrix texture*/
//Manager
name += ("testManager" -> new TestManager(name))
//View
name += ("frame" -> new Frame(name))
connect("IFrame",name("frame"),name("testManager"))
name += ("viewDraw" -> new ViewDraw(name, "IWidgets", name("frame")))
connect("IViewSettings",name("viewDraw"),name("testManager"))
//Matrix
name += ("space" -> new Space(name))
connect("IControl",name("space"),name("testManager"))
name += ("camera" -> new Camera(name))
connect("IControl",name("camera"),name("testManager"))
connect("IViewDraw", name("viewDraw"), name("camera"))
connect("ILayout", name("space"), name("camera"))
//Objects
name += ("obj1" -> new TestObj1(name))
name += ("obj2" -> new TestObj2(name))
И третий для отладки геймплея(без
визуализации):
/*Build test game*/
//View
name += ("frame" -> new Frame(name))
name += ("testViewDraw" -> new TestViewDraw(name, "IWidgets", name("frame")))
//Matrix
name += ("space" -> new Space(name))
name += ("testCamera" -> new TestCamera(name))
connect("ILayout", name("space"), name("testCamera"))
connect("ITestViewDraw", name("testViewDraw"), name("testCamera"))
//Game
name += ("arena" -> new Arena(name))
connect("IViewSettings", name("testViewDraw"), name("arena"))
name += ("joystick" -> new Joystick(name))
connect("IFrame",name("frame"),name("joystick"))
connect("IControl",name("space"),name("joystick"))
connect("IControl",name("testCamera"),name("joystick"))
name += ("targetGen" -> new TargetGen(name))
connect("ITargetGen",name("targetGen"),name("joystick"))
connect("ITracking",name("targetGen"),name("joystick"))
connect("ITracking",name("targetGen"),name("arena")) Также есть вариант для сборки апплета, но я не стал его рисовать, так как он отличается только одним компонентом(BuildingApplet(также содержащий код конструирования апплета) вместо Frame). Этот вариант собирается файлом "CompilApplet.bat".
Апплет:
No comments:
Post a Comment