java游戏实战chess-2.Tile类

java游戏实战chess-2.Tile类,第1张

java游戏实战chess-2.Tile类 棋盘布局分析:

国际象棋棋盘有64个格子,我们通过Tile类表示格子,通过构造函数,当我们构造一个新的tile实例时,对应的会产生一个tile坐标,这个坐标即为传递给构造函数的相应内容。我们把这个类定义为抽象类,只需在子类中定义即可。
我们还需要判断某个tile是否被占用,如果未被占用,需要返回null。我们创建EmptyTile类表示空格子,它会调用父类的构造函数。

Tile类分析:

第一版:tile=OccupiedTile+EmptyTile
将格子分为被占用和未被占用两类(注意tile是抽象类不能被实例化)

public abstract class Tile {
	 protected final int tileCoordinate;
	 private Tile(int tileCoordinate){
        this.tileCoordinate = tileCoordinate;
    } 
     public abstract boolean isTileOccupied();
     public abstract Piece getPiece(); //piece类后在后面定义
     public static final class EmptyTile extends Tile {
      	EmptyTile(final int coordinate){
            super(coordinate);
      }
        @Override //重写以下方法
        public boolean isTileOccupied(){
            return false;
        }
      public static final class OccupiedTile extends Tile {
        private final Piece pieceOnTile;
        OccupiedTile(int tileCoordinate, Piece pieceOnTile){
            super(tileCoordinate);//调用父类建立顶部坐标的构造函数
            this.pieceonTile = pieceOnTile;
         }
        @Override
        public boolean isTileOccupied(){
            return true;
        }
        @Override
        public Piece getPiece(){
            return this.pieceOnTile;
        }
       }//定义被占领的格子

在Tile类中声明一个新的数字字段整数:

 private static final Map EMPTY_TILES_CACHE = createAllPossibleEmptyTiles();
 	private static Map createAllPossibleEmptyTiles(){
        final Map emptyTileMap = new HashMap<>();
        for(int i = 0; i < 64; i++){
            emptyTileMap.put(i, new EmptyTile(i));
        }
        Collections.unmodifiableMap(emptyTileMap);//依赖的新库为谷歌第三方库(guava-18.0番石榴)
        return ImmutableMap.copyOf(emptyTileMap);
    }
     public static Tile createTile(final int tileCoordinate,final Piece piece){
        return piece != null ? new OccupiedTile(tileCoordinate, piece) : EMPTY_TILES_CACHE.get(tileCoordinate);
    }

Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。

Map讲解
createTile解释:使构造函数私有化,将格子坐标传入,返回时进行判断。通过这个方法,任何人都可以在类上创建实例。

视频链接

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5694795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存