РЕДАКТИРОВАТЬ: Неважно, я просто невероятно тупой, он работает абсолютно нормально, я просто испортил при вызове метода, я заставил его работать только в условиях, которые не могут быть выполнены в тот момент, все же я хотел бы любитьчтобы узнать, сделали бы вы это так, как я, или использовали бы другой способ
Извините, я знаю, что этот вопрос задавали бесчисленное количество раз, но я не смог найти разницу междуздесь и у меня есть вещи, которые не работают.
Кроме того, если есть лучший способ добиться того, что я пытаюсь сделать, скажите мне, я сейчас изучаю Java в школе, поэтому яЯ далек от понимания того, что я делаю ...
Итак, моя проблема, мы должны были создать игру для класса, я решил сделать Pacman, и она работает просто отлично.Единственное, что я хочу изменить, - это возможность сохранять и загружать созданные вами уровни, и я подумал, что собираюсь сделать это, сохранив их в файлах.
Теперь мой уровень состоит из квадратов, которые я назвал «FELD».Вот как это выглядит:
import java.io.Serializable;
public class FELD implements Serializable
{
private static final long serialVersionUID = 1L;
public int inhalt, inhaltneu; //content, 0=wall, 1=food, 2=empty 3=start
public int x, y;
public static int groesse; //size of the square
public FELD(int a, int b)
{
x=a*groesse;
y=b*groesse;
PACMAN.zf.zeichneRechteck(x, y, groesse, groesse); //draws a rectangle using a class we have to use in school
inhalt=0;
}
}
Я оставил два других метода, потому что они не должны быть важны для этого.
Теперь, чтобы сохранить их, я создал класс под названием "LEVELFILE ":
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;;
public class LEVELFILE
{
public FELD[][] lvl;
public LEVELFILE()
{
}
public boolean speichern(FELD[][] a) {
lvl=a;
String name="lvl1.ser";
try {
FileOutputStream fos = new FileOutputStream(name);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(lvl);
oos.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
PACMAN.zf.fuelleRechteck(0, 0, 100, 100, "rot"); //draws a red rectangle to tell me it's done saving, works
return true;
}
public FELD[][] ladenlvl1() {
String name="lvl1.ser";
try {
FileInputStream fis = new FileInputStream(name);
ObjectInputStream ois = new ObjectInputStream(fis);
lvl = (FELD[][]) ois.readObject();
ois.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
PACMAN.zf.fuelleRechteck(0, 0, 100, 100, "gruen"); //draws a green rectangle to tell me it's done loading, doesn't happen
return lvl;
}
}
Итак, несколько вещей, во-первых, можно ли просто сказать oos.writeObject (lvl), когда lvl является двумерным массивом?
То же самоевещь для чтения, это нормально?
Кроме того, что это за printStackTrace () ;?Я обнаружил это здесь несколько раз, поэтому я просто скопировал его, но что он на самом деле делает?
Поскольку я не получаю зеленый прямоугольник, программа должна рисовать, я думаю, что она как-то застревает,но я не знаю, где это будет.Это то, на что я надеялся, что вы, ребята, могли бы сказать мне.
Кроме того, если вы знаете лучший / более простой способ сохранения моих уровней в файл, пожалуйста, скажите мне, как я уже сказал, я далеконичего не зная об этом.
И, так как это проект, которым мы занимались в школе, я сначала спросил моего учителя, но он сказал, что он никогда раньше не использовал ObjectOutputStream и ObjectInputStream, поэтому он не можетпомоги мне, вот почему я сейчас здесь.