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