Beispiel #1
0
 //TODO:
 //アクティブのテトリスのクラスと
 //それ以外を別々にする
 //ActivePiece.Move
 //NotActivePieces.Move
 public void MovePiece(Direction direction)
 {
     //bottom
     //if(CanMovePiece(direction))
     ActivePiece.Move(direction, this);
     Update();
 }
Beispiel #2
0
    protected void enemyAttack()
    {
        List <Piece> pieces = new List <Piece>(board.Pieces);
        Batman       batman = board.getBatman();

        foreach (Piece p in pieces)
        {
            if (p != batman && p is ActivePiece)
            {
                ActivePiece e = (ActivePiece)p;
                if (e.State == ActivePiece.ActivePieceState.ALERT)
                {
                    if (batman != null && e.canMoveTo(board, batman.Pos))
                    {
                        board.movePieceTo(e, batman.Pos);
                        board.removePiece(batman);
                        if (onBatmanDead != null)
                        {
                            onBatmanDead();
                        }

                        Debug.Log("The Batman is Dead.");
                    }
                }
            }
        }
    }
Beispiel #3
0
    protected void testAlert()
    {
        Batman batman = board.getBatman();

        foreach (Piece p in board.Pieces)
        {
            if (p != batman && p is ActivePiece)
            {
                ActivePiece e = (ActivePiece)p;
                if (e.State == ActivePiece.ActivePieceState.IDLE)
                {
                    if (batman != null && e.canMoveTo(board, batman.Pos))                        //Its the Bat, get 'im!!
                    {
                        e.State     = ActivePiece.ActivePieceState.ALERT;
                        e.TargetPos = batman.Pos;
                    }
                }
                else if (e.State == ActivePiece.ActivePieceState.ALERT)                    //Cannot see the Batman, go idle
                {
                    e.State = ActivePiece.ActivePieceState.IDLE;
                }
                //else if( e.State == ActivePiece.ActivePieceState.DEAD) { //stay dead
                //	;
                //}
            }
        }
    }
Beispiel #4
0
    protected void enemyAttack()
    {
        List <Piece> pieces = new List <Piece>(board.Pieces);
        Batman       batman = board.getBatman();

        foreach (Piece p in pieces)
        {
            if (p != batman && p is ActivePiece)
            {
                ActivePiece e = (ActivePiece)p;
                if (e.State == ActivePiece.ActivePieceState.ALERT)
                {
                    if (batman != null && e.canMoveTo(board, batman.Pos))                      //If you can attack the batman, do so
                    {
                        board.movePieceTo(e, batman.Pos);
                        //board.removePiece(batman);
                        //batman.State= Piece.ActivePieceState.Dead;
                        if (onBatmanDead != null)
                        {
                            onBatmanDead();
                        }

                        Debug.Log("The Batman is Dead.");
                    }
                    else                       //Attack where the Batman was
                    {
                        if (e.canMoveTo(board, e.TargetPos))
                        {
                            board.movePieceTo(e, e.TargetPos);
                        }
                    }
                }
            }
        }
    }
Beispiel #5
0
        protected override void OnMouseUp(MouseEventArgs e)
        {
            base.OnMouseUp(e);

            if (ActivePiece != null)
            {
                var stopCell = CellAt(e.X, e.Y);
                ActivePiece.Cell = StartCell;
                if (stopCell.IsHighlighted)
                {
                    var moves = ActivePiece.GetMoves();
                    var move  = moves.Find(x => x.StopCell == stopCell);
                    move.Make();
                    ActivePiece = null;
                    if (ActivePlayer.IsComputer)
                    {
                        if (ActivePlayer == WhitePlayer)
                        {
                            WhitePlayer.MiniMax(TPlayer.SearchDepth);
                        }
                        else
                        {
                            BlackPlayer.MaxiMin(TPlayer.SearchDepth);
                        }
                        ActivePlayer.BestMove.Make();
                    }
                }
                Invalidate();
            }
        }
