private Tetrimino CreateTetrimino() { var idx = UnityEngine.Random.Range(0, Data.TetriminoPrefab.Length); var tetrimino = GameObject.Instantiate(Data.TetriminoPrefab[idx]).GetComponent <Tetrimino>(); // Tetriminoのイベント登録 tetrimino.OnLand = (blocks) => { // 親子関係の解消 foreach (var block in blocks) { block.transform.parent = null; } // テトリミノの削除 Destroy(tetrimino.gameObject); // 次のテトリミノの操作へ移る Next(); }; tetrimino.OnRotateChecked = (positions) => { var store = StoreManager.Instance.BoardStore; foreach (var position in positions) { if (position.x < 0 || position.x >= Data.Columns) { return(false); } if (position.y < 0 || position.y >= Data.Rows) { return(false); } var flag = TetrisBitBoard.GetPositionFlag(store.BitBoard, position); if (flag == 1) { return(false); } } return(true); }; return(tetrimino); }
private void Next() { var bitboard = StoreManager.Instance.BoardStore.BitBoard; var typeboard = StoreManager.Instance.BoardStore.TypeBoard; // 置かれたBlockのビットを立てる foreach (var block in current.Blocks) { TetrisBitBoard.SetPositionFlag(ref bitboard, block); TetrisBitBoard.SetTypeFlag(ref typeboard, block); // 置いたブロックを保存 blocks[block.Position.y * Data.Columns + block.Position.x] = block; } var removeRow = TetrisBitBoard.CheckLine(bitboard, typeboard); // Lineの更新 UpdateScoreAndLine(removeRow.Count); // ブロックの状態を更新 UpdateView(removeRow); // ゲームが終了したか判定 if (IsFinished(bitboard)) { current = next = null; OnFinished(); return; } // 現在,次のテトリミノの更新 current = next; next = CreateTetrimino(); // 現在の状態を保存 TetrisBitBoard.SaveCurrentData(current, next, bitboard, typeboard); // 次の操作へ current.Launch(); next.Standby(); }