Klassenproblem



  • Hallo zusammen

    ich hab erst vor kurzen angefangen mit Java und spiele bisschen mit den Klassen rum. Folgendes Problem habe ich

    im meine Superclasse habe ich volgende initialisation

    public void init() {
    
            setLayout(new BorderLayout());
            Panel grid = new Panel();
            grid.setLayout(new GridLayout(0, 2));
    
            add("Center", grid);
    
            myFeldCanvas = new FeldCanvas();
            grid.add(myFeldCanvas);
            myScoreCanvas = new ScoreCanvas();
            grid.add(myScoreCanvas);
    

    die Canvas sieht so aus:

    class FeldCanvas extends Canvas implements ImageObserver{
        public static final int BalkenBreite = 8;
        public static final Color BalkenFarbe = Color.blue;
        protected block FallingShape = null;
    
        public void paint(Graphics g) {
            DrawPlayField(g);
            DrawFallingShape(g);
    
        }
    
        public void DrawFallingShape(Graphics g) {
    
                FallingShape.Display(g, BalkenBreite);
    
        }
    
        public void DrawPlayField(Graphics g) {
            int x, y;
            g.setColor(BalkenFarbe);
            g.fillRect (Tetris.x, 0, BalkenBreite, Tetris.kBreite * Tetris.Ky); //linker Balken
            g.fillRect (Tetris.kBreite * Tetris.Kx + BalkenBreite + Tetris.x, 0, BalkenBreite, Tetris.kBreite * Tetris.Ky);//Rechter Balken
            g.fillRect (Tetris.x, Tetris.kBreite * Tetris.Ky, Tetris.kBreite * Tetris.Kx + BalkenBreite * 2, BalkenBreite);//Unterer Balken
    
            for (x = 0; x < Tetris.Kx; x++) {
                for (y = 0; y < Tetris.Ky; y++) {
                        g.setColor(Tetris.HintergrundFarbe);
                        g.fillRect((BalkenBreite +Tetris.x) + x * Tetris.kBreite + 1, y * Tetris.kBreite + 1, Tetris.kBreite - 2, Tetris.kBreite - 2);
                        g.setColor(Color.white);
                        g.drawRect((BalkenBreite +Tetris.x) + x * Tetris.kBreite, y * Tetris.kBreite, Tetris.kBreite - 1, Tetris.kBreite - 1);
    
                }
            }
        }
    
     }
    

    und letzendlich die classe block

    class block{
            public void Display (Graphics g, int xOffs) {
    
            g.setColor(Color.red);
            g.fillRect(100,100,100,100);
    
        }
    }
    

    Wie man unschwer sehen kann versuche ich Tetris nachprogrammieren. Mein Problem ist das das Feld (DrawPlayField) ohne weiteres gezeichnet wird nur der rote Quadrat nicht. Welchen Fehler habe ich gemacht? Für Hilfe bedanke ich mich in voraus.

    Gruß Salfador



  • Keine Ahnung.
    Bei mir funktioniert es.

    import java.awt.*;
    import java.awt.image.*;
    
    public class Tetris extends Frame {
    
    static int x=10, kBreite=1, Ky=500, Kx=300;
    static Color HintergrundFarbe=Color.white;
    
    public static void main(String[] args) {
        Tetris tetris=new Tetris();
        tetris.init();
        tetris.setSize(350,550);
        tetris.show();
    }
    
    public void init() {
    
            setLayout(new BorderLayout()); 
            Panel grid = new Panel(); 
            grid.setLayout(new GridLayout(0, 2)); 
    
            add("Center", grid); 
            grid.setLayout(new BorderLayout()); 
    
            FeldCanvas myFeldCanvas = new FeldCanvas();
            grid.add(myFeldCanvas);
    }
    }
    
    class FeldCanvas extends Canvas implements ImageObserver{ 
        public static final int BalkenBreite = 8; 
        public static final Color BalkenFarbe = Color.blue; 
        protected block FallingShape = new block(); 
    
        public void paint(Graphics g) { 
            DrawPlayField(g); 
            DrawFallingShape(g); 
    
        } 
    
        public void DrawFallingShape(Graphics g) { 
    
                FallingShape.Display(g, BalkenBreite); 
    
        } 
    
        public void DrawPlayField(Graphics g) { 
            int x, y; 
            g.setColor(BalkenFarbe); 
            g.fillRect (Tetris.x, 0, BalkenBreite, Tetris.kBreite * Tetris.Ky); //linker Balken 
            g.fillRect (Tetris.kBreite * Tetris.Kx + BalkenBreite + Tetris.x, 0, BalkenBreite, Tetris.kBreite * Tetris.Ky);//Rechter Balken 
            g.fillRect (Tetris.x, Tetris.kBreite * Tetris.Ky, Tetris.kBreite * Tetris.Kx + BalkenBreite * 2, BalkenBreite);//Unterer Balken 
    
            for (x = 0; x < Tetris.Kx; x++) { 
                for (y = 0; y < Tetris.Ky; y++) { 
                        g.setColor(Tetris.HintergrundFarbe); 
                        g.fillRect((BalkenBreite +Tetris.x) + x * Tetris.kBreite + 1, y * Tetris.kBreite + 1, Tetris.kBreite - 2, Tetris.kBreite - 2); 
                        g.setColor(Color.white); 
                        g.drawRect((BalkenBreite +Tetris.x) + x * Tetris.kBreite, y * Tetris.kBreite, Tetris.kBreite - 1, Tetris.kBreite - 1); 
    
                } 
            } 
        } 
    
     }
    
    class block{ 
            public void Display (Graphics g, int xOffs) { 
    
            g.setColor(Color.red); 
            g.fillRect(100,100,100,100); 
    
        } 
    }
    


  • komisch der dieser Code geht bei mir auch, der einzige unterschid ist das ich das ganze als applet betreibe ich poste mal den ganzen Code

    package Tetris;
    
    import java.awt.*;
    import java.awt.image.*;
    import java.applet.Applet;
    
    import java.lang.*;
    
    /**
     *
     * @author  Salfador
     */
    public class Tetris extends java.applet.Applet implements Runnable{
    
        public static final int x=10;      //linke obere Ecke
        public static final int y=100;
        public static final int kBreite=25; //Kästchenbreite
        public static final int Kx=10;      //Anzahl der Kästchen in x Richtung
        public static final int Ky=22;      //Anzahl der Kästchen in y Richtung
        public static final Color HintergrundFarbe = Color.black; 
    
        FeldCanvas myFeldCanvas;
        Thread status = null;
        ScoreCanvas myScoreCanvas;
    
        public void init() {
    
            setLayout(new BorderLayout());
            Panel grid = new Panel();
            grid.setLayout(new GridLayout(0, 2));
    
            add("Center", grid);
    
            myFeldCanvas = new FeldCanvas();
            grid.add(myFeldCanvas);
    
        }
    
        public void start() {
            if(status == null) {
                status = new Thread(this);
                status.start();
            }
        }
    
        public void stop() {
            status = null;
        }
    
        public void run() {
            /*while (status !=null){
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e){}
    
            }*/
    
        }
    
    }
     class FeldCanvas extends Canvas implements ImageObserver{
        public static final int BalkenBreite = 8;
        public static final Color BalkenFarbe = Color.blue;
        protected block FallingShape = null;
    
        public void paint(Graphics g) {
            DrawPlayField(g);
    
            DrawFallingShape(g);
    
        }
    
        public void DrawFallingShape(Graphics g) {
    
                FallingShape.Display(g, BalkenBreite);
    
        }
    
        public void DrawPlayField(Graphics g) {
            int x, y;
            g.setColor(BalkenFarbe);
            g.fillRect (Tetris.x, 0, BalkenBreite, Tetris.kBreite * Tetris.Ky); //linker Balken
            g.fillRect (Tetris.kBreite * Tetris.Kx + BalkenBreite + Tetris.x, 0, BalkenBreite, Tetris.kBreite * Tetris.Ky);//Rechter Balken
            g.fillRect (Tetris.x, Tetris.kBreite * Tetris.Ky, Tetris.kBreite * Tetris.Kx + BalkenBreite * 2, BalkenBreite);//Unterer Balken
    
            for (x = 0; x < Tetris.Kx; x++) {
                for (y = 0; y < Tetris.Ky; y++) {
                        g.setColor(Tetris.HintergrundFarbe);
                        g.fillRect((BalkenBreite +Tetris.x) + x * Tetris.kBreite + 1, y * Tetris.kBreite + 1, Tetris.kBreite - 2, Tetris.kBreite - 2);
                        g.setColor(Color.white);
                        g.drawRect((BalkenBreite +Tetris.x) + x * Tetris.kBreite, y * Tetris.kBreite, Tetris.kBreite - 1, Tetris.kBreite - 1);
    
                }
            }
        }
    
     }
    
    class block{
    
        public void Display (Graphics g, int xOffs) {
    
            g.setColor(Color.red);
            g.fillRect(100,100,100,100);
    
        }
    }
    


  • hab den Fehler
    es muß so heisen, was eingentlich klar sein solte:

    protected block FallingShape = new block();
    

    danke für die Hilfe


Anmelden zum Antworten