java:记事本保存游戏地图

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

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

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

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

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

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

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

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

//创建地图数组来保存数据

ArrayList<Byte> MapList=new ArrayList<Byte>();

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

Java代码

/**
 * 将记事本中的数据读入到数组当中
 * @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,起初我也是觉得纳闷,任何方法当然都要测试一下,自己做个记事本地图试一下吧。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 数据
, 地图
, 记事本
, 字节
, 坦克大战游戏canvashtml
, java 数组 效率
, java 地图
, 一个
, 坦克大战游戏
, JAVA坦克大战游戏
Java坦克大战
,以便于您获取更多的相关知识。

时间: 2024-09-12 01:49:01

java:记事本保存游戏地图的相关文章

java 记事本 保存 怎么 实现换行

问题描述 bw.write(jta.getText());保存的时候怎么现实换行!!!!!!!!!! 解决方案 解决方案二:bw.newLine(); 可以实现换行!解决方案三:使用javax.swing.text.DefaultEditorKit的write方法.自动处理解决方案四:bw.write("rn");解决方案五:3楼正解,也可以看println()里面封装的换行方法,以前我试过可以的解决方案六:引用3楼wula0010的回复: bw.write("rn"

Java记事本如何监听组合按键?

问题描述 Java记事本如何监听组合按键? RT 我想按下Ctrl+s来实现保存功能.该如何实现? 求大神指点12 解决方案 http://www.cnblogs.com/pandy/p/3594465.htmlhttp://bbs.csdn.net/topics/300206776 解决方案二: Jquery监听组合按键JQuery监听组合按键

java 如何保存、读取数据库字段为blob类型的值

问题描述 java 如何保存.读取数据库字段为blob类型的值 java 如何保存.读取javaBean中定义String类型,oracle数据库字段为blob类型的值 这是我的业务逻辑代码 try { String encoding = "GBK"; File file = new File("E:workspaceNeuSoft omcat7.0.40logslocalhost.2015-12-07.log"); if (file.isFile() &&

java 如何保存上传的pdf文件

问题描述 java 如何保存上传的pdf文件 前台jsp页面上传pdf文件,后台想保存到本地目录,java后台改如何实现? 解决方案 pdf也只是个文件,又不用打开与zip文件没区别 有个相似的问题可以解决你的问题 参考:CSDN移动问答 解决方案二: common-fileupload apache有这个开源jar包,你直接调用它就可以很容易完成上传的工作 解决方案三: jsp? 怎么不用struts2

一个Java记事本的源程序

/****************************************************************/ /* @(#)busyworkBook.java 1.0.0 2004-06-04 */ /* */ /* Email: pqdb123@yahoo.com.cn */ /* */ /* Copyright (c) 2004-2006 by ZhangYunFeng All Rights Reserved. */ /************************

java记事本

问题描述 大神指教,最近用java写记事本,怎么实现右键功能呢? 解决方案 本帖最后由 qitiandasheng987123 于 2015-01-05 22:04:39 编辑解决方案二:监听mousePressed事件,然后判断是否右键,如果是右键则弹出菜单.弹出菜单采用JPopupMenu就好了.解决方案三: 解决方案四:引用1楼rumlee的回复: 监听mousePressed事件,然后判断是否右键,如果是右键则弹出菜单.弹出菜单采用JPopupMenu就好了.

JAVA记事本中增加幻灯片功能

问题描述 我是初学者,编了一个记事本后,老师要求在里面加入幻灯片功能.要求如下:记事本中添加一个新菜单:名称为图片显示.用户可以选择放在磁盘目录中的图片文件,并显示.用户可以选择存放图片的目录,后记事本可以自动播放目录中的图片.以下是我记事本的一些代码,求助各位的帮助,万分感谢!importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.util.Date;importjava.util.Locale;importjava

VBA把记事本保存成为工作薄

  在一个文件夹中有数百个.txt文件,想将其另存为.xls文件,保存时文件名与原文件名相同;且将内容按空格分列(.txt文件中格式相同),使用VBA可以实现该功能,代码如下: Dim Fso, Fl Set Fso = CreateObject("Scripting.FileSystemObject") For Each Fl In Fso.getfolder(ThisWorkbook.Path & "").Files If Fl.Name <>

Java mongodb保存/读取应用实例详解

下面的例子是把User对象插入到Mongodb中,并读出来  代码如下 复制代码 User.java: package com.mongo;   public class User {  String name;  int age;  Oid _id;  public String getName() {   return name;  }  public void setName(String name) {   this.name = name;  }  public int getAge(