/// <summary> /// コンストラクタ /// </summary> public NextBlockControl() { InitializeComponent(); _lastPieceParameter = MainModel.NextPieceParameter; SetEvent(); }
/// <summary> /// モデル層からのデータ更新通知 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainModel_Updated(object sender, EventArgs e) { // 次のピースが新しくなった場合 if (_lastPieceParameter != MainModel.NextPieceParameter) { _lastPieceParameter = MainModel.NextPieceParameter; Invalidate(); } }
/// <summary> /// ピースを新しく更新する /// </summary> /// <returns></returns> public static PieceParameter CreatePieceParameter() { // ランダム関数でパラメータを決定 Random random = new Random(); int pieceLength = Enum.GetValues(typeof(PieceType)).Length; int pieceIndex = random.Next(pieceLength - 1); int angleLength = Enum.GetValues(typeof(AngleType)).Length; int angleIndex = random.Next(angleLength); PieceParameter pieceParameter = new PieceParameter(); // 更新 switch (pieceIndex) { case 0: pieceParameter.Piece = new PieceI(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.I; break; case 1: pieceParameter.Piece = new PieceO(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.O; break; case 2: pieceParameter.Piece = new PieceS(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.S; break; case 3: pieceParameter.Piece = new PieceZ(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.Z; break; case 4: pieceParameter.Piece = new PieceJ(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.J; break; case 5: pieceParameter.Piece = new PieceL(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.L; break; case 6: pieceParameter.Piece = new PieceT(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.T; break; default: System.Diagnostics.Debug.Assert(false); pieceParameter.Piece = new PieceI(NEW_PIECE_START_X, NEW_PIECE_START_Y, (AngleType)angleIndex); pieceParameter.PieceType = PieceType.I; break; } return pieceParameter; }