/// <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(); }
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(); } }
/// <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); }