![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2011
Сообщений: 10
|
Написал небольшую игру, 170 строк кода, все в одном классе. Можете посоветовать, стоит ли разделить ее на отдельные классы?
package { import flash.display.Loader; import flash.display.MorphShape; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.system.ApplicationDomain; import flash.utils.*; /** * ... * @author me */ public class Main extends Sprite { private var loader: Loader = new Loader(); private var bars: Array = new Array(); //все барельефы private var puttedBars: Array = new Array(); //барельефы, поставленые на свободные места private var correctBars: Array = new Array(); //правильная комбинация private var place: MovieClip; private var activeBar: MovieClip = new MovieClip(); //барельеф под курсором private var emptyBar: MovieClip; private var winClip: MovieClip; private var posY: Number = 120; //координата У барельефов private var posX: Number = 0; //координата Х барельефов private const newX: Number = 140; //координаты второго ряда барельефов private const newY: Number = 220; private const deltaX: Number = 70; private const barsCount: int = 7; //число барельефов, которые надо расставить private const allBars: int = 14; private var timer: Timer = new Timer(50); private var i:int; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); loadAssets(); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove); stage.addEventListener(MouseEvent.CLICK, stageMouseClick); timer.addEventListener(TimerEvent.TIMER, animate); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point } private function loadAssets():void { var path: URLRequest = new URLRequest("assets.swf"); var context: LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad); loader.load(path, context); } private function onLoad(e: Event):void { loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoad); var tmp: Class = getDefinitionByName("places") as Class; place = new tmp(); addChild(place); for (i = 0; i < barsCount; ++i) { tmp = getDefinitionByName("emptyBar") as Class; emptyBar = new tmp(); posX += deltaX; emptyBar.x = posX; emptyBar.addEventListener(MouseEvent.CLICK, emptyClick); addChild(emptyBar); } posX = 0; for ( i = 1; i <= allBars; ++i) { var bar: Class = getDefinitionByName("bar" + i) as Class; var tempBar: MovieClip = new bar(); bars.push(tempBar); tempBar.y = posY; tempBar.x = posX; posX += deltaX; if (i >= 9) posY = newY; if (i == 9) posX = newX; addChild(tempBar); tempBar.addEventListener(MouseEvent.CLICK, mouseClick); if (i <= barsCount) correctBars.push(tempBar); } tmp = getDefinitionByName("win") as Class; winClip = new tmp(); addChild(winClip); winClip.visible = false; } private function mouseMove(e: Event):void { if (activeBar) { activeBar.x = mouseX; activeBar.y = mouseY; } } private function mouseClick(e: Event):void //клик по барельефу { e.target is MovieClip { activeBar = e.target as MovieClip; } e.stopImmediatePropagation(); } private function stageMouseClick(e: Event):void { activeBar = null; } private function emptyClick(e: Event):void //клик по месту, куда устанавливать барельеф { if (activeBar) { activeBar.x = e.target.x; activeBar.y = e.target.y; puttedBars.push(activeBar); } if (puttedBars.length == barsCount) checkForWin(); //прверка на правильность комбинации установленых барельефов } private function equals(arr1: Array, arr2: Array):Boolean { arr1.sort(); arr2.sort(); for (i = 0; i < arr1.length; ++i) { if (arr1[i] != arr2[i]) return false; } return true; } private function checkForWin():void { if (equals(puttedBars, correctBars)) { timer.start(); winClip.visible = true; winClip.x = posX; winClip.y = 2 * posY; removeEventListener(MouseEvent.CLICK, emptyClick); for (i = 0; i < bars.length; ++i) { bars[i].mouseEnabled = false; } } } private function animate(e: Event):void { winClip.rotation += 10; } } } |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Ну самое первое - это отделить логику от отрисовки и сервисных функций (вроде загрузки асстетов). MVC в помощь.
__________________
Отряд Котовскага |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
А почему бы и не мвц? С обычным разделением логики и визуализации.
И композиция - это не противопоставление мвц, а всего лишь один из кирпичиков.
__________________
Отряд Котовскага |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Ну все равно при разделении мы выделяем модель, выделяем вид, выделяем контроллер. Пусть они будут маленькими, но это от этого суть не меняется. Я наверное просто уже испорчен и по-другому не умею)
__________________
Отряд Котовскага |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|