Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.javarush.task.task35.task3513;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * Created by bat00 on 22.02.2017.
- */
- public class Model {
- private static final int FIELD_WIDTH = 4;
- private Tile[][] gameTiles;
- int score;
- int maxTile;
- public Model() {
- resetGameTiles();
- score = 0;
- maxTile = 2;
- }
- private void addTile(){
- List<Tile> list = getEmptyTiles();
- if (!list.isEmpty()){
- list.get((int) (list.size()*Math.random())).value= (Math.random() < 0.9 ? 2 : 4);
- }
- }
- public void resetGameTiles(){
- gameTiles = new Tile[FIELD_WIDTH][FIELD_WIDTH];
- for (int i = 0;i < FIELD_WIDTH; i++){
- for (int j = 0; j < FIELD_WIDTH; j++){
- gameTiles[i][j]=new Tile();
- }
- }
- addTile();
- addTile();
- }
- private List<Tile> getEmptyTiles(){
- List<Tile> list = new ArrayList<>();
- for (int i = 0;i<gameTiles.length;i++){
- for (int j = 0;j<gameTiles[i].length;j++){
- if (gameTiles[i][j].isEmpty()){
- list.add(gameTiles[i][j]);
- }
- }
- }
- return list;
- }
- private boolean compressTiles(Tile[] tiles){
- boolean change = false;
- for (int i = 1; i < tiles.length; i++) {
- for (int j = 1; j < tiles.length; j++) {
- if (tiles[j - 1].isEmpty() && !tiles[j].isEmpty()) {
- change = true;
- tiles[j - 1] = tiles[j];
- tiles[j] = new Tile();
- }
- }
- }
- return change;
- }
- private boolean mergeTiles(Tile[] tiles){
- boolean change = false;
- for (int i = 1; i < tiles.length; i++) {
- if ((tiles[i - 1].value == tiles[i].value) && !tiles[i - 1].isEmpty() && !tiles[i].isEmpty()) {
- change = true;
- tiles[i - 1].value *= 2;
- score += tiles[i - 1].value;
- maxTile = maxTile > tiles[i - 1].value ? maxTile : tiles[i - 1].value;
- tiles[i] = new Tile();
- compressTiles(tiles);
- }
- }
- return change;
- }
- protected void left()
- {
- boolean isChanged = false;
- for (int i = 0; i < FIELD_WIDTH; i++) {
- boolean compress = compressTiles(gameTiles[i]);
- boolean merge = mergeTiles(gameTiles[i]);
- if(compress || merge)
- {
- isChanged=true;
- }
- }
- if (isChanged) addTile();
- }
- private void rotateToRight(){
- for (int i = 0; i < FIELD_WIDTH / 2; i++) {
- for (int j = i; j < FIELD_WIDTH - i - 1; j++) {
- Tile tmp = gameTiles[i][j];
- gameTiles[i][j] = gameTiles[FIELD_WIDTH - j - 1][i];
- gameTiles[FIELD_WIDTH - j - 1][i] = gameTiles[FIELD_WIDTH - i - 1][FIELD_WIDTH - j - 1];
- gameTiles[FIELD_WIDTH - i - 1][FIELD_WIDTH - j - 1] = gameTiles[j][FIELD_WIDTH - i - 1];
- gameTiles[j][FIELD_WIDTH - i - 1] = tmp;
- }
- }
- }
- protected void right(){
- rotateToRight();
- rotateToRight();
- left();
- rotateToRight();
- rotateToRight();
- }
- protected void up(){
- rotateToRight();
- rotateToRight();
- rotateToRight();
- left();
- rotateToRight();
- }
- protected void down(){
- rotateToRight();
- left();
- rotateToRight();
- rotateToRight();
- rotateToRight();
- }
- public Tile[][] getGameTiles() {
- return gameTiles;
- }
- public boolean canMove(){
- if (!getEmptyTiles().isEmpty()){
- return true;
- }
- for (int i = 0;i<FIELD_WIDTH;i++){
- for (int j = 1;j<FIELD_WIDTH;j++){
- if (gameTiles[i][j].value==gameTiles[i][j-1].value){
- return true;
- }
- }
- }
- for (int i =0;i<FIELD_WIDTH;i++){
- for (int j = 1;j<FIELD_WIDTH;j++){
- if (gameTiles[j][i].value==gameTiles[j-1][i].value){
- return true;
- }
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement