package HindernisslaufPack;
import java.util.Timer;
import java.util.TimerTask;
public class Background {
Timer move;
Background() {
move = new Timer();
move.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (Var.BackX1 > -800) {
Var.BackX1 -= 2;
}
else Var.BackX1 = -2;
if (Var.BackX2 > 0) {
Var.BackX2 -= 2;
}
else {
Var.BackX2 = 790;
}
}
}, 0,12);
}
}
package HindernisslaufPack;
import java.awt.*;
import javax.swing.*;
public class Draw extends JLabel{
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(Var.Background1, 0, Var.BackX1, 800, 600,null);
g.drawImage(Var.Background2, 0, Var.BackX2, 800, 600,null);
g.fillRect(Var.Pgegnerx, Var.Pgegnery, 20, 20);
for (int i =0; i<4; i++) {
g.fillRect(Var.gegnerx[i],Var.gegnery[i], 100, 20);
}
repaint();
Var.BackX1 = 0;
Var.BackX2 = 800;
}
}
package HindernisslaufPack;
import java.util.Timer;
import java.util.*;
public class gegner {
Timer move;
int temp;
public gegner () {
Timer move = new Timer();
for (int i=0; i<4; i++) {
temp += 150;
Var.gegnery[i] = 600-temp;
Var.gegnerx[i] = 1200-temp;
}
move.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
for (int i =0; i<4; i++) {
Var.gegnerx[i] -= Var.gegnerspeed[i];
if (Var.gegnerx[i] <0) {
Var.gegnerx[i] = 1000;
}
}
}
}, 0, 8);
}
}
package HindernisslaufPack;
import java.awt.Window;
import javax.swing.JFrame;
public class GUI {
public GUI() {
Var.jf1.setSize(Var.Breite, Var.Höhe);
Var.jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Var.jf1.setLocationRelativeTo(null);
Var.jf1.setTitle("Hinddernisslauf");
Var.jf1.requestFocus();
Var.jf1.setVisible(true);
Draw draw = new Draw();
draw.setBounds(0,0,Var.Breite,Var.Höhe);
draw.setVisible(true);
Var.jf1.add(draw);
}
}
package HindernisslaufPack;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyHandler implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W ) {
Var.moveup = true;
}
else if (e.getKeyCode() == KeyEvent.VK_S) {
Var.movedown = true;
}
else if (e.getKeyCode() == KeyEvent.VK_A) {
Var.moveleft = true;
}
else if (e.getKeyCode() == KeyEvent.VK_D) {
Var.moveright = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W ) {
Var.moveup = false;
}
else if (e.getKeyCode() == KeyEvent.VK_S) {
Var.movedown = false;
}
else if (e.getKeyCode() == KeyEvent.VK_A) {
Var.moveleft = false;
}
else if (e.getKeyCode() == KeyEvent.VK_D) {
Var.moveright = false;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
}
package HindernisslaufPack;
public class Main {
public Main() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
new Var();
new GUI();
new Draw();
new Background();
new gegner();
new KeyHandler();
new PlayerMovement();
}
}
package HindernisslaufPack;
import java.util.Timer;
import java.util.TimerTask;
public class PlayerMovement {
Timer move;
public PlayerMovement() {
move = new Timer();
move.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (Var.moveup == true) {
if (Var.Pgegnery >= 40 ) {
Var.Pgegnery =Var.Pgegnery - 2;
} }
else if (Var.movedown == true) {
if (Var.Pgegnery >= 40 ) {
Var.Pgegnery += 2;
} }
else if (Var.moveright == true) {
if (Var.Pgegnerx <= 760 ) {
Var.Pgegnerx += 2;
} }
else if (Var.moveright == true) {
if (Var.Pgegnerx >= 40 ) {
Var.Pgegnerx -= 2;
}
}
}
}, 0, 7);
}
}
package HindernisslaufPack;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Var {
static JFrame jf1 = new JFrame();
static int Breite = 800;
static int Höhe = 600;
static BufferedImage Background1;
static BufferedImage Background2;
static BufferedImage man1;
static int[] gegnerx = new int[4];
static int[] gegnery = new int[4];
static int Pgegnerx = 200, Pgegnery = 400;
static int BackX1;
static int BackX2;
static int[] gegnerspeed = new int[4];
static boolean moveup;
static boolean movedown;
static boolean moveright;
static boolean moveleft;
public Var() {
try {
Background1 = ImageIO.read(new File ("rsc/MeinNeuesBild.png"));
Background2 = ImageIO.read(new File ("rsc/MeinNeuesBild.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("Datei nicht gefunden");
}
gegnerspeed [0] = 2;
gegnerspeed [1] = 3;
gegnerspeed [2] = 2;
gegnerspeed [3] = 4;
}
}
public class Main {
public Main() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
new Var();
new GUI();
new Draw();
new Background();
new gegner();
new KeyHandler();
new PlayerMovement();
}
}
Was hier wichtig ist, ist Hierarchie. Ein Fenster hat ein Zeichenblatt, auf dem Zeichenblatt werden Figuren gezeichnet. Die Figuren selbst sind für ihre Position zuständig, denn das Zeichenblatt zeichnet nur die aktuelle Position der Figuren. Eine Figur hat also ein Bild und eine Koordinate. Wenn du dann das Spiel startest, wird ein Timer gestartet, welcher sequentiell alles in ihm Vorhandene abläuft. Hier werden dann die Koordinaten der Figuren, bzw. das Hintergrundbild, welches hier in Bewegung ist, auf ein aktuellen Stand gebracht. Erst in der Zeichenmethode des Zeichenblattes wird alles neu gezeichnet.
Ich kann nicht beurteilen wie deine Kenntnisse sind und will ich auch gar nicht - der Code allerdings sagt etwas anderes. Du erstellst wahllos neue Instanzen von Klassen um sie dann in einer anderen Klasse neu zu erstellen (Draw-Klasse als Beispiel), der KeyListener wird nirgendswo hinzugefügt (was im übrigen auch dein Problem sein sollte, warum der Spiele nicht bewegt wird), das Geheimnisprinzip wird absolut nicht beachtet (alles public static Variablen), du legst tw. Member einer Klasse an nur um dann eine Variable mit dem gleichen Namen lokal noch mal anzulegen und sinnvolle Objekte gibt es auch nicht wirklich.Ick kann einige der Grundlagen sonst wäre ich nicht in der Lage gewesen das zu schreiben
Wer da die Ausgangsquelle des Stils ist, ist sicher nicht ganz klar. Jedoch habe ich diesen "Stil" schon hier gesehen und den YouTuber erraten könnenich habe geguckt wie es in einigen tutorials angegangen wird
Ich habe nicht Deinen Code kritisiert. Das Vorgehen, die Klassenbezeichnungen und selbst Variablennamen kennt man zum großen Teil aus diversen Threads. Eine Quelle ist das Pong-"Tutorial", das auf YouTube zu finden ist.du kannst gerne meinen Code kritisieren dafür bin ich immer offen aber bitte auf respektvolle art und weise.
Das der Code chaotisch und von schlechtem Stil ist weiss ich jetzt auch.
Grundlagen: in Main wird kein KeyHandler aufgerufen, sondern ein KeyHandler-Objekt erstellt, das aber nirgends verwendet wird.Der KeyHandler wird doch in der Main aufgerufen. Die Grundlagen kann ich, da bin ich sicher