`
cq520
  • 浏览: 164800 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

记事本保存游戏地图

阅读更多



 

起初看到这个,你的想法是什么,这小子想干嘛呢???

       这个方法是在一个多月前做多线程游戏的时候想到的,最初是中南的一位朋友提出来的。最近的博客老是在“炒剩饭”,一些新学的东西也总是来不及作总结,不过觉得这个想法确实不错,所以也才拿出来再与大家探讨一下,说不定还有更好的方法。

       我们所玩的一些场景不动2D的游戏,往往需要构建一些地图,如泡泡堂,坦克大战等等。



 

而在地图构建的时候,我们往往采用的是用一个数组将所需的地图保存起来,但是做到后来,需要的地图多了,保存的效率往往也就偏低了,而且还会耗费大多的代码去填数组。

       在一个记事本中把你想要做的地图保存起来,看上去也更加直观,简洁。使用IO流进行字节读取是出错率相对较低的,所以我们的地图中理论上可以存在256种元素(一个byte占8位)。当然,我们或许不需要这么多,a-z加上19就完全可以满足我们的日常需求了。

       最开始的时候,有人问到,既然是OOP,为什么不用对象来保存我们的地图元素?原因很简单,我们操作byte数据的效率要高于操作对象本身。

       好的,闲话不多说,方法如下:

首先,我们需要一个ArrayList来保存数据,有什么用呢?继续看你就知道了

 //创建地图数组来保存数据
 ArrayList<Byte> MapList=new ArrayList<Byte>();

/**
 * 将记事本中的数据读入到数组当中
 * @param mapName 记事本的文件名
 * @return 得到的字节数组
*/
public int[][] createMap(String mapName){
	File file=new File(mapName);
	//创建地图数组
	int map[][]=null;
	if(file.exists()){
		try{
		InputStream in=new FileInputStream(file);
		//创建与文件相同大小的字节数组
		byte content[]=new byte[in.available()];
		//读取字节数组
		in.read(content);
		//将内容添加到队列当中
		for(int i=0;i<content.length;i++){
			MapList.add(content[i]);
		}
		//移除回车符
		for(int i=0;i<MapList.size();i++){
			if(MapList.get(i)==10){
			           MapList.remove(i);
			}
		}
		//移除换行符
		for(int i=0;i<MapList.size();i++){
			if(MapList.get(i)==13){
			           MapList.remove(i);
			}
		}
		//封装字节内容
		String string=new String(content);
		String arr[]=string.split("\r\n");
		//存入数组当中
		int index=0;
		map=new int[arr.length][arr[0].length()];
		for(int i=0;i<map.length;i++){
			for(int j=0;j<map[i].length;j++{
			        map[i][j]=MapList.get(index)-48;
			        index++;
			}
		}
		         in.close();
		}catch(Exception e){
		        e.printStackTrace();
		}
	}else{
	                System.out.println("文件不存在");
	}
	return map;
}

        比较关键的步骤是移除回车换行字符,这两个字符是我们看不到的,只有在打印的时候才会发现他们,

莫名其妙的多出个10跟13,起初我也是觉得纳闷,任何方法当然都要测试一下,自己做个记事本地图试一下吧。

  • 大小: 33.4 KB
  • 大小: 65.8 KB
0
1
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    VB编程资源大全(源码 其它4)

    g003.zip 代表和平的娱乐游戏,自带EXE(12KB) 596,g002.zip 一个迷宫游戏,还有地图编辑器呢,完全源码(230KB) 597,g001.zip 模仿windows中的扫雷,自带EXE(38KB) 598,p012_prtDB.zip 打印...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    VB编程资源大全(源码 其它3)

    g003.zip 代表和平的娱乐游戏,自带EXE(12KB) 596,g002.zip 一个迷宫游戏,还有地图编辑器呢,完全源码(230KB) 597,g001.zip 模仿windows中的扫雷,自带EXE(38KB) 598,p012_prtDB.zip 打印...

    VB编程资源大全(源码 其它1)

    g003.zip 代表和平的娱乐游戏,自带EXE(12KB) 596,g002.zip 一个迷宫游戏,还有地图编辑器呢,完全源码(230KB) 597,g001.zip 模仿windows中的扫雷,自带EXE(38KB) 598,p012_prtDB.zip 打印...

    VB编程资源大全(源码 其它2)

    g003.zip 代表和平的娱乐游戏,自带EXE(12KB) 596,g002.zip 一个迷宫游戏,还有地图编辑器呢,完全源码(230KB) 597,g001.zip 模仿windows中的扫雷,自带EXE(38KB) 598,p012_prtDB.zip 打印...

Global site tag (gtag.js) - Google Analytics