Pomoc przy przerobieniu

0

Witam wszystkich.

Mam mały problem z java me. Otóż znalazłem w sieci jak napisać grę platformową. Wszystko ładnie, ale natknąłem się na problem przy operacji na plikach. Kod wygląda jakby był pisany na zwykłą jave a nie na j2me, gdyż w java.io.* nie ma BufferedReader. I tu moja prośba. Czy można przerobić kod tak, aby nadawał się do J2ME?

import java.io.*;
public class EdytorPlansz {
    private static short wShort(String s)
    {
        short wynik = 0;
        try
        {
            wynik = Short.parseShort(s);
        }
        catch (NumberFormatException e)
        {
            wynik = Short.MAX_VALUE;
        }
         return wynik;
    }
    private static short zapisz(String tekst, BufferedReader wej,DataOutputStream wyj) throws IOException
    {
        System.out.println(tekst);
        short b;
        do
        {
            String temp = wej.readLine();
            b = wShort(temp);
        } while (b==Short.MIN_VALUE);
        wyj.writeShort(b);
        return b;
    }
    public static void main(String[] args)
    {
        DataOutputStream wyj;
        String nazwa = "";
        try
        {
            BufferedReader wej = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Podaj nazwe wejsciowego pliku:");
            nazwa = wej.readLine();
            wyj = newDataOutputStream(new FileOutputStream(nazwa));
            zapisz("Podaj X poczatkowe",wej,wyj);
            zapisz("Podaj Y poczatkowe",wej,wyj);
            zapisz("Podaj X koncowe",wej,wyj);
            zapisz("Podaj Y koncowe",wej,wyj);
            short szerokosc = zapisz("Podaj szerokosc ekranu:",wej,wyj);
            short wysokosc = zapisz("Podaj wysokosc ekranu:",wej,wyj);
            short duzeX = zapisz("Podaj liczbe elementow planszy w poziomie:",wej,wyj);
            short duzeY = zapisz("Podaj liczbe elementow planszy w pionie:",wej,wyj);
            wyj.writeShort((duzeX*WYMIAR_PL/szerokosc)+1);
            wyj.writeShort((duzeY*WYMIAR_PL/wysokosc)+1);
            zapisz("Podaj X poczatkowej planszy:",wej,wyj);
            zapisz("Podaj Y poczatkowej planszy:",wej,wyj);
            for(int i=0;i<duzeY;i++)
                for(int j=0;j<duzeX;j++)
                    zapisz("Podaj rodzaj elementu planszy dla elementu o wspolrzednych ("+j+","+i+")",wej,wyj);
            short liczba = zapisz("Podaj liczbe potworkow:",wej,wyj);
            for(int i=0;i<liczba;i++)
            {
                short b1 = zapisz("Podaj X poczatkowe potworka",wej,wyj);
                short b2 = zapisz("Podaj X koncowe potworka",wej,wyj);
                short by = zapisz("Podaj Y potworka:",wej,wyj);
                if(b1<b2)
                wyj.writeShort(1);
                else
                wyj.writeShort(0);
                short planszaX = (short)((b1*WYMIAR_PL/szerokosc)+1);
                short planszaY = (short)((by*WYMIAR_PL/wysokosc)+1);
                wyj.writeShort(planszaX);
                wyj.writeShort(planszaY);
             }
            wej.close();
            wyj.close();
        }
        catch(Exception e)
        {
            if (nazwa!=null)
            {
                File f = new File(nazwa);
                if (f.exists())
                    f.delete();
           }
        }
    }
    private static final int WYMIAR_PL = 16;

}

Z góry wielkie dzięki.

0

Sprawdź

 


import java.io.*;
public class EdytorPlansz {
    private static short wShort(String s)
    {
        short wynik = 0;
        try
        {
            wynik = Short.parseShort(s);
        }
        catch (NumberFormatException e)
        {
            wynik = Short.MAX_VALUE;
        }
         return wynik;
    }
    private static short zapisz(String tekst, String wej,DataOutputStream wyj) throws IOException
    {
        System.out.println(tekst);
        short b;
        do
        {
            String temp = wej;
            b = wShort(temp);
        } while (b==Short.MIN_VALUE);
        wyj.writeShort(b);
        return b;
    }
    public static void main(String[] args)
    {
        DataOutputStream wyj;
        String nazwa = "";
        try
        {
            InputStreamReader wej = new InputStreamReader(System.in);
            System.out.println("Podaj nazwe wejsciowego pliku:");
            nazwa = readLine(wej);
            wyj = new DataOutputStream(new FileOutputStream(nazwa));
            zapisz("Podaj X poczatkowe",readLine(wej),wyj);
            zapisz("Podaj Y poczatkowe",readLine(wej),wyj);
            zapisz("Podaj X koncowe",readLine(wej),wyj);
            zapisz("Podaj Y koncowe",readLine(wej),wyj);
            short szerokosc = zapisz("Podaj szerokosc ekranu:",readLine(wej),wyj);
            short wysokosc = zapisz("Podaj wysokosc ekranu:",readLine(wej),wyj);
            short duzeX = zapisz("Podaj liczbe elementow planszy w poziomie:",readLine(wej),wyj);
            short duzeY = zapisz("Podaj liczbe elementow planszy w pionie:",readLine(wej),wyj);
            wyj.writeShort((duzeX*WYMIAR_PL/szerokosc)+1);
            wyj.writeShort((duzeY*WYMIAR_PL/wysokosc)+1);
            zapisz("Podaj X poczatkowej planszy:",readLine(wej),wyj);
            zapisz("Podaj Y poczatkowej planszy:",readLine(wej),wyj);
            for(int i=0;i<duzeY;i++)
                for(int j=0;j<duzeX;j++)
                    zapisz("Podaj rodzaj elementu planszy dla elementu o wspolrzednych ("+j+","+i+")",readLine(wej),wyj);
            short liczba = zapisz("Podaj liczbe potworkow:",readLine(wej),wyj);
            for(int i=0;i<liczba;i++)
            {
                short b1 = zapisz("Podaj X poczatkowe potworka",readLine(wej),wyj);
                short b2 = zapisz("Podaj X koncowe potworka",readLine(wej),wyj);
                short by = zapisz("Podaj Y potworka:",readLine(wej),wyj);
                if(b1<b2)
                wyj.writeShort(1);
                else
                wyj.writeShort(0);
                short planszaX = (short)((b1*WYMIAR_PL/szerokosc)+1);
                short planszaY = (short)((by*WYMIAR_PL/wysokosc)+1);
                wyj.writeShort(planszaX);
                wyj.writeShort(planszaY);
             }
            wej.close();
            wyj.close();
        }
        catch(Exception e)
        {
            if (nazwa!=null)
            {
                File f = new File(nazwa);
                if (f.exists())
                    f.delete();
           }
        }
    }
    
    public static String readLine(Reader reader) throws IOException {
        StringBuffer line = new StringBuffer();
        int c = reader.read();

        while (c != -1 && c != '\n') {
            line.append((char)c);
            c = reader.read();
        }

        if (line.length() == 0) {
            return null;
        }

        return line.toString();
    }
    
    private static final int WYMIAR_PL = 16;
 
}
 
0

Trochę lepiej, ale dalej pokazuje błędy w tych miejscach.

  InputStreamReader wej = new InputStreamReader(System.in);//W nawiasie podkreślone in
wyj = new DataOutputStream(new FileOutputStream(nazwa));//podkreślone FileOutputStream

oraz

 File f = new File(nazwa);//podkreślone File
0

Jakie błędy? Podaj ich treść

0

to błędy że nie ma takiego symbolu.

0

Co do system.in - w aplikacji mobilnej będzesz chciał zczytywać dane od użytkownika z konsoli? Pomijając fakt, że z tego co piszesz to wygląda to na niewykonalne, ale radziłbym zrobić gdzieś jakieś pole tekstowe i stamtąd zczytywać dane: http://www.roseindia.net/j2me/text-field.shtml
Zamiast FileOutputStream polecane jest użycie: http://j2mesamples.blogspot.com/2009/02/file-connection-using-j2me-api-jsr-75.html
Zamiast File 2 metody do odczytu i zapisu plików tekstowych: http://stackoverflow.com/questions/5204373/how-to-read-write-text-file-in-j2me

0

Witam ponownie po takim długim czasie. Udało mi się rozwiązać problem z podkreślanymi linijkami, ale nie mogę uruchomić midletu. Program działa tak:
W Edytor plansz wprowadza się dane planszy a następnie wrzuca się plik o danej nazwie do katalogu z projektem. Gdy uruchamiam midleta to w konsoli pojawia się taki komunikat:

java.lang.NullPointerException
	at platformowka.Plotno.<init>(Plotno.java:29)
	at platformowka.Midlet.<init>(Midlet.java:12)
	at java.lang.Class.runCustomCode(+0)
	at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
	at com.sun.midp.midlet.Selector.run(Selector.java:150) 

Linia 12 w Midlet to u mnie plotno = new Plotno(true,this);
a linia 29 w plotno to tlo = new TiledLayer(m.getDuzeX(), m.getDuzeY(), Image.createImage("/full.png"),WYMIAR_PL,WYMIAR_PL); co powinno rysować przeszkody.

Wydaje mi się, że nie uruchamia się, gdyż plik może nie mieć żadnych danych, ale wcześniej jest otworzenie planszy z pliku w którym wpisywałem dane.

Nie mam pomysłu jak to rozwiązać. Jeśli by ktoś chciał mogę nawet przesłać projekt jako archiwum, żeby dokładnie go przejrzeć. Z góry dzięki za pomoc.

0

@Coyote123 wywal ten kod. Otwórz książkę i zacznij od podstaw a nie od "d**y strony".

1 użytkowników online, w tym zalogowanych: 0, gości: 1