void m_gc_SwapEnd(Tile a, Tile b)
 {
     m_redrawBackBuffer = true;
     Invalidate();
 }
        void m_gc_SwapStart(Tile a, Tile b)
        {
            Point t1 = new Point(a.tileLoc.X * m_tiles[0].Width, a.tileLoc.Y * m_tiles[0].Height);
            Point t2 = new Point(b.tileLoc.X * m_tiles[0].Width, b.tileLoc.Y * m_tiles[0].Height);

            m_animHandler.Add(new Animation(m_tiles[a.tileInd], t2, t1, m_gc.SwapSpeed));
            m_animHandler.Add(new Animation(m_tiles[b.tileInd], t1, t2, m_gc.SwapSpeed));

            m_redrawBackBuffer = true;
            Invalidate();
        }
        public bool Swap(Point a, Point b)
        {
            if ((m_swapLock || (Math.Abs(a.X - b.X) + Math.Abs(a.Y - b.Y)) != 1))
            {
                return false;
            }
            else
            {
                SwapTiles(b,a);
                if (IsMatch(b) || IsMatch(a))
                {
                    Tile[] p = new Tile[2];
                    p[0].tileInd = m_grid[a.X,a.Y];
                    p[0].tileLoc = a;
                    p[1].tileInd = m_grid[b.X,b.Y];
                    p[1].tileLoc = b;

                    m_swapLock = true;
                    m_grid[a.X, a.Y] = -1;
                    m_grid[b.X, b.Y] = -1;
                    if (SwapStart != null)
                        SwapStart(p[0], p[1]);
                    Thread th = new Thread(new ParameterizedThreadStart(SwapTimerCallback));
                    th.Start(p);
                    /*

                    if (IsMatch(b))
                        ClearMatch(b, false);
                    if (IsMatch(a))
                        ClearMatch(a, false);
                    for (int i = 0; i < m_cols; i++)
                        DropTiles(i);
                    do
                        FillBlanks();
                    while (CheckandClear());
                     */
                }
                else
                {
                    SwapTiles(a, b);
                    return false;
                }
            }
            return true;
        }