Beispiel #6
0
 public void RotatePiece(Direction direction)
 {
     //
     if (CanRotatePiece(direction))
     {
         ActivePiece.Rotate(direction);
     }
     Update(true);
 }
Beispiel #7
0
        public void Start()
        {
            activePiece = FindObjectOfType <ActivePiece>();

            if (activePiece == null)
            {
                Debug.Log("No active piece controllers");
                return;
            }
        }
    void OnGUI()
    {
        int depth = GUI.depth;

        GUI.depth = GUILevelOffset;
        for (int col = 0; col < board.Columns; col++)
        {
            for (int row = 0; row < board.Rows; row++)
            {
                bool drawAPiece = false;
                foreach (Piece p in board.getPiecesAt(col, row))
                {
                    drawAPiece = true;
                    if (p is ActivePiece)
                    {
                        ActivePiece e = (ActivePiece)p;
                        if (e.State == ActivePiece.ActivePieceState.ALERT)
                        {
                            drawButton(col, row, p.Type.ToString() + "\nALERTED");
                        }
                        else if (e.State == ActivePiece.ActivePieceState.IDLE)
                        {
                            drawButton(col, row, p.Type.ToString());
                        }
                        else if (e.State == ActivePiece.ActivePieceState.DEAD)
                        {
                            drawButton(col, row, "");
                        }
                    }
                    else
                    {
                        drawButton(col, row, p.Type.ToString());
                    }

                    if (p.Highlight)
                    {
                        drawHighlightFor(p);
                    }
                }

                if (!drawAPiece)
                {
                    drawButton(col, row, "");
                }
            }
        }
        GUI.depth = depth;
    }
Beispiel #9
0
        public bool HasMovablePiece()
        {
            //

            if (m_pieces.Count < 1)
            {
                return(false);
            }

            //if (m_status == StageStatus.Paused)
            //    return false;

            //if (CanMovePiece(Direction.Bottom))
            if (ActivePiece.CanMove(Direction.Bottom, this))
            {
                return(true);
            }

            return(false);
        }
Beispiel #10
0
    protected void testAlert()
    {
        Batman batman = board.getBatman();

        foreach (Piece p in board.Pieces)
        {
            if (p != batman && p is ActivePiece)
            {
                ActivePiece e = (ActivePiece)p;
                if (batman != null && e.canMoveTo(board, batman.Pos))
                {
                    e.State = ActivePiece.ActivePieceState.ALERT;
                }
                else
                {
                    e.State = ActivePiece.ActivePieceState.IDLE;
                }
            }
        }
    }
    private void updatePieces()
    {
        foreach (Piece piece in Board.Pieces)
        {
            GameObject pieceObj = pieceObjects[piece];
            if (pieceObj != null)
            {
                pieceObj.transform.position = convertCellToWorld(piece.Pos);

                if (piece is ActivePiece)
                {
                    ActivePiece ap = (ActivePiece)piece;
                    if (ap.State == ActivePiece.ActivePieceState.DEAD)
                    {
                        Debug.Log("update piece to dead: " + piece.Type.ToString());
                        pieceObj.SetActive(false);
                    }
                }
            }
        }
    }
Beispiel #12
0
 internal async Task KeyPressed(KeyboardEventArgs args)
 {
     LastKeyPress = args.Code;
     await ActivePiece.ProcessKeyEvent(args);
 }
