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

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.

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

Сообщение Alazaur » 07 дек 2012, 15:29

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

За это сообщение автора Alazaur поблагодарил:
Lampy
Alazaur
Разработчик
Разработчик
 
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25
Благодарил (а): 24 раз.
Поблагодарили: 121 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение gpv123 » 07 дек 2012, 17:41

Lampy писал(а):что это такое) не понятно)

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

 
Сообщения: 346
Зарегистрирован: 29 янв 2012, 20:57
Благодарил (а): 17 раз.
Поблагодарили: 73 раз.

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

Сообщение Alazaur » 07 дек 2012, 17:54

gpv123, лентяй :D Отправь событие родителю, о том что игра закончена
Alazaur
Разработчик
Разработчик
 
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25
Благодарил (а): 24 раз.
Поблагодарили: 121 раз.

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

Сообщение gpv123 » 07 дек 2012, 18:01

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

 
Сообщения: 346
Зарегистрирован: 29 янв 2012, 20:57
Благодарил (а): 17 раз.
Поблагодарили: 73 раз.

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

Сообщение Alazaur » 07 дек 2012, 18:22

gpv123, ты его уже усложнил, когда всю логику в детей упаковал :D Ну это, как Саныч говорит, дело предпочтений :D
Alazaur
Разработчик
Разработчик
 
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25
Благодарил (а): 24 раз.
Поблагодарили: 121 раз.

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

Сообщение gpv123 » 07 дек 2012, 19:16

Alazaur, все-таки заставил меня переписать код. Теперь на 60 строчек меньше :D
  1. package
  2. {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.text.*;
  6.    
  7.     public class Main extends Sprite
  8.     {
  9.         private var f:Vector.<Field> = new Vector.<Field>;
  10.        
  11.         private var t:TextField = new TextField();
  12.        
  13.         public function Main()
  14.         {
  15.             stage.addEventListener(MouseEvent.CLICK, checkGameOver);
  16.            
  17.             createFields();
  18.            
  19.             t.autoSize = TextFieldAutoSize.LEFT;
  20.             t.y = Field.WIDTH * 4;
  21.             stage.addChild(t);
  22.         }
  23.        
  24.         public function createFields():void
  25.         {
  26.             t.visible = false;
  27.             stage.mouseChildren = true;
  28.            
  29.             while (numChildren) removeChildAt(0);
  30.            
  31.             for (var i:int = 0; i < 9; i++)
  32.             {
  33.                 f[i] = new Field(i % 3, Math.floor(i / 3), i);
  34.                 addChild(f[i]);
  35.             }
  36.            
  37.             Field.putCross = true;
  38.         }
  39.        
  40.         private function checkGameOver(e:MouseEvent):void
  41.         {
  42.             if (t.visible) return createFields();
  43.            
  44.             var s:String, b:Boolean;
  45.            
  46.             if (f[0].content && f[0].content == f[1].content && f[1].content == f[2].content ||
  47.                 f[3].content && f[3].content == f[4].content && f[4].content == f[5].content ||
  48.                 f[6].content && f[6].content == f[7].content && f[7].content == f[8].content ||
  49.                 f[0].content && f[0].content == f[3].content && f[3].content == f[6].content ||
  50.                 f[1].content && f[1].content == f[4].content && f[4].content == f[7].content ||
  51.                 f[2].content && f[2].content == f[5].content && f[5].content == f[8].content ||
  52.                 f[0].content && f[0].content == f[4].content && f[4].content == f[8].content ||
  53.                 f[2].content && f[2].content == f[4].content && f[4].content == f[6].content)
  54.             {
  55.                 s = (Field(e.target).content == 1 ? 'Крестики' : 'Нолики') + ' выиграли';
  56.                 b = true;
  57.             }
  58.             else if (f.every(function(f:Field, i:int, a:*):Boolean{return Boolean(f.content);}))
  59.             {
  60.                 s = 'Ничья';
  61.                 b = true;
  62.             }
  63.            
  64.             if (b)
  65.             {
  66.                 t.text = s + '\nКликните, чтобы сыграть заново';
  67.                 t.visible = true;
  68.                 stage.mouseChildren = false;
  69.             }
  70.         }
  71.     }
  72. }
  73.  
  74. import flash.display.*;
  75. import flash.events.*;
  76.    
  77. class Field extends Sprite
  78. {
  79.     public static const WIDTH:uint = 30;
  80.    
  81.     public static var putCross:Boolean = true; // нужно ли рисовать крестик
  82.    
  83.     public var id:int;
  84.     public var content:int = 0; // 0 - пусто, 1 - крестик, 2 - нолик
  85.    
  86.     public function Field(x:int, y:int, id:int)
  87.     {
  88.         this.x = x * WIDTH;
  89.         this.y = y * WIDTH;
  90.         this.id = id;
  91.        
  92.         // рисуем квадрат высотой и шириной WIDTH
  93.         graphics.beginFill(0xffffff);
  94.         graphics.lineStyle(1);
  95.         graphics.drawRect(0, 0, WIDTH, WIDTH);
  96.        
  97.         // слушаем клик
  98.         addEventListener(MouseEvent.CLICK, onClick);
  99.     }
  100.    
  101.     private function onClick(e:MouseEvent):void
  102.     {
  103.         removeEventListener(MouseEvent.CLICK, onClick);
  104.        
  105.         if (putCross)
  106.         {
  107.             content = 1;
  108.            
  109.             // рисуем крестик
  110.             graphics.moveTo(0, 0);
  111.             graphics.lineTo(WIDTH, WIDTH);
  112.             graphics.moveTo(WIDTH, 0);
  113.             graphics.lineTo(0, WIDTH);
  114.         }
  115.         else
  116.         {
  117.             content = 2;
  118.            
  119.             // рисуем нолик
  120.             graphics.drawCircle(WIDTH / 2, WIDTH / 2, WIDTH / 2);
  121.         }
  122.        
  123.         putCross = !putCross;
  124.     }
  125. }
Последний раз редактировалось gpv123 07 дек 2012, 19:31, всего редактировалось 2 раз(а).
gpv123

 
Сообщения: 346
Зарегистрирован: 29 янв 2012, 20:57
Благодарил (а): 17 раз.
Поблагодарили: 73 раз.

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

Сообщение Casperovskii » 07 дек 2012, 19:21

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

 
Сообщения: 429
Зарегистрирован: 22 июн 2012, 17:50
Благодарил (а): 11 раз.
Поблагодарили: 43 раз.

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

Сообщение gpv123 » 07 дек 2012, 19:27

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

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

 
Сообщения: 346
Зарегистрирован: 29 янв 2012, 20:57
Благодарил (а): 17 раз.
Поблагодарили: 73 раз.

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

Сообщение Alazaur » 07 дек 2012, 19:37

Ну не знаю что там с количеством строк. Но логически правильнее стало. Дети - детьми, родители - родителями :D
Alazaur
Разработчик
Разработчик
 
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25
Благодарил (а): 24 раз.
Поблагодарили: 121 раз.

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

Сообщение gpv123 » 07 дек 2012, 19:50

Главное, что исчез ужасный e.stopPropagation() :lol:
gpv123

 
Сообщения: 346
Зарегистрирован: 29 янв 2012, 20:57
Благодарил (а): 17 раз.
Поблагодарили: 73 раз.

Пред.След.

Вернуться в Программирование на Flash



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron