2016-09-05 16 views
-6

Я разрабатываю игру с концепцией Tetris. Но в моей игре я хочу очистить прямоугольник, сформированный игроком, а не строку или строку. Например, я создаю экземпляр, что блоки будут очищены, если в таблице будет 4 строки и 5 столбцов, заполненных блоками Tetris.C# Tetris, очистить сформированный прямоугольник вместо строки или строки

До сих пор это мой код, который удаляет строку:

using UnityEngine; 
using System.Collections; 

public class Grid : MonoBehaviour { 

    // The Grid itself 
    public static int w = 10; 
    public static int h = 20; 
    public static Transform[,] grid = new Transform[w, h]; 



    void Start() { 

    } 


    public static Vector2 roundVec2(Vector2 v) { 
     return new Vector2(Mathf.Round(v.x), 
          Mathf.Round(v.y)); 
    } 



    // helps to find out if a certain coordinate is in between the borders or if it's outside of the borders: 

    public static bool insideBorder(Vector2 pos) { 
     return ((int)pos.x >= 0 && 
       (int)pos.x < w && 
       (int)pos.y >= 0); 
    } 



    //The next function deletes all Blocks in a certain row. 

    public static void deleteRow(int y) { 
     for (int x = 0; x < w; ++x) 
     { 
      Destroy(grid[x, y].gameObject); 
      grid[x, y] = null; 

     } 
     Score.currentScore += 1; 

    } 




    // Whenever a row was deleted, the above rows should fall towards the bottom by one unit 

    public static void decreaseRow(int y) { 
     for (int x = 0; x < w; ++x) 
     { 
      if (grid[x, y] != null) 
      { 
       // Move one towards bottom 
       grid[x, y - 1] = grid[x, y]; 
       grid[x, y] = null; 

       // Update Block position 
       grid[x, y - 1].position += new Vector3(0, -1, 0); 
      } 
     } 
    } 


    public static void decreaseRowsAbove(int y) 
    { 
     for (int i = y; i < h; ++i) 
      decreaseRow(i); 
    } 



    // function that finds out if a row is full of blocks 

    public static bool isRowFull(int y) 
    { 
     for (int x = 0; x < w; ++x) 
      if (grid[x, y] == null) 
       return false; 
     return true; 
    } 


    //a function that deletes all full rows and then always decreases the above row's y coordinate by one. 

    public static void deleteFullRows() 
    { 
     for (int y = 0; y < h; ++y) 
     { 
      if (isRowFull(y)) 
      { 
       deleteRow(y); 
       decreaseRowsAbove(y + 1); 
       --y; 

      } 
     } 
    }  
} 

Like this. Instead of line, a rectangle formed will be the one to be clear

Итак, как я очистить прямоугольник, образованный в моем тетрис?

Обычный Тетрис удаляет строку или строку. Но я хочу очистить прямоугольную призму.

Благодарим Вас за ответ

+2

постановляю: C# или Java? – RealSkeptic

+0

И: в чем вопрос? Вы просто отказались от требований; и код, который у вас есть. – GhostCat

+0

C# вопрос в том, как очистить прямоугольник, сформированный в моем тетрисе. Обычный тетрис удаляет строку или строку. Но я хочу очистить прямоугольную призму. Спасибо за ваш ответ – JaneTho

ответ

0

Что-то вроде этого:

public static void deleteGrid(int startX, int startY, int width = 5, int height = 4) 
{ 

    // to avoid Errors, Check if indexes are in bound for grid. 

    // if condition code goes here 

    // then... 

    for (int i = startX; i < startX + width; i++) 
    { 
     for (int j = startY; j < startY + height; j++) 
     { 
      Destroy(grid[i, j].gameObject); 
      grid[i, j] = null; 
     } 
    } 
    Score.currentScore += 1; 
} 

Зов это следующим образом:

Grid.deleteGrid(2,3); // default width = 5, height = 4 will be used here. 

Или

Grid.deleteGrid(2,3,3,3); // this will delete 3X3 grid at index (2,3) 
+0

Спасибо за ваш ответ и за редактирование моего вопроса. у него есть ошибка, которая говорит «нет перегрузки для метода« deleteRow »принимает« 1 »аргумент. Извините, но я новичок в разработке игр. Я отредактирую свой вопрос и поставлю весь свой скрипт. thankyou – JaneTho

+0

Я обновил свой ответ. вы вызывали свой метод 'deleteRow()', меняя его на 'deleteGrid' –

+0

, все еще не работает для меня. Я думаю, что без проблем с вашим кодом я просто не знаю, как его применять. исходный код выше? Спасибо за то, что сделал мне услугу. – JaneTho

Смежные вопросы