Страница 6 из 7

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 15:29
Alazaur
Lampy, stopPropagation предотвращает распространение события, не знаю зачем gpv123 его в своем коде прикрутил, лень копаться, но видно зачем-то надо. :D
Могу только сказать что в 95% можно обойтись без этого метода.
А по поводу второго, он как раз добавил ячейке переменную content которая принимает (0(пусто), 1(крестик) или 2(нолик)), как я вам и советовал.
И проверяет Если они равны в каком-то из рядов, столбцов или диагоналей, то значит победа.

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 17:41
gpv123
Lampy писал(а):что это такое) не понятно)

Код: Выделить всё

e.stopPropagation();
В самом-самом низу моего кода есть строчка

Код: Выделить всё

stage.addEventListener(MouseEvent.CLICK, Main(parent).createFields);
..., и если я не предотвращу распространение события, то может запуститься функция Main(parent).createFields сразу же.

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 17:54
Alazaur
gpv123, лентяй :D Отправь событие родителю, о том что игра закончена

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 18:01
gpv123
Alazaur, все равно после этого нужно будет предотвратить распространение события клика, чтобы зарегистрировать слушатель клика для stage. Так зачем усложнять код? :D

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 18:22
Alazaur
gpv123, ты его уже усложнил, когда всю логику в детей упаковал :D Ну это, как Саныч говорит, дело предпочтений :D

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 19:16
gpv123
Alazaur, все-таки заставил меня переписать код. Теперь на 60 строчек меньше :D

Код: Выделить всё

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;    }}

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 19:21
Casperovskii
gpv123
Хаха. Звучит, как реклама презервативов: "теперь на 60нанометров тоньше!". А так - да, лучше ведь стало?

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 19:27
gpv123
Casperovskii, да нет, тупанул я немножко. Че-то мне вдруг показалось, что в начальном варианте было больше 180 строк :oops:

UPD: получается, количество строчек даже увеличилось, а я понтоваться стал :lol: :lol: :lol:

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 19:37
Alazaur
Ну не знаю что там с количеством строк. Но логически правильнее стало. Дети - детьми, родители - родителями :D

Re: Criss-Cross или научите быть не быдло кодером

Добавлено: 07 дек 2012, 19:50
gpv123
Главное, что исчез ужасный e.stopPropagation() :lol: