📄 worldmap.java
字号:
package logic;
import java.util.*;
import java.io.*;
public class WorldMap {
private Hashtable ht = new Hashtable(); // 记录地图的Hash表
private Enumeration worldMap; // 地图中障碍物的枚举
private int mapWidth = 0; // 地图宽
private int mapHeight = 0; // 地图高
private int xFood = 0; // 食物的x初始位置
private int yFood = 0; // 食物的y初始位置
private Vector playerStartPosition = new Vector();
private String mapName;
public WorldMap (String mapName) {
int lineCounter = 0; // 当前有效的地图行数
int xBar1, yBar1, xBar2, yBar2, tempInt;
String mapInfo, tempStr, barType;
File f;
FileReader fr;
BufferedReader br;
try {
// 打开地图
this.mapName = mapName;
f = new File(mapName);
fr = new FileReader(f);
br = new BufferedReader(fr);
// 逐行读取数据
while ((mapInfo=br.readLine())!=null) {
// 如果是空行,则跳过此行
if (mapInfo.equals("") || mapInfo.equals("\n")) continue;
// 如果是注释行,则跳过此行
if (mapInfo.startsWith("#")) continue;
lineCounter++;
// 当前行数为一,则表示地图大小
// 当前行数为二,则表示食物初始化位置
// 其他行数表示障碍物
if (lineCounter == 1) {
mapWidth = Integer.parseInt(mapInfo.substring(0,mapInfo.indexOf(" ")));
mapHeight = Integer.parseInt(mapInfo.substring(mapInfo.indexOf(" ")+1));
} else if (lineCounter == 2) {
xFood = Integer.parseInt(mapInfo.substring(0,mapInfo.indexOf(" ")));
yFood = Integer.parseInt(mapInfo.substring(mapInfo.indexOf(" ")+1));
} else if (lineCounter == 3) {
while (mapInfo.length()>1) {
if (mapInfo.indexOf(" ")!=-1) {
playerStartPosition.add(mapInfo.substring(0,mapInfo.indexOf(" ")));
mapInfo = mapInfo.substring(mapInfo.indexOf(" ")+1);
} else {
playerStartPosition.add(mapInfo);
mapInfo = "";
}
}
} else {
xBar1 = Integer.parseInt(mapInfo.substring(0,mapInfo.indexOf(" ")));
tempStr = mapInfo.substring(mapInfo.indexOf(" ")+1);
yBar1 = Integer.parseInt(tempStr.substring(0,tempStr.indexOf(" ")));
tempStr = tempStr.substring(tempStr.indexOf(" ")+1);
if (tempStr.indexOf(" ")!=-1) {
xBar2 = Integer.parseInt(tempStr.substring(0,tempStr.indexOf(" ")));
tempStr = tempStr.substring(tempStr.indexOf(" ")+1);
yBar2 = Integer.parseInt(tempStr.substring(0,tempStr.indexOf(" ")));
barType = tempStr.substring(tempStr.indexOf(" ")+1);
if (xBar2<xBar1) {
tempInt = xBar2;
xBar2 = xBar1;
xBar1 = tempInt;
}
if (yBar2<yBar1) {
tempInt = yBar2;
yBar2 = yBar1;
yBar1 = tempInt;
}
for (int i=xBar1;i<=xBar2;i+=20)
for (int j=yBar1;j<=yBar2;j+=20)
ht.put(String.valueOf(i)+" "+String.valueOf(j),String.valueOf(i)+" "+String.valueOf(j)+" "+barType);
} else {
ht.put(String.valueOf(xBar1)+" "+String.valueOf(yBar1),mapInfo);
}
}
}
// 返回障碍物的枚举
worldMap = ht.elements();
br.close();
fr.close();
}catch(FileNotFoundException fe){
System.out.println("找不到地图文件");
}catch(IOException ie){
System.out.println("I/O错误");
}
}
// 将坐标加入到Hash表
public void add(String pos) {
ht.put(pos,"Snake");
}
// 将坐标从Hash表中移除
public void remove(String pos) {
ht.remove(pos);
}
// 判断坐标处是否障碍物(障碍或是其他蛇的身体)
public boolean isBarrier(String k) {
return ht.containsKey(k);
}
public Enumeration getWorldMap() {
return worldMap;
}
public String getPlayerStartPosition(int idx) {
return (String)playerStartPosition.elementAt(idx);
}
public int getMapWidth() {
return mapWidth;
}
public int getMapHeight() {
return mapHeight;
}
public int getXFood() {
return xFood;
}
public int getYFood() {
return yFood;
}
public Hashtable getHt() {
return ht;
}
public String getMapName() {
return mapName;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -