Fehlerhafter Code

  • 18 Antworten
  • Letztes Antwortdatum
Q

qweqwe21

Erfahrenes Mitglied
8
Hi ich wollte diesen code testen für eine APP aber ich bekomme einen Fehler gezeigt könnt ihr mir bitte helfen.
Code:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.security.SecureRandom;


public class ArraySpeichern {
	public static void main( String[] args) {
		
    SecureRandom random = new SecureRandom();

    int[][] array = new int[2][10]; {

    for( int i = 0 ; i < array.length ; i++ ) { 
       for ( int j = 0 ; j < array[i].length ; j++ ) { 
          array[i][j] = random.nextInt(10);
       }
	}
    }
    public void save(File file) {
    	try {
    	    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
    	        for (int i = 0; i < array.length; i++) {
    	             for (int j = 0; j < array[i].length; j++) {
    	                  writer.write(array[i][j] + ";");   //mit Komma getrennte Werte
    	              }
    	              writer.newLine(); // <-----------------
    	         }
    	         writer.close();
    	 
    	}
    	catch (IOException e) {
    	e.printStackTrace();
    	}
    }
}
}

Bitte helft mir.
 
in der Zeile
Code:
int[][] array = new int[2][10]; {
hast du am Schluss eine falsche öffnende Klammer und irgendwo (am Schluss?) wird vermutlich noch eine falsche schliessende Klammer sein
 
  • Danke
Reaktionen: qweqwe21
Wenn ich auf run drücke kommt:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
void is an invalid type for the variable save
Syntax error on token "(", ; expected
Syntax error on token ")", ; expected

at ArraySpeichern.main(ArraySpeichern.java:21)

und hier
Code:
public void save(File file) {
steht:

Multiple markers at this line
- Syntax error on token ")", ;
expected
- Syntax error on token "(", ;
expected
- void is an invalid type for the
variable save

Das meinte ich eigentlich ich weis das ist als normales java Programm ausgeführt man sieht es hier:
Code:
public static void main( String[] args) {

aber ich brauch es für eine App und ich weiß nicht wie man ein 2d array als txt speichert ich wollte es testen stimmt der code soweit das es ein txt speichert und wo wird dieses Textdokument gespeichert.
 
Code:
int[][] array = new int[2][10]; {       <--- ZUVIEL
for( int i = 0 ; i < array.length ; i++ ) { 
        for ( int j = 0 ; j < array[i].length ; j++ ) 
{            array[i][j] = random.nextInt(10);        
}     
}     
} <---- ZUVIEL

Wenn du die wegmachst sollte der code zumindest funktionieren.
 
  • Danke
Reaktionen: qweqwe21
Das funktioniert nicht
 
also hab kurz genauer geschaut. Die erste falsche Klammer ist wie gesagt diese hier:

Code:
int[][] array = new int[2][10]; [B]{[/B]

und die zweite falsche Klammer ist die allerletzte. Wenn alle Klammern stimmen, sollte es keine Parsing-Fehler mehr geben.

Durch die falschen Klammern kommt der Java-Parser irgendwann in einen falschen Kontext und versucht dann natürlich, den weiteren Code in eben diesem falschen Kontext zu interpretieren. Deshalb kommt es dann zu seltsamen Fehlern.
 
  • Danke
Reaktionen: qweqwe21
Das geht aber auch nicht dann kommt dieser Fehler:
Syntax error on token ";", { expected after this token bei
Code:
int[][] array = new int[2][10];
und immer noch dieser:
Multiple markers at this line
- Syntax error on token "(", ;
expected
- Syntax error on token ")", ;
expected
bei
Code:
public void save(File file) {
wenn ich dann hier
Code:
int[][] array = new int[2][10]; {
die Klammer mache kommt nur noch die zweite Fehlermeldung.





Übrigends denn code habe ich von hier:
http://www.tutorials.de/java/275850-array-eine-txt-schreiben.html
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    1,6 KB · Aufrufe: 235
Zuletzt bearbeitet:
du verwirrst mich ;) Im Bild sieht dein Code wieder ganz anders aus, da hast du keine main-Methode mehr.

Ich habs mal den Code aus deinem ursprünglichen Beitrag genommen und angepasst:

Code:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.security.SecureRandom;

public class LevelGenerator {

	private int[][] array = new int[2][10];

	public static void main(String[] args) {
		LevelGenerator levelGen = new LevelGenerator();
		File levelFile = new File("testLevel.txt");
		
		levelGen.createLevel();
		levelGen.save(levelFile);
	}

	public void createLevel() {
		SecureRandom random = new SecureRandom();

		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				array[i][j] = random.nextInt(10);
			}
		}
	}

	public void save(File file) {
		try {
			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
			for (int i = 0; i < array.length; i++) {
				for (int j = 0; j < array[i].length; j++) {
					writer.write(array[i][j] + ";"); // mit Komma getrennte Werte
				}
				writer.newLine(); // <-----------------
			}
			writer.close();

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Was ich geändert habe:
  1. Klammern richtig gesetzt
  2. Den Code zum Level generieren von main in createLevel verschoben
  3. Array-Deklaration als Instanz-Variable statt lokaler Variable
  4. main ruft zuerst createLevel und dann save auf
  5. in deinem Projekt-Verzeichnis wird ein testLevel.txt erzeugt mit dem gespeicherten Level

Wenn du das ganze startest, sollte danach die Datei erstellt werden. Wenn du dann Rechtsklick -> Refresh bei deinem Projekt machst, solltest du die Datei auch in Eclipse sehen können
 
  • Danke
Reaktionen: qweqwe21
Vielen vielen dank ich teste es noch aber wirklich danke das du so hilfsbereit bist.

Es tut mir leid das ich unterschiedliche codes gepostet habe ich lerne gerade zu programmieren und hab heute wirklich viel gelesen und probiert dadurch habe ich etwas vertauscht.
Wenn du mal Hilfe brauchst und ich kann dir helfen werde ich es auf jeden Fall tun.

Eine off topic Frage habe ich und zwar du kennst dich ja gut aus programmierst du zum Hobby oder als Beruf , dass interessiert mich weil es viele gute Programmierer hier im forum gibt und ich mich Frage ob das nur ihr Hobby ist oder der Beruf.

Und nochmals Danke für die Mühe
Kannst du mir irgendwelche Tutorials oder Bücher für Java oder Android empfehlen womit du gelernt hast, weil ich in einigen Jahren Programmierer werden möchte ich weiß aber auch noch nicht welchen weg ob Studium oder Ausbildung.

Mit freundlichen Grüßen

Nicolas
 
Kauf dir nen gutes Java Grundlagen Buch und vergiss erst mal Android ;) als Nachschlagewerk kann ich die Java Insel empfehlen, zum lernen meines Erachtens nicht sinnvoll obwohl es Kein besseres Buch gibt ;).
Android lernt man wohl am besten mit Googles dev Seite.

Oder man lernen programmieren halt in der schule /Studium /Ausbildung.

LG. Dagobert

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
  • Danke
Reaktionen: qweqwe21
Okay Danke.
Der Code funktioniert jetzt.
 
Zuletzt bearbeitet:
Bitte was? :D
Kennste das: , . " ; ? ! usw? :D

lg. Dagobert
 
Wo wird die datei Gespeichert wenn ich es auf dem Handy versuche?
Wenn ich die App ausführe wird kein Textdokument erstellt.
Liegt es daran das ich die LevelGenerator Klasse erst noch in z.B der SampleGame Klasse aufrufen muss?
 
Zuletzt bearbeitet:
qweqwe21 schrieb:
Eine off topic Frage habe ich und zwar du kennst dich ja gut aus programmierst du zum Hobby oder als Beruf , dass interessiert mich weil es viele gute Programmierer hier im forum gibt und ich mich Frage ob das nur ihr Hobby ist oder der Beruf.

Ich mach das mittlerweile beruflich, davor habe ich ein IT-Studium gemacht und vorher eine Ausbildung zum Applikationsentwickler.

Wichtig beim programmieren ist es, erst mal die Grundlagen sauber zu lernen. Variablen, Arrays, Schleifen, If-Else... Diese Dinge brauchst du in jedem Programm. Wenn man das nicht auswendig kann, kommt man sehr schnell zu Problemen.

Ausserdem werden Android-Apps ja in Java entwicklet. Java ist eine objektorientierte Programmiersprache, deshalb hilft es auch viel, die Prinzipien der objektorientierten Entwicklung zu kennen und anwenden zu können. Klassen/Objekte, Vererbung, Daten-Kapselung, Polymorphie, Exceptions..

Ausserdem kommt dadurch, dass du direkt etwas für Android programmieren willst, nochmals eine Stufe dazu. Jetzt musst du nämlich noch die Android-spezifischen Dinge lernen. Und alles auf einmal ist halt nicht einfach, deshalb hat DagobertDokate auch gesagt, du sollst Android erstmal weglassen. Wenn das Programm nämlich mal auf deinem PC läuft, kannst du dich danach in Ruhe darum kümmern, das ganze auf Android zum laufen zu bringen. Die Programmiersprache ist ja dieselbe und viel Code wirst du genau so übernehmen können, wie du ihn dann schon hast.

Lass dich aber davon nicht zu sehr abschrecken, es ist nämlich immer gut, wenn man ein Projekt/Ziel hat, das man erreichen will. Versuch einfach, in kleinen Schritten darauf zuzugehen und dabei das gelernte auch gleich zu verstehen.

Bei deinem Level Generator zum Beispiel so:
  1. Schleifen verstehen / selber anwenden können
  2. Arrays verstehen / selber anwenden können
  3. Beides kombinieren, um ein Array mit den Schleifen zu füllen

Schritt 1 und 2 ist die Lernphase, und mit Schritt 3 kannst du dir selber dann beweisen, dass du das vorherige verstanden hast. So hast du zwei der grundlegensten Konstrukte der Programmierung (Schleifen, Arrays) verstanden und gleich noch einen Teil deines Projekts entwickelt :smile:

qweqwe21 schrieb:
Kannst du mir irgendwelche Tutorials oder Bücher für Java oder Android empfehlen womit du gelernt hast
Java habe ich hauptsächlich im Studium und Beruf gelernt, Bücher habe ich da nie gekauft. Vieles kannte ich auch schon von anderen Programmiersprachen, viele sind sich da ja sehr ähnlich. Heutzutage lerne ich viel mit den offiziellen Dokumentationen oder gezieltes Suchen im Internet ;)

Was ich bei Java kenne:
  1. Galileo Computing :: Java ist auch eine Insel - index

Für Android sind meine häufigsten Plattformen:
  1. developer.android.com
  2. Stack Overflow
 
Okay vielen danke.

Ich habe es jetzt endlich geschafft.
:scared::scared::scared:

Aber jetzt weiß ich nicht wie man es wieder einliest und es dabei zu einem String konvertiert.
Das hab ich bis jetzt:

LevelGenerator Klasse
Code:
public class LevelGenerator {
    public static String map;
    
    public static void save(FileIO files) {
        int[][] array = new int[10][10];
        SecureRandom random = new SecureRandom();

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                array[i][j] = random.nextInt(10);
                BufferedWriter out = null;
                try {

                    // Writes a file called .savedata to the SD Card
                    out = new BufferedWriter(new OutputStreamWriter(
                            files.writeFile(".savesample")));
                    for (int i1 = 0; i1 < array.length; i1++) {
                        for (int j1 = 0; j1 < array[i1].length; j1++) {
                            out.write(array[i1][j1] + "");
                        }
                        out.newLine();
                    }
                    out.close();

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }    
    }
    public static void load(FileIO files) {
        BufferedReader in = null;
        try {
            // liest die Datei .savedata
            in = new BufferedReader(new InputStreamReader(
                    files.readFile(".savesample")));

            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < 10; j++) {
                map = (in.readLine());
                }
            }
        } catch (IOException e) {

        } catch (NumberFormatException e) {

        } finally {
            try {
                if (in != null)
                    in.close();
            } catch (IOException e) {
            }
        }
    }
}
SampleGame Klasse

Code:
public class SampleGame extends AndroidGame {

    boolean firstTimeCreate = true;

    @Override
    public Screen getInitScreen() {

        if (firstTimeCreate) {
            Assets.load(this);
            firstTimeCreate = false;
        }
        LevelGenerator.load(getFileIO());

        return new SplashLoadingScreen(this);

    }
MainMenuScreen Klasse

Code:
public class MainMenuScreen extends Screen {
    public MainMenuScreen(Game game) {
        super(game);
    }

    @Override
    public void update(float deltaTime) {
        Graphics g = game.getGraphics();
        List<TouchEvent> touchEvents = game.getInput().getTouchEvents();

        int len = touchEvents.size();
        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);
            if (event.type == TouchEvent.TOUCH_UP) {
                LevelGenerator.save(game.getFileIO()); 
                if (inBounds(event, 50, 350, 250, 450)) {
                    game.setScreen(new GameScreen(game));
                }

            }
        }
    }
GameScreen Klasse

Code:
public class GameScreen extends Screen {
    enum GameState {
        Ready, Running, Paused, GameOver
    }

    GameState state = GameState.Ready;

    // Variablen Einstellungen

    private static Background bg1, bg2;
    private static Robot robot;
    public static Heliboy hb, hb2;
    public static LevelGenerator levelGen;

    private Image currentSprite, character, character2, character3, heliboy,
            heliboy2, heliboy3, heliboy4, heliboy5;
    private Animation anim, hanim;

    private ArrayList<Tile> tilearray = new ArrayList<Tile>();

    int livesLeft = 1;
    Paint paint, paint2;

    public GameScreen(Game game) {
        super(game);

        // Spielobjekte werden hier initialisiert

        bg1 = new Background(0, 0);
        bg2 = new Background(2160, 0);
        robot = new Robot();
        hb = new Heliboy(340, 360);
        hb2 = new Heliboy(700, 360);

        character = Assets.character;
        character2 = Assets.character2;
        character3 = Assets.character3;

        heliboy = Assets.heliboy;
        heliboy2 = Assets.heliboy2;
        heliboy3 = Assets.heliboy3;
        heliboy4 = Assets.heliboy4;
        heliboy5 = Assets.heliboy5;

        anim = new Animation();
        anim.addFrame(character, 1250);
        anim.addFrame(character2, 50);
        anim.addFrame(character3, 50);
        anim.addFrame(character2, 50);

        hanim = new Animation();
        hanim.addFrame(heliboy, 100);
        hanim.addFrame(heliboy2, 100);
        hanim.addFrame(heliboy3, 100);
        hanim.addFrame(heliboy4, 100);
        hanim.addFrame(heliboy5, 100);
        hanim.addFrame(heliboy4, 100);
        hanim.addFrame(heliboy3, 100);
        hanim.addFrame(heliboy2, 100);

        currentSprite = anim.getImage();

        loadMap();

        // Definieren der Objekte zum Zeichnen
        paint = new Paint();
        paint.setTextSize(30);
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);

        paint2 = new Paint();
        paint2.setTextSize(100);
        paint2.setTextAlign(Paint.Align.CENTER);
        paint2.setAntiAlias(true);
        paint2.setColor(Color.WHITE);

    }

    private void loadMap() {
        ArrayList lines = new ArrayList();
        int width = 0;
        int height = 0;

        Scanner scanner = new Scanner(LevelGenerator.map);
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();

            // Keine weiteren Zeilen
            if (line == null) {
                break;
            }

            if (!line.startsWith("!")) {
                lines.add(line);
                width = Math.max(width, line.length());

            }
        }
        height = lines.size();

        for (int j = 0; j < 12; j++) {
            String line = (String) lines.get(j);
            for (int i = 0; i < width; i++) {

                if (i < line.length()) {
                    char ch = line.charAt(i);
                    Tile t = new Tile(i, j, Character.getNumericValue(ch));
                    tilearray.add(t);
                }

            }
        }

    }
Tile Klasse

Code:
public class Tile {

    private int tileX, tileY, speedX;
    public int type;
    public Image tileImage;

    private Robot robot = GameScreen.getRobot();
    private Background bg = GameScreen.getBg1();

    private Rect r;

    public Tile(int x, int y, int typeInt) {
        tileX = x * 40;
        tileY = y * 40;

        type = typeInt;

        r = new Rect();

        if (type == 5) {
            tileImage = Assets.tiledirt;
        } else if (type == 8) {
            tileImage = Assets.tilegrassTop;
        } else if (type == 4) {
            tileImage = Assets.tilegrassLeft;

        } else if (type == 6) {
            tileImage = Assets.tilegrassRight;

        } else if (type == 2) {
            tileImage = Assets.tilegrassBot;
        } else {
            type = 0;
        }

    }
 
Zuletzt bearbeitet:
Weis keiner weiter?
 
Bestimmt weiß jemand weiter.. Aber du solltest erst mal die basics lernen anstatt hier für jeden Firlefanz zu fragen ;)

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Okay ich weiß ich wollte nur noch das eine wissen, ich hoffe dass ich das noch schaffe, weil ich in ca
2 Wochen in dem Urlaub gehe und da werde ich dann das Buch Programmieren lernen mit Java lese und noch das openbook Java ist auch eine Insel und auch noch das training von Android Developer, ich denke danach sollte ich es eigentlich gut können.


Ich versuche jetzt ein txt namens test.txt, von der SD Card zu laden aber irgendwie kommen dann keine Felder und der Roboter fällt runter, dann kommt Game Over. Bis jetzt bin ich soweit:
GameScreen Klasse:

Code:
public class GameScreen extends Screen {
    enum GameState {
        Ready, Running, Paused, GameOver
    }

    GameState state = GameState.Ready;

    // Variablen Einstellungen

    private static Background bg1, bg2;
    private static Robot robot;
    public static Heliboy hb, hb2;

    private Image currentSprite, character, character2, character3, heliboy,
            heliboy2, heliboy3, heliboy4, heliboy5;
    private Animation anim, hanim;

    private ArrayList<Tile> tilearray = new ArrayList<Tile>();

    int livesLeft = 1;
    Paint paint, paint2;

    public GameScreen(Game game) {
        super(game);
        LevelGenerator.load(game.getFileIO());
        LevelGenerator.save(game.getFileIO());
        // Spielobjekte werden hier initialisiert

        bg1 = new Background(0, 0);
        bg2 = new Background(2160, 0);
        robot = new Robot();
        hb = new Heliboy(340, 360);
        hb2 = new Heliboy(700, 360);

        character = Assets.character;
        character2 = Assets.character2;
        character3 = Assets.character3;

        heliboy = Assets.heliboy;
        heliboy2 = Assets.heliboy2;
        heliboy3 = Assets.heliboy3;
        heliboy4 = Assets.heliboy4;
        heliboy5 = Assets.heliboy5;

        anim = new Animation();
        anim.addFrame(character, 1250);
        anim.addFrame(character2, 50);
        anim.addFrame(character3, 50);
        anim.addFrame(character2, 50);

        hanim = new Animation();
        hanim.addFrame(heliboy, 100);
        hanim.addFrame(heliboy2, 100);
        hanim.addFrame(heliboy3, 100);
        hanim.addFrame(heliboy4, 100);
        hanim.addFrame(heliboy5, 100);
        hanim.addFrame(heliboy4, 100);
        hanim.addFrame(heliboy3, 100);
        hanim.addFrame(heliboy2, 100);

        currentSprite = anim.getImage();

        loadMap();

        // Definieren der Objekte zum Zeichnen
        paint = new Paint();
        paint.setTextSize(30);
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);

        paint2 = new Paint();
        paint2.setTextSize(100);
        paint2.setTextAlign(Paint.Align.CENTER);
        paint2.setAntiAlias(true);
        paint2.setColor(Color.WHITE);

    }

    private void loadMap() {
        ArrayList lines = new ArrayList();
        int width = 0;
        int height = 0;

        Scanner scanner = new Scanner(SampleGame.map);
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();

            // Keine weiteren Zeilen
            if (line == null) {
                break;
            }

            if (!line.startsWith("!")) {
                lines.add(line);
                width = Math.max(width, line.length());

            }
        }
        height = lines.size();

        for (int j = 0; j < height; j++) {
            String line = (String) lines.get(j);
            for (int i = 0; i < width; i++) {

                if (i < line.length()) {
                    char ch = line.charAt(i);
                    Tile t = new Tile(i, j, Character.getNumericValue(ch));
                    tilearray.add(t);
                }

            }
        }

    }

    @Override
    public void update(float deltaTime) {
        List<TouchEvent> touchEvents = game.getInput().getTouchEvents();

        // WHier haben wir 4 verschiedene update()-Methoden
        // Je nach Spielstand rufen wir eine der 3 auf.
        // Im dritten Kapitel haben wir schon ähnliches getan.

        if (state == GameState.Ready)
            updateReady(touchEvents);
        if (state == GameState.Running)
            updateRunning(touchEvents, deltaTime);
        if (state == GameState.Paused)
            updatePaused(touchEvents);
        if (state == GameState.GameOver)
            updateGameOver(touchEvents);
    }

    private void updateReady(List<TouchEvent> touchEvents) {

        // Wenn wir den Bildschirm berühren startet das Spiel

        if (touchEvents.size() > 0)
            state = GameState.Running;
    }

    private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) {

        // Hier das ist Identisch mit Kapitel 2 und 3.

        // 1. Touch Eingaben werden hier verarbeitet:
        int len = touchEvents.size();
        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);
            if (event.type == TouchEvent.TOUCH_DOWN) {

                if (inBounds(event, 0, 285, 65, 65)) {
                    robot.jump();
                    currentSprite = anim.getImage();
                    robot.setDucked(false);
                }

                else if (inBounds(event, 0, 350, 65, 65)) {

                    if (robot.isDucked() == false && robot.isJumped() == false
                            && robot.isReadyToFire()) {
                        robot.shoot();
                    }
                }

                else if (inBounds(event, 0, 415, 65, 65)
                        && robot.isJumped() == false) {
                    currentSprite = Assets.characterDown;
                    robot.setDucked(true);
                    robot.setSpeedX(0);

                }

                if (event.x > 400) {

                    robot.moveRight();
                    robot.setMovingRight(true);

                }

            }

            if (event.type == TouchEvent.TOUCH_UP) {

                if (inBounds(event, 0, 415, 65, 65)) {
                    currentSprite = anim.getImage();
                    robot.setDucked(false);

                }

                if (inBounds(event, 0, 0, 35, 35)) {
                    pause();

                }

                if (event.x > 400) {

                    robot.stopRight();
                }
            }

        }

        // 2. Hier wird überprüft ob unser Roboter noch lebt.

        if (livesLeft == 0) {
            state = GameState.GameOver;
        }

        // 3. Hier werden alle update()-Methoden des Spiels gehandhabt.
        robot.update();
        if (robot.isJumped()) {
            currentSprite = Assets.characterJump;
        } else if (robot.isJumped() == false && robot.isDucked() == false) {
            currentSprite = anim.getImage();
        }

        ArrayList projectiles = robot.getProjectiles();
        for (int i = 0; i < projectiles.size(); i++) {
            Projectile p = (Projectile) projectiles.get(i);
            if (p.isVisible() == true) {
                p.update();
            } else {
                projectiles.remove(i);
            }
        }

        updateTiles();
        hb.update();
        hb2.update();
        bg1.update();
        bg2.update();
        animate();

        if (robot.getCenterY() > 500) {
            state = GameState.GameOver;
        }
    }

    private boolean inBounds(TouchEvent event, int x, int y, int width,
            int height) {
        if (event.x > x && event.x < x + width - 1 && event.y > y
                && event.y < y + height - 1)
            return true;
        else
            return false;
    }

    private void updatePaused(List<TouchEvent> touchEvents) {
        int len = touchEvents.size();
        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);
            if (event.type == TouchEvent.TOUCH_UP) {
                if (inBounds(event, 0, 0, 800, 240)) {

                    if (!inBounds(event, 0, 0, 35, 35)) {
                        resume();
                    }
                }

                if (inBounds(event, 0, 240, 800, 240)) {
                    nullify();
                    goToMenu();
                }
            }
        }
    }

    private void updateGameOver(List<TouchEvent> touchEvents) {
        int len = touchEvents.size();
        for (int i = 0; i < len; i++) {
            TouchEvent event = touchEvents.get(i);
            if (event.type == TouchEvent.TOUCH_DOWN) {
                if (inBounds(event, 0, 0, 800, 480)) {
                    nullify();
                    game.setScreen(new MainMenuScreen(game));
                    return;
                }
            }
        }

    }

    private void updateTiles() {

        for (int i = 0; i < tilearray.size(); i++) {
            Tile t = (Tile) tilearray.get(i);
            t.update();
        }

    }

    @Override
    public void paint(float deltaTime) {
        Graphics g = game.getGraphics();

        g.drawImage(Assets.background, bg1.getBgX(), bg1.getBgY());
        g.drawImage(Assets.background, bg2.getBgX(), bg2.getBgY());
        paintTiles(g);

        ArrayList projectiles = robot.getProjectiles();
        for (int i = 0; i < projectiles.size(); i++) {
            Projectile p = (Projectile) projectiles.get(i);
            g.drawRect(p.getX(), p.getY(), 10, 5, Color.YELLOW);
        }
        // Als erstes werden die Spielelemente gezeichnet.

        g.drawImage(currentSprite, robot.getCenterX() - 61,
                robot.getCenterY() - 63);
        g.drawImage(hanim.getImage(), hb.getCenterX() - 48,
                hb.getCenterY() - 48);
        g.drawImage(hanim.getImage(), hb2.getCenterX() - 48,
                hb2.getCenterY() - 48);

        // Beispiel:
        // g.drawImage(Assets.background, 0, 0);
        // g.drawImage(Assets.character, characterX, characterY);

        // Als zweites werden die UI Elemente gezeichnet.
        if (state == GameState.Ready)
            drawReadyUI();
        if (state == GameState.Running)
            drawRunningUI();
        if (state == GameState.Paused)
            drawPausedUI();
        if (state == GameState.GameOver)
            drawGameOverUI();

    }

    private void paintTiles(Graphics g) {
        for (int i = 0; i < tilearray.size(); i++) {
            Tile t = (Tile) tilearray.get(i);
            if (t.type != 0) {
                g.drawImage(t.getTileImage(), t.getTileX(), t.getTileY());
            }
        }
    }

    public void animate() {
        anim.update(10);
        hanim.update(50);
    }

    private void nullify() {

        // Hier werden alle Variablen gleich null gesetzt, wir bearbeiten sie im Konstrukur
        paint = null;
        bg1 = null;
        bg2 = null;
        robot = null;
        hb = null;
        hb2 = null;
        currentSprite = null;
        character = null;
        character2 = null;
        character3 = null;
        heliboy = null;
        heliboy2 = null;
        heliboy3 = null;
        heliboy4 = null;
        heliboy5 = null;
        anim = null;
        hanim = null;

        // Speicheraufräumen.
        System.gc();

    }

    private void drawReadyUI() {
        Graphics g = game.getGraphics();

        g.drawARGB(155, 0, 0, 0);
        g.drawString("Tap to Start.", 400, 240, paint);

    }

    private void drawRunningUI() {
        Graphics g = game.getGraphics();
        g.drawImage(Assets.button, 0, 285, 0, 0, 65, 65);
        g.drawImage(Assets.button, 0, 350, 0, 65, 65, 65);
        g.drawImage(Assets.button, 0, 415, 0, 130, 65, 65);
        g.drawImage(Assets.button, 0, 0, 0, 195, 35, 35);

    }

    private void drawPausedUI() {
        Graphics g = game.getGraphics();
        // Bildschirm wird abgedunkelt für Pause
        g.drawARGB(155, 0, 0, 0);
        g.drawString("Resume", 400, 165, paint2);
        g.drawString("Menu", 400, 360, paint2);

    }

    private void drawGameOverUI() {
        Graphics g = game.getGraphics();
        g.drawRect(0, 0, 1281, 801, Color.BLACK);
        g.drawString("GAME OVER.", 400, 240, paint2);
        g.drawString("Tap to return.", 400, 290, paint);

    }

    @Override
    public void pause() {
        if (state == GameState.Running)
            state = GameState.Paused;

    }

    @Override
    public void resume() {
        if (state == GameState.Paused)
            state = GameState.Running;
    }

    @Override
    public void dispose() {

    }

    @Override
    public void backButton() {
        pause();
    }

    private void goToMenu() {
        // TODO Auto-generated method stub
        game.setScreen(new MainMenuScreen(game));

    }

    public static Background getBg1() {
        // TODO Auto-generated method stub
        return bg1;
    }

    public static Background getBg2() {
        // TODO Auto-generated method stub
        return bg2;
    }

    public static Robot getRobot() {
        // TODO Auto-generated method stub
        return robot;
    }

}

SampleGame Klasse

Code:
public class SampleGame extends AndroidGame {

    public static String map;
    boolean firstTimeCreate = true;

    @Override
    public Screen getInitScreen() {

        if (firstTimeCreate) {
            Assets.load(this);
            firstTimeCreate = false;
        }
        LevelGenerator.load(getFileIO());
        LevelGenerator.save(getFileIO());
        
        map = convertStreamToString();
        return new SplashLoadingScreen(this);

    }

    @Override
    public void onBackPressed() {
        getCurrentScreen().backButton();
    }

    private static String convertStreamToString() {
    InputStream inputStream = null;
    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();
try {
    // read this file into InputStream
    inputStream = new FileInputStream("test.txt");

    br = new BufferedReader(new InputStreamReader(inputStream));
    
    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line);
        sb.append("\n");
    }
    
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("Fertig");
    return sb.toString();   
}
    
    @Override
    public void onResume() {
        super.onResume();

        Assets.theme.play();

    }

    @Override
    public void onPause() {
        super.onPause();
        Assets.theme.pause();

    }
    
    
}
 
Zuletzt bearbeitet:
Ich habe es jetzt geschafft.
 
Zurück
Oben Unten