Snake - Pomoc

0

Do snake dodałem zeby na początek wyskaiwał strone startowa ale mi jej nie wyswietla
http://pastebin.com/wRM6t9Ri kod snake
http://pastebin.com/Z0gSUFCt kod strony startowej
i nie wyswietla tej strony startowej

0

A wywołujesz to render gdzieś? To że sobie odmalujesz (.repaint();) kontrolkę to nie znaczy że wykona Ci się render();.

Kilka uwag:

  • Jeśli chodzi o gry, to Timery nie są najlepszym rozwiązaniem, miej tego świadomość.
  • Lepiej nazwać funkcję tailAt(int, int) anieżeli noTailAt(int, int).
  • Zamiast tworzyć zmienne UP, DOWN, LEFT, RIGHT mógłbyś sobie stworzyć enuma (typ wyliczeniowy).
  • Po co Ci statyczna instancja Snakea w Snakeu? o.O (linijka. 24)
  • (cherry != null && head.equals(cherry)) jest równoważne z samym head.equals(cherry)) (linijka. 149)
  • Linijki 94 - 141 można skrócić do kilku.
  • Nie musisz przydzielać w konstruktorze wartości false boleanom ani 0 intom, bo te wartości są przydzielane domyślnie.

Each class variable, instance variable, or array component is initialized with a default value when it is created (§15.9, §15.10):
For type byte, the default value is zero, that is, the value of (byte)0.
For type short, the default value is zero, that is, the value of (short)0.
For type int, the default value is zero, that is, 0.
For type long, the default value is zero, that is, 0L.
For type float, the default value is positive zero, that is, 0.0f.
For type double, the default value is positive zero, that is, 0.0d.
For type char, the default value is the null character, that is, '\u0000'.
For type boolean, the default value is false.
For all reference types (§4.3), the default value is null.

0

Tu wywołuje metode

public Snake()
    {
        dim = Toolkit.getDefaultToolkit().getScreenSize();
        jframe = new JFrame("Snake");
        jframe.setVisible(true);
        jframe.setSize(805, 700);
        jframe.setResizable(false);
        jframe.setLocation(dim.width / 2 - jframe.getWidth() / 2, dim.height / 2 - jframe.getHeight() / 2);
        jframe.add(renderPanel = new RenderPanel());
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.addKeyListener(this);
        render(obiekt_klasy_graphics); 
               
Jak skompiluje wyskakuje cos takiego

cannot find symbol
symbol : variable obiekt_klaasy_graphics
location class Snake

Overridable method call in constructor

0

Perełeczka :D już dawno to mówiłem

0

To co robisz nie ma najmniejszego sensu.

Po pierwsze, normalna klasa wygląda tak (zauważ że nazwa klasy i konstruktora są takie same):

class MojProgram extends Klasa {

    double zmienna = 10.0;

    public MojProgram() {  //  Ta funkcja to tzw konstruktor, alokuje pamięć dla obiektu i 
                           //  wywołuje potrzebne funkcje na start
        innaWażnaRzecz();
    }

    public void innaWażnaRzecz() {
 
    }
}

Nie wiem kto Ci nagadał głupot że potrzebujesz instancji tej klasy w samej sobie, poza tym nawet gdybyś potrzebował, to wykonując na tej drugiej instancji jakąkolwiek operację, nie zmieniasz nic w tej głównej (więc gdzie sens? ;/)

Po drugie, tą swoją funkcję render() musisz wykonywać za każdym razem kiedy musisz odnowić pozycję węża (czyli po każdym ticku timera), a nie tylko raz w konstruktorze.

Po trzecie, chyba wyszukałeś czemu render() nie działa ale ktoś pisząc render(obiekt_klasy_graphics) raczej nie miał na myśli żebyś bezmyślnie wklepał obiekt_klasy_graphics, tylko żebyś przekazał referencję do rzeczywistego obiektu :> (tylko też nie byle jakiego tylko taki który wskazuje na okno formy) Pomogę Ci i dam Ci tą jedną linijkę, żebyś nie musiał szukać ale na przyszłość staraj się myśleć co robisz i interpretować błędy:

cannot find symbol  // Nie można znaleźć symbolu
symbol : variable obiekt_klaasy_graphics  // symbol: zmienna "obiekt_klaasy_graphics"
location class Snake  // Położenie: klasa Snake

Podane jak na tacy

Co do tego Graphics...

    public Dimension dim;
    public Graphics windowGraphics;

    public Snake() {
        // [...]
        jframe.setVisible(true);
        windowGraphics = jframe.createGraphics();
        // [...]
        render(windowGraphics);
    }

Tylko wiesz że rysowanie bezpośrednio na formie to zły pomysł? (wolne jak chhhhślimak) Lepiej sobie zrobić jakiś obrazek w pamięci, na nim wykonać render() i dopiero wyświetlić.

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