/// <summary> /// 標準ホールド /// </summary> private void NormalHold() { //中間保持者にホールド状態のミノを受け渡し middleKeepMino = holdMino; //落下中のミノをホールドに格納 Tetrimino currentTarget = mediator.GetActiveMino(); currentTarget.Initialize(); holdMino = currentTarget; middleKeepMino.Initialize(); //中間保持者にホールド状態のミノを受け渡す mediator.OrderToSetNewMinoActive(middleKeepMino); middleKeepMino = null; CanHold = false; }
///<summary> ///固定状態のテトリミノに対応するフィールドの座標データへ反映 ///</summary> public void RefToField() { if (minoStateManager.IsLocked) { var unitPosList = new List <Vector2>(); //テトリミノの構成ブロックの座標を取得 foreach (var point in tetrimino.GetMinoUnitPos()) { //構成ブロックに対応するフィールドの配列位置を取得 int unitPos_X = (int)(tetrimino.Position.X + point.X); int unitPos_Y = (int)(tetrimino.Position.Y + point.Y); unitPosList.Add(new Vector2(unitPos_X, unitPos_Y)); } ////対応する位置のフィールドの要素を書き換える lineJudge.RefToField(unitPosList, tetrimino.GetUnitNum()); this.fieldData = lineJudge.ReflectData(); //消去した列数に反映 for (int i = 0; i < lineJudge.RemoLineCnt; i++) { mediator.AddRemoveLine(); } //スコアを加算 mediator.AddScore(lineJudge.AddScoreVal); //加算用ラインとスコアを初期化 lineJudge.RemoLineCnt = 0; lineJudge.AddScoreVal = 0; //状態管理者を初期化 minoStateManager.Initialize(); //一通り書き換えが終わったら初期化 tetrimino = minoGenerator.PickHeaderMino(); minoGenerator.GenerateEndOfNextMino(); nextMinoBoard.UpdateNext(); //テトリミノ制御対象を再設定 OrderToSetNewMinoActive(tetrimino); //ホールド制限を解除 if (!nextMinoBoard.CanHold) { nextMinoBoard.CanHold = true; } } }
/// <summary> /// 初期化 /// </summary> public void Initialize() { minoGenerator = new MinoGenerator(); //テトリミノの実体生成 tetrimino = minoGenerator.PickHeaderMino(); minoGenerator.GenerateEndOfNextMino(); //ライン審判を実体生成 lineJudge = new LineJudgement(this); nextMinoBoard = new NextMinoBoard(this); //各種テトリミノ管理者を生成、ターゲットを設定 minoMove = new MinoMove(tetrimino, this); minoStateManager = new MinoStateManager(tetrimino, this, mediator); minoCordinate = new MinoCordinateController(tetrimino, this, mediator); //最初は死亡フラグはOFFにする IsDeadFlag = false; }
/// <summary> /// 最初にホールド機能を使う場合のホールド手順 /// </summary> private void NullHold() { //ホールドオブジェクトに落下中のミノを収容 Tetrimino currentTarget = mediator.GetActiveMino(); currentTarget.Initialize(); holdMino = currentTarget; //落下ミノを更新 mediator.OrderToPickHead(); //末尾にテトリミノを追加 mediator.OrderToGenerate(); //更新された落下ミノを取得 Tetrimino newTarget = mediator.GetActiveMino(); newTarget.Initialize(); //各種テトリミノ制御オブジェクトの制御対象を更新 mediator.OrderToSetNewMinoActive(newTarget); CanHold = false; }
public void OrderToPickHead() { tetrimino = minoGenerator.PickHeaderMino(); }
/// <summary> /// 移動処理を施す対象を設定する /// </summary> /// <param name="target">動かしたいターゲット</param> public void SetTarget(Tetrimino target) { this.target = target; }
/// <summary> /// 制御対象を設定する /// </summary> /// <param name="newTarget">制御を行うテトリミノ</param> public void SetTarget(Tetrimino newTarget) { this.target = newTarget; }
public Tetrimino(Tetrimino other) : this() { }