Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.37 KB | None | 0 0
  1. package com.javarush.task.task35.task3513;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. /**
  7.  * Created by bat00 on 22.02.2017.
  8.  */
  9. public class Model {
  10.     private static final int FIELD_WIDTH = 4;
  11.     private Tile[][] gameTiles;
  12.     int score;
  13.     int maxTile;
  14.  
  15.     public Model() {
  16.         resetGameTiles();
  17.         score = 0;
  18.         maxTile = 2;
  19.  
  20.     }
  21.  
  22.     private void addTile(){
  23.  
  24.         List<Tile> list = getEmptyTiles();
  25.         if (!list.isEmpty()){
  26.             list.get((int) (list.size()*Math.random())).value= (Math.random() < 0.9 ? 2 : 4);
  27.  
  28.         }
  29.  
  30.     }
  31.  
  32.     public void resetGameTiles(){
  33.         gameTiles = new Tile[FIELD_WIDTH][FIELD_WIDTH];
  34.         for (int i = 0;i < FIELD_WIDTH; i++){
  35.             for (int j = 0; j < FIELD_WIDTH; j++){
  36.                 gameTiles[i][j]=new Tile();
  37.             }
  38.         }
  39.         addTile();
  40.         addTile();
  41.     }
  42.  
  43.     private List<Tile> getEmptyTiles(){
  44.         List<Tile> list = new ArrayList<>();
  45.         for (int i = 0;i<gameTiles.length;i++){
  46.             for (int j = 0;j<gameTiles[i].length;j++){
  47.                 if (gameTiles[i][j].isEmpty()){
  48.                     list.add(gameTiles[i][j]);
  49.                 }
  50.             }
  51.         }
  52.         return list;
  53.     }
  54.  
  55.     private boolean compressTiles(Tile[] tiles){
  56.         boolean change = false;
  57.         for (int i = 1; i < tiles.length; i++) {
  58.             for (int j = 1; j < tiles.length; j++) {
  59.                 if (tiles[j - 1].isEmpty() && !tiles[j].isEmpty()) {
  60.                     change = true;
  61.                     tiles[j - 1] = tiles[j];
  62.                     tiles[j] = new Tile();
  63.                 }
  64.             }
  65.         }
  66.         return change;
  67.  
  68.     }
  69.  
  70.     private boolean mergeTiles(Tile[] tiles){
  71.         boolean change = false;
  72.         for (int i = 1; i < tiles.length; i++) {
  73.             if ((tiles[i - 1].value == tiles[i].value) && !tiles[i - 1].isEmpty() && !tiles[i].isEmpty()) {
  74.                 change = true;
  75.                 tiles[i - 1].value *= 2;
  76.                 score += tiles[i - 1].value;
  77.                 maxTile = maxTile > tiles[i - 1].value ? maxTile : tiles[i - 1].value;
  78.                 tiles[i] = new Tile();
  79.                 compressTiles(tiles);
  80.             }
  81.         }
  82.         return change;
  83.     }
  84.  
  85.     protected void left()
  86.     {
  87.         boolean isChanged = false;
  88.         for (int i = 0; i < FIELD_WIDTH; i++) {
  89.             boolean compress = compressTiles(gameTiles[i]);
  90.             boolean merge = mergeTiles(gameTiles[i]);
  91.             if(compress || merge)
  92.             {
  93.                 isChanged=true;
  94.             }
  95.         }
  96.         if (isChanged) addTile();
  97.     }
  98.     private void rotateToRight(){
  99.         for (int i = 0; i < FIELD_WIDTH / 2; i++) {
  100.             for (int j = i; j < FIELD_WIDTH - i - 1; j++) {
  101.                 Tile tmp = gameTiles[i][j];
  102.                 gameTiles[i][j] = gameTiles[FIELD_WIDTH - j - 1][i];
  103.                 gameTiles[FIELD_WIDTH - j - 1][i] = gameTiles[FIELD_WIDTH - i - 1][FIELD_WIDTH - j - 1];
  104.                 gameTiles[FIELD_WIDTH - i - 1][FIELD_WIDTH - j - 1] = gameTiles[j][FIELD_WIDTH - i - 1];
  105.                 gameTiles[j][FIELD_WIDTH - i - 1] = tmp;
  106.             }
  107.         }
  108.  
  109.     }
  110.  
  111.     protected void right(){
  112.         rotateToRight();
  113.         rotateToRight();
  114.         left();
  115.         rotateToRight();
  116.         rotateToRight();
  117.  
  118.  
  119.     }
  120.  
  121.     protected void up(){
  122.         rotateToRight();
  123.         rotateToRight();
  124.         rotateToRight();
  125.         left();
  126.         rotateToRight();
  127.  
  128.  
  129.     }
  130.  
  131.     protected void down(){
  132.         rotateToRight();
  133.         left();
  134.         rotateToRight();
  135.         rotateToRight();
  136.         rotateToRight();
  137.  
  138.  
  139.     }
  140.  
  141.     public Tile[][] getGameTiles() {
  142.         return gameTiles;
  143.     }
  144.  
  145.     public boolean canMove(){
  146.         if (!getEmptyTiles().isEmpty()){
  147.             return true;
  148.         }
  149.         for (int i = 0;i<FIELD_WIDTH;i++){
  150.             for (int j = 1;j<FIELD_WIDTH;j++){
  151.                 if (gameTiles[i][j].value==gameTiles[i][j-1].value){
  152.                     return true;
  153.                 }
  154.             }
  155.         }
  156.         for (int i =0;i<FIELD_WIDTH;i++){
  157.             for (int j = 1;j<FIELD_WIDTH;j++){
  158.                 if (gameTiles[j][i].value==gameTiles[j-1][i].value){
  159.                     return true;
  160.                 }
  161.             }
  162.         }
  163.         return false;
  164.  
  165.     }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement