Criss-Cross или научите быть не быдло кодером
Re: Criss-Cross или научите быть не быдло кодером
Lampy, stopPropagation предотвращает распространение события, не знаю зачем gpv123 его в своем коде прикрутил, лень копаться, но видно зачем-то надо.
Могу только сказать что в 95% можно обойтись без этого метода.
А по поводу второго, он как раз добавил ячейке переменную content которая принимает (0(пусто), 1(крестик) или 2(нолик)), как я вам и советовал.
И проверяет Если они равны в каком-то из рядов, столбцов или диагоналей, то значит победа.
Могу только сказать что в 95% можно обойтись без этого метода.
А по поводу второго, он как раз добавил ячейке переменную content которая принимает (0(пусто), 1(крестик) или 2(нолик)), как я вам и советовал.
И проверяет Если они равны в каком-то из рядов, столбцов или диагоналей, то значит победа.
Re: Criss-Cross или научите быть не быдло кодером
В самом-самом низу моего кода есть строчкаLampy писал(а):что это такое) не понятно)Код: Выделить всё
e.stopPropagation();
Код: Выделить всё
stage.addEventListener(MouseEvent.CLICK, Main(parent).createFields);
Re: Criss-Cross или научите быть не быдло кодером
gpv123, лентяй Отправь событие родителю, о том что игра закончена
Re: Criss-Cross или научите быть не быдло кодером
Alazaur, все равно после этого нужно будет предотвратить распространение события клика, чтобы зарегистрировать слушатель клика для stage. Так зачем усложнять код?
Re: Criss-Cross или научите быть не быдло кодером
gpv123, ты его уже усложнил, когда всю логику в детей упаковал Ну это, как Саныч говорит, дело предпочтений
Re: Criss-Cross или научите быть не быдло кодером
Alazaur, все-таки заставил меня переписать код. Теперь на 60 строчек меньше
Код: Выделить всё
package{ import flash.display.*; import flash.events.*; import flash.text.*; public class Main extends Sprite { private var f:Vector.<Field> = new Vector.<Field>; private var t:TextField = new TextField(); public function Main() { stage.addEventListener(MouseEvent.CLICK, checkGameOver); createFields(); t.autoSize = TextFieldAutoSize.LEFT; t.y = Field.WIDTH * 4; stage.addChild(t); } public function createFields():void { t.visible = false; stage.mouseChildren = true; while (numChildren) removeChildAt(0); for (var i:int = 0; i < 9; i++) { f[i] = new Field(i % 3, Math.floor(i / 3), i); addChild(f[i]); } Field.putCross = true; } private function checkGameOver(e:MouseEvent):void { if (t.visible) return createFields(); var s:String, b:Boolean; if (f[0].content && f[0].content == f[1].content && f[1].content == f[2].content || f[3].content && f[3].content == f[4].content && f[4].content == f[5].content || f[6].content && f[6].content == f[7].content && f[7].content == f[8].content || f[0].content && f[0].content == f[3].content && f[3].content == f[6].content || f[1].content && f[1].content == f[4].content && f[4].content == f[7].content || f[2].content && f[2].content == f[5].content && f[5].content == f[8].content || f[0].content && f[0].content == f[4].content && f[4].content == f[8].content || f[2].content && f[2].content == f[4].content && f[4].content == f[6].content) { s = (Field(e.target).content == 1 ? 'Крестики' : 'Нолики') + ' выиграли'; b = true; } else if (f.every(function(f:Field, i:int, a:*):Boolean{return Boolean(f.content);})) { s = 'Ничья'; b = true; } if (b) { t.text = s + '\nКликните, чтобы сыграть заново'; t.visible = true; stage.mouseChildren = false; } } }} import flash.display.*;import flash.events.*; class Field extends Sprite{ public static const WIDTH:uint = 30; public static var putCross:Boolean = true; // нужно ли рисовать крестик public var id:int; public var content:int = 0; // 0 - пусто, 1 - крестик, 2 - нолик public function Field(x:int, y:int, id:int) { this.x = x * WIDTH; this.y = y * WIDTH; this.id = id; // рисуем квадрат высотой и шириной WIDTH graphics.beginFill(0xffffff); graphics.lineStyle(1); graphics.drawRect(0, 0, WIDTH, WIDTH); // слушаем клик addEventListener(MouseEvent.CLICK, onClick); } private function onClick(e:MouseEvent):void { removeEventListener(MouseEvent.CLICK, onClick); if (putCross) { content = 1; // рисуем крестик graphics.moveTo(0, 0); graphics.lineTo(WIDTH, WIDTH); graphics.moveTo(WIDTH, 0); graphics.lineTo(0, WIDTH); } else { content = 2; // рисуем нолик graphics.drawCircle(WIDTH / 2, WIDTH / 2, WIDTH / 2); } putCross = !putCross; }}
Последний раз редактировалось gpv123 07 дек 2012, 19:31, всего редактировалось 2 раза.
-
- Сообщения: 429
- Зарегистрирован: 22 июн 2012, 17:50
Re: Criss-Cross или научите быть не быдло кодером
gpv123
Хаха. Звучит, как реклама презервативов: "теперь на 60нанометров тоньше!". А так - да, лучше ведь стало?
Хаха. Звучит, как реклама презервативов: "теперь на 60нанометров тоньше!". А так - да, лучше ведь стало?
Re: Criss-Cross или научите быть не быдло кодером
Casperovskii, да нет, тупанул я немножко. Че-то мне вдруг показалось, что в начальном варианте было больше 180 строк
UPD: получается, количество строчек даже увеличилось, а я понтоваться стал
UPD: получается, количество строчек даже увеличилось, а я понтоваться стал
Re: Criss-Cross или научите быть не быдло кодером
Ну не знаю что там с количеством строк. Но логически правильнее стало. Дети - детьми, родители - родителями
Re: Criss-Cross или научите быть не быдло кодером
Главное, что исчез ужасный e.stopPropagation()