2D游戏中的地图通常用二维数组来表示:
假如一幅地图由以下的几种基本的块组成:
1 2 3 4 5 6 7 8 9
有如下10 × 30的二维数组:
short map[][] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 6, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0 },
{ 0, 0, 0, 0, 5, 6, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 0, 0, 0, 0, 3, 4, 0, 0, 0, 3, 1, 1, 1, 8, 2, 2,
2, 2, 2, 7, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 2, 2, 2, 2, 7, 8, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
请写程序完成如下功能:
1.把二维数组保存到指定文件(例如level0.map)。
2.从文件中加载(读取)二维数组,并打印。
文件格式如下:
4byte 4byte nbyte
行数(int型) 列数(int型) 数组数据(每个元素都是short型)
下面是我写的代码import java.io.FileOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.FileNotFoundException;
import java.io.EOFException ;
import java.io.IOException;
public class TestTwo{
public static void main(String[] args){
short map[][] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 6, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0 },
{ 0, 0, 0, 0, 5, 6, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 0, 0, 0, 0, 3, 4, 0, 0, 0, 3, 1, 1, 1, 8, 2, 2,
2, 2, 2, 7, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 2, 2, 2, 2, 7, 8, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
}; DataOutputStream dataOutput = null;
DataInputStream dataInput = null;
try{
dataOutput = new DataOutputStream(new FileOutputStream("level10.map"));
dataInput = new DataInputStream(new FileInputStream("level10.map"));
dataOutput.writeInt(10);
dataOutput.writeInt(30);
for(int i=0;i<10;++i)
for(int j=0;j<30;++j)
{
dataOutput.writeShort(map[i][j]);
dataOutput.flush();
}
int c1,c2;
short c;
int i = 1;
c1 = dataInput.readInt();
c2 = dataInput.readInt();
try{ while((c = dataInput.readShort())!= -1){
System.out.print(c);
if(i % 30 == 0)
System.out.println();
++i;
}
}catch(EOFException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
dataOutput.close();
dataInput.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
}
}
运行结果如下:
F:\ >javac TestTwo.javaF:\ >java TestTwo
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000522260000000000000000
000000000311140000000000000000
000000000311140000052222222600
000056000311140000031111111400
000034000311182222271111111400
222278222111111111111111111822
111111111111111111111111111111
java.io.EOFException
at java.io.DataInputStream.readShort(DataInputStream.java:298)
at TestTwo.main(TestTwo.java:69)我明明在红色部分捕捉了文件结束异常,为什么还有这个错误呢?
请大家帮忙看一下子!!!
假如一幅地图由以下的几种基本的块组成:
1 2 3 4 5 6 7 8 9
有如下10 × 30的二维数组:
short map[][] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 6, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0 },
{ 0, 0, 0, 0, 5, 6, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 0, 0, 0, 0, 3, 4, 0, 0, 0, 3, 1, 1, 1, 8, 2, 2,
2, 2, 2, 7, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 2, 2, 2, 2, 7, 8, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
请写程序完成如下功能:
1.把二维数组保存到指定文件(例如level0.map)。
2.从文件中加载(读取)二维数组,并打印。
文件格式如下:
4byte 4byte nbyte
行数(int型) 列数(int型) 数组数据(每个元素都是short型)
下面是我写的代码import java.io.FileOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.DataInputStream;
import java.io.FileNotFoundException;
import java.io.EOFException ;
import java.io.IOException;
public class TestTwo{
public static void main(String[] args){
short map[][] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 6, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 5, 2, 2, 2, 2, 2, 2, 2, 6, 0, 0 },
{ 0, 0, 0, 0, 5, 6, 0, 0, 0, 3, 1, 1, 1, 4, 0, 0,
0, 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 0, 0, 0, 0, 3, 4, 0, 0, 0, 3, 1, 1, 1, 8, 2, 2,
2, 2, 2, 7, 1, 1, 1, 1, 1, 1, 1, 4, 0, 0 },
{ 2, 2, 2, 2, 7, 8, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 2, 2 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
}; DataOutputStream dataOutput = null;
DataInputStream dataInput = null;
try{
dataOutput = new DataOutputStream(new FileOutputStream("level10.map"));
dataInput = new DataInputStream(new FileInputStream("level10.map"));
dataOutput.writeInt(10);
dataOutput.writeInt(30);
for(int i=0;i<10;++i)
for(int j=0;j<30;++j)
{
dataOutput.writeShort(map[i][j]);
dataOutput.flush();
}
int c1,c2;
short c;
int i = 1;
c1 = dataInput.readInt();
c2 = dataInput.readInt();
try{ while((c = dataInput.readShort())!= -1){
System.out.print(c);
if(i % 30 == 0)
System.out.println();
++i;
}
}catch(EOFException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
dataOutput.close();
dataInput.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
}
}
运行结果如下:
F:\ >javac TestTwo.javaF:\ >java TestTwo
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000
000000000522260000000000000000
000000000311140000000000000000
000000000311140000052222222600
000056000311140000031111111400
000034000311182222271111111400
222278222111111111111111111822
111111111111111111111111111111
java.io.EOFException
at java.io.DataInputStream.readShort(DataInputStream.java:298)
at TestTwo.main(TestTwo.java:69)我明明在红色部分捕捉了文件结束异常,为什么还有这个错误呢?
请大家帮忙看一下子!!!
try{ while((c = dataInput.readShort())!= -1){
System.out.print(c);
if(i % 30 == 0)
System.out.println();
++i;
}
catch(EOFException e){
//把这句注释掉
//e.printStackTrace();
System.out.println("你丫的我捕获了你吧");
}catch(IOException e){
e.printStackTrace();
}