Esempio n. 1
0
        /// <summary>
        /// ゲームを開始します。
        /// </summary>
        public void Play()
        {
            if (this.IsPlaying.Value)
            {
                return;
            }

            this.PreviousCount       = 0;
            this.nextTetrimino.Value = Tetrimino.RandomKind();
            this.Field.Activate(Tetrimino.RandomKind());
            this.Result.Clear();
        }
Esempio n. 2
0
        public void CurrTetriminoMoveDown()
        {
            Point Position = currTetrimino.getCurrPosition();

            Point[] Shape = currTetrimino.getCurrShape();
            bool    move  = true;

            currTetriminoErase();
            foreach (Point S in Shape)
            {
                Point x = new Point(0, 0);
                //Point y = new Point(0, 1);
                Point y = new Point(0, -1);


                if (((int)(S.Y + Position.Y) + 2 + 1) >= Rows)
                {
                    move = false;
                }
                else if (BlockControls[((int)(S.X + Position.X) + ((Columns / 2) - 1)), (int)(S.Y + Position.Y) + 2 + 1].Background != NoBrush && currTetrimino.getCurrPosition() == x)
                {
                    gameEnd = true;
                }
                else if (BlockControls[((int)(S.X + Position.X) + ((Columns / 2) - 1)), (int)(S.Y + Position.Y) + 3].Background != NoBrush && (currTetrimino.getCurrPosition() == y))
                {
                    gameEnd = true;
                }
                else if (BlockControls[((int)(S.X + Position.X) + ((Columns / 2) - 1)), (int)(S.Y + Position.Y) + 2 + 1].Background != NoBrush)
                {
                    move = false;
                }
            }
            if (move)
            {
                currTetrimino.moveDown();
                currTetriminoDraw();
            }
            else
            {
                currTetriminoDraw();
                CheckRows();
                currTetrimino = new Tetrimino();
            }
        }
Esempio n. 3
0
        /// <summary>
        /// インスタンスを生成します。
        /// </summary>
        public Game()
        {
            this.Field.PlacedBlocks.Subscribe(_ =>
            {
                //--- 10 行消すたびにスピードアップ
                var count = this.Result.TotalRowCount.Value / 10;
                if (count > this.PreviousCount)
                {
                    this.PreviousCount = count;
                    this.Field.SpeedUp();
                }

                //--- 新しいテトリミノを設定
                var kind = this.nextTetrimino.Value;
                this.nextTetrimino.Value   = Tetrimino.RandomKind();
                this.Field.Tetrimino.Value = Tetrimino.Create(kind);
            });
            this.Field.LastRemovedRowCount.Subscribe(this.Result.AddRowCount);
        }