Beispiel #13
0
        public bool CanRotatePiece(Direction direction)
        {
            //□■□ 0 {0,1,0}
            //■■■ 1 {1,1,1}

            //↓
            // ■□
            // ■■
            // ■□
            //return true;

            Piece copyedActivePiece = (Piece)ActivePiece.Clone();

            copyedActivePiece.Rotate(direction);

            //壁と衝突?
            if (copyedActivePiece.X < 0)
            {
                return(false);
            }
            //123456789101
            //□□□□□□□□□■□
            //□□□□□□□□■■■
            if (copyedActivePiece.X + copyedActivePiece.Width > this.m_width)
            {
                return(false);
            }

            if (copyedActivePiece.Y < 0)
            {
                return(false);
            }
            if (copyedActivePiece.Y + copyedActivePiece.Height > this.m_height)
            {
                return(false);
            }

            //他のピースと衝突?

            bool[,] lockedLayer = new bool[m_height, m_width];
            bool[,] activeLayer = new bool[m_height, m_width];
            Piece p;

            for (int y = 0; y < m_height; ++y)
            {
                for (int x = 0; x < m_width; ++x)
                {
                    lockedLayer[y, x] = false;
                    activeLayer[y, x] = false;
                }
            }
            for (int i = 0; i < m_pieces.Count - 1; ++i)
            {
                p = m_pieces[i];

                for (int y = p.Y; y < p.Y + p.Height; ++y)
                {
                    for (int x = p.X; x < p.X + p.Width; ++x)
                    {
                        lockedLayer[y, x] = p[y - p.Y, x - p.X];
                    }
                }
            }

            p = copyedActivePiece;
            for (int y = p.Y; y < p.Y + p.Height; ++y)
            {
                for (int x = p.X; x < p.X + p.Width; ++x)
                {
                    activeLayer[y, x] = p[y - p.Y, x - p.X];
                }
            }

            return(!Util.HitTest(lockedLayer, activeLayer));
        }
Beispiel #14
0
        public void Animate()
        {
            //
            var stage = new Bitmap(this.Width * Piece.BLOCK_WIDTH, this.Height * Piece.BLOCK_WIDTH);
            var g     = Graphics.FromImage(stage);

            g.Clear(Color.White);

            for (var i = 0; i < this.Height; i++)
            {
                for (var j = 0; j < this.Width; j++)
                {
                    g.DrawRectangle(new Pen(Color.Silver), new Rectangle(j * Piece.BLOCK_WIDTH, i * Piece.BLOCK_WIDTH, Piece.BLOCK_WIDTH, Piece.BLOCK_WIDTH));
                }
            }

            foreach (var p1 in m_pieces)
            {
                //

                if (p1.GetHashCode() == ActivePiece.GetHashCode())
                {
                    continue;
                }

                g.DrawImage(p1.ToImage(), p1.X * Piece.BLOCK_WIDTH, p1.Y * Piece.BLOCK_WIDTH);
            }

            var ostage = new Bitmap(stage);

            var p = ActivePiece;

            var angle2 = p.Rotation;

            if (angle2 == 0)
            {
                angle2 = 360;
            }

            //p.Rotate(Direction.Left);
            p.Rotate(Direction.Right);
            p.Rotate(Direction.Right);
            p.Rotate(Direction.Right);

            var angle1 = p.Rotation;

            var img = p.ToImage();
            var dx  = p.X * Piece.BLOCK_WIDTH + p.Center.X * Piece.BLOCK_WIDTH + Piece.BLOCK_WIDTH / 2;
            var dy  = p.Y * Piece.BLOCK_WIDTH + p.Center.Y * Piece.BLOCK_WIDTH + Piece.BLOCK_WIDTH / 2;

            for (var i = 0; i <= angle2 - angle1; i++)
            {
                stage = new Bitmap(ostage);
                var g2 = Graphics.FromImage(stage);

                g2.ResetTransform();
                g2.TranslateTransform(-dx, -dy);
                g2.RotateTransform(i, System.Drawing.Drawing2D.MatrixOrder.Append);
                g2.TranslateTransform(dx, dy, System.Drawing.Drawing2D.MatrixOrder.Append);

                g2.DrawImage(img, p.X * Piece.BLOCK_WIDTH, p.Y * Piece.BLOCK_WIDTH);
                UpdateEvent(new UpdateEventArgs(stage));
                //System.Threading.Thread.Sleep(1);
            }
            p.Rotate(Direction.Right);
            Update();


            g.Dispose();
        }