⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 level.java

📁 monkeymahjongg,一个JME3D游戏的源代码
💻 JAVA
字号:
package jmetest.monkeymahjongg.game;
 
 import com.jme.renderer.ColorRGBA;
 import com.jme.scene.Geometry;
 import com.jme.scene.state.MaterialState;
 import com.jme.system.DisplaySystem;
 import java.util.Map;
 import java.util.logging.Logger;
 
 /**
  *
  * @author Pirx
  */
 public class Level {
 
     private final String name;
     private final int width;
     private final int height;
     private final int layers;
     private final Map<Coordinate, TileData> tiles;
     private Geometry selectedGeometry;
 
     Level(String name, int width, int height, int layers, Map<Coordinate, TileData> tiles) {
         this.name = name;
         this.width = width;
         this.height =height;
         this.layers = layers;
         this.tiles = tiles;
     }
 
     private TileData getSelectedTile() {
         return getTileData(selectedGeometry);
     }
 
     private TileData getTileData(Geometry geometry) {
         if (geometry == null) {
             return null;
         }
         Object userData = geometry.getUserData(MahjonggGameState.TILE_USER_DATA);
         return userData instanceof TileData ? (TileData) userData : null;
     }
 
     void picked(Geometry geometry) {
         final TileData tileData = getTileData(geometry);
         if (tileData == null) { //picked something else
             return;
         }
         final TileData selectedTile = getSelectedTile();
         if (tileData.equals(selectedTile)) {  //same tile -> unselect
             System.err.println("unselect " + selectedTile);
             selectedGeometry = null;
             unselect(geometry);
         } else if (!isBlocked(tileData)) {
             if (selectedGeometry == null) { //new selection
                 Logger.getLogger(Level.class.getName()).info("selected " + tileData);
                 selectedGeometry = geometry;
                 select(geometry);
             } else if (tileData.matches(selectedTile)) { 
                 Logger.getLogger(Level.class.getName()).info("matching new " + tileData + " and selected " + selectedTile);
                 //vaporize(geometry);
                 //vaporize(selectedGeometry);
                 selectedGeometry.removeFromParent();
                 geometry.removeFromParent();
                 selectedGeometry = null;
 
                 tiles.remove(tileData.getCoordinate());
                 tiles.remove(selectedTile.getCoordinate());
             } else {
                 Logger.getLogger(Level.class.getName()).info("tiles not matching");
             }
         } else {
             Logger.getLogger(Level.class.getName()).info("tile blocked");
         }
     }
 
     private void setEmissiveColor(Geometry tile, ColorRGBA color) {
         final MaterialState ms = DisplaySystem.getDisplaySystem().getRenderer().createMaterialState();
         ms.setEmissive(color);
         tile.setRenderState(ms);
         tile.updateRenderState();
     }
 
     private void select(Geometry tile) {
         setEmissiveColor(tile, ColorRGBA.yellow);
     }
 
     private void unselect(Geometry tile) {
         setEmissiveColor(tile, ColorRGBA.white);
     }
 
     private boolean isBlocked(TileData tileData) {
         Coordinate c = tileData.getCoordinate();
 
         //check for tiles on top
         for (int x = -1; x <= 1; x++) {
             for (int y = -1; y <= 1; y++) {
                 if (isTile(c.add(x,y,1))) {
                     return true;
                 }
             }
         }
         //blocked from both sides??
         return sideBlocked(c.add(- 2, 0, 0)) && 
                sideBlocked(c.add(2, 0, 0));
     }
 
     private boolean sideBlocked(Coordinate c) {
         return isTile(c) 
             || isTile(c.add(0,1,0))
             || isTile(c.add(0,-1,0));
     }
 
     boolean isTile(Coordinate c) {
         return tiles.containsKey(c);
     }
 
     TileData getTile(Coordinate c) {
         return tiles.get(c);
     }
 
     public String getName() {
         return name;
     }
 
     public int getWidth() {
         return width;
     }
 
     public int getHeight() {
         return height;
     }
 
     public int getLayers() {
         return layers;
     }
 
 
 }
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -