Advertisement
Adeptius

Untitled

Apr 28th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.68 KB | None | 0 0
  1. package com.javarush.test.level22.lesson18.big01;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. /**
  6.  * Класс Field описывает "поле клеток" игры Тетрис
  7.  */
  8. public class Field
  9. {
  10.     //ширина и высота
  11.     private int width;
  12.     private int height;
  13.  
  14.     //матрица поля: 1 - клетка занята, 0 - свободна
  15.     private int[][] matrix;
  16.  
  17.     public Field(int width, int height)
  18.     {
  19.         this.width = width;
  20.         this.height = height;
  21.         matrix = new int[height][width];
  22.     }
  23.  
  24.     public int getWidth()
  25.     {
  26.         return width;
  27.     }
  28.  
  29.     public int getHeight()
  30.     {
  31.         return height;
  32.     }
  33.  
  34.     public int[][] getMatrix()
  35.     {
  36.         return matrix;
  37.     }
  38.  
  39.     /**
  40.      * Метод возвращает значение, которое содержится в матрице с координатами (x,y)
  41.      * Если координаты за пределами матрицы, метод возвращает null.
  42.      */
  43.     public Integer getValue(int x, int y)
  44.     {
  45.         if (x >= 0 && x < width && y >= 0 && y < height)
  46.             return matrix[y][x];
  47.  
  48.         return null;
  49.     }
  50.  
  51.     /**
  52.      *  Метод устанавливает переданное значение(value) в ячейку матрицы с координатами (x,y)
  53.      */
  54.     public void setValue(int x, int y, int value)
  55.     {
  56.         if (x >= 0 && x < width && y >= 0 && y < height)
  57.             matrix[y][x] = value;
  58.     }
  59.  
  60.     /**
  61.      * Метод печатает на экран текущее содержание матрицы
  62.      */
  63.     public void print()
  64.     {
  65.         //Создаем массив, куда будем "рисовать" текущее состояние игры
  66.         int[][] canvas = new int[height][width];
  67.  
  68.         //Копируем "матрицу поля" в массив
  69.         for (int i = 0; i < height; i++)
  70.         {
  71.             for (int j = 0; j < width; j++)
  72.             {
  73.                 canvas[i][j] = matrix[i][j];
  74.             }
  75.         }
  76.  
  77.         //Копируем фигурку в массив, только непустые клетки
  78.         int left = Tetris.game.getFigure().getX();
  79.         int top = Tetris.game.getFigure().getY();
  80.         int[][] brickMatrix = Tetris.game.getFigure().getMatrix();
  81.  
  82.         for (int i = 0; i < 3; i++)
  83.         {
  84.             for (int j = 0; j < 3; j++)
  85.             {
  86.                 if (top + i >= height || left + j >= width) continue;
  87.                 if (brickMatrix[i][j] == 1)
  88.                     canvas[top + i][left + j] = 2;
  89.             }
  90.         }
  91.  
  92.  
  93.         //Выводим "нарисованное" на экран, но начинаем с "границы кадра".
  94.         System.out.println("---------------------------------------------------------------------------\n");
  95.  
  96.         for (int i = 0; i < height; i++)
  97.         {
  98.             for (int j = 0; j < width; j++)
  99.             {
  100.                 int index = canvas[i][j];
  101.                 if (index == 0)
  102.                     System.out.print(" . ");
  103.                 else if (index == 1)
  104.                     System.out.print(" X ");
  105.                 else if (index == 2)
  106.                     System.out.print(" X ");
  107.                 else
  108.                     System.out.print("???");
  109.             }
  110.             System.out.println();
  111.         }
  112.  
  113.  
  114.         System.out.println();
  115.         System.out.println();
  116.     }
  117.  
  118.     /**
  119.      * Удаляем заполненные линии
  120.      */
  121.     public void removeFullLines()
  122.     {
  123.         //Создаем список для хранения линий
  124.         ArrayList<int[]> lines = new ArrayList<int[]>();
  125.  
  126.         //Копируем все непустые линии в список.
  127.         for (int i = 0; i <height; i++)
  128.         {
  129.             //подсчитываем количество единиц в строке - просто суммируем все ее значения
  130.             int count = 0;
  131.             for (int j = 0; j < width; j++)
  132.             {
  133.                 count += matrix[i][j];
  134.             }
  135.  
  136.             //Если сумма строки не равно ее ширине - добавляем в список
  137.             if (count != width)
  138.                 lines.add(matrix[i]);
  139.         }
  140.  
  141.         //Добавляем недостающие строки в начало списка.
  142.         while (lines.size()<height)
  143.         {
  144.             lines.add(0,new int[width]);
  145.         }
  146.  
  147.         //Преобразуем список обратно в матрицу
  148.         matrix = lines.toArray(new int[height][width]);
  149.     }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement