Java Code Hilfe - public void xxx()

Toastbot

Mitglied
Hallo liebes Forum ich habe mal wieder ein Problem mit meinem Script!

1. Undzwar erstelle ich hiermit eine Klasse:
Java:
public void enemy(int enemyx, int enemyy, Graphics2D g2d){
			if (enemyx==x-1 && enemyy==y && schlagl==1){
				enemyx=-10;
				enemyy=-10;
			}
			if (enemyx==x+1 && enemyy==y && schlagr==1){
				enemyx=-10;
				enemyy=-10;
			} 
			if (enemyx==x && enemyy==y-1 && schlagu==1){
				enemyx=-10;
				enemyy=-10;
			} 
			if (enemyx==x && enemyy==y+1 && schlagd==1){
				enemyx=-10;
				enemyy=-10;
			}
			if (enemyx==x && enemyy==y && gemoved==1){
				leben=leben-1;
				gemoved=0;
			}
			if (enemyx==portx && enemyy==porty){
				newport=0;
			}
			g2d.setColor(new Color(Integer.parseInt("FF0000", 16)));
			g2d.fillOval(enemyx*schrit, enemyy*schrit, schrit, schrit);
		}

Ich hatte mir erhofft das ein auf diese weise erstellter "enemy" nachdem er "geschlagen" wurde entweder GANZ verschwindet oder so wie ich es gelöst habe auf eine Position gesetzt wird die nicht sichtbar und nicht erreichbar ist (-10,-10)
Funktionier theoretisch auch, nur das er etwa 0,2 Sekunden nach dem schlag wieder zurück auf seine uhrsprünglich Position kommt.

2. Ich hab ebenfalls versucht das der "enemy" durch eine regelmäßige veränderung durch eine zufälligezahl sein x und y wert verändert (so das der enemy sich zufällig alle paar sekunden bewegt).
Jedoch auch hier das Problem, er wechselt seine Position, taucht dann aber schnell wieder an seiner uhrsprungs Position auf.

Hier das komplette Script (Die version mit dem random hab ich wieder gelöscht weil es nicht funktioniert hatte)

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;


public class Game {

	private JFrame frame;
	int time;
	int x;
	int y;
	int schrit=50;
	int raumx=schrit*10;
	int raumy=schrit*10;
	int portx;
	int maxX=raumx/schrit-1;
	int maxY=raumy/schrit-1;
	int porty;
	int newport=0;
	int score=0;
	int move=0;
	int speed=0;
	int stopl=0;
	int stopr=0;
	int stopu=0;
	int stopd=0;
	Graphics2D g2d;
	int welt=1;
	int startx=0;
	int starty=0;
	int verzögerer=0;
	int scores=0;
	int leben=3;
	int gemoved=0;
	int masterstop=0;
	static int again=1;
	int visionu=0;
	int visiond=1;
	int visionl=0;
	int visionr=0;
	int sword=0;
	int stime=0;
	int schlagl=0;
	int schlagr=0;
	int schlagu=0;
	int schlagd=0;

	public Game() {
		frame = new JFrame("Catch the ball!");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationByPlatform(true);
		MovePanel panel = new MovePanel();
		frame.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_UP) {
					if(move==0&&stopu==0&&masterstop==0){
						y-=1;
						move=1;
					}
					stopd=0;
					stopl=0;
					stopr=0;
					gemoved=1;
					visiond=1;
					visionu=0;
					visionr=0;
					visionl=0;
				} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
					if(move==0&&stopd==0&&masterstop==0){
						y+=1;
						move=1;
					}
					stopu=0;
					stopl=0;
					stopr=0;
					gemoved=1;
					visiond=0;
					visionu=1;
					visionr=0;
					visionl=0;
				} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
					if(move==0&&stopl==0&&masterstop==0){
						x-=1;
						move=1;
					}
					stopd=0;
					stopu=0;
					stopr=0;
					gemoved=1;	
					visiond=0;
					visionu=0;
					visionr=0;
					visionl=1;
				} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
					if(move==0&&stopr==0&&masterstop==0){
						x+=1;
						move=1;
					}
					stopd=0;
					stopl=0;
					stopu=0;
					gemoved=1;
					visiond=0;
					visionu=0;
					visionr=1;
					visionl=0;
				} else if (e.getKeyCode() == KeyEvent.VK_W) {
					if(move==0&&stopu==0&&masterstop==0){
						y-=1;
						move=1;
					}
					stopd=0;
					stopl=0;
					stopr=0;
					gemoved=1;
					visiond=1;
					visionu=0;
					visionr=0;
					visionl=0;
				} else if (e.getKeyCode() == KeyEvent.VK_S) {
					if(move==0&&stopd==0&&masterstop==0){
						y+=1;
						move=1;
					}
					stopu=0;
					stopl=0;
					stopr=0;
					gemoved=1;
					visiond=0;
					visionu=1;
					visionr=0;
					visionl=0;
				} else if (e.getKeyCode() == KeyEvent.VK_A) {
					if(move==0&&stopl==0&&masterstop==0){
						x-=1;
						move=1;
					}
					stopd=0;
					stopu=0;
					stopr=0;
					gemoved=1;
					visiond=0;
					visionu=0;
					visionr=1;
					visionl=0;
				} else if (e.getKeyCode() == KeyEvent.VK_D) {
					if(move==0&&stopr==0&&masterstop==0){
						x+=1;
						move=1;
					}
					stopd=0;
					stopl=0;
					stopu=0;
					gemoved=1;
					visiond=0;
					visionu=0;
					visionr=0;
					visionl=1;
				}
				else if (e.getKeyCode() == KeyEvent.VK_X) {
					if(speed==0){
						speed=1;
					} else if(speed==1){
						speed=0;
					}
				}
				else if (e.getKeyCode() == KeyEvent.VK_Q) {
					if (sword==0){
						sword=1;
					}
					if (visionl==1&&sword==1){
						schlagl=1;
						schlagr=0;
						schlagu=0;
						schlagd=0;
					} else if (visionr==1&&sword==1){
						schlagl=0;
						schlagr=1;
						schlagu=0;
						schlagd=0;

					} else if (visiond==1&&sword==1){
						schlagl=0;
						schlagr=0;
						schlagu=0;
						schlagd=1;

					} else if (visionu==1&&sword==1){
						schlagl=0;
						schlagr=0;
						schlagu=1;
						schlagd=0;

					}
				}
				if (x==raumx/schrit){
					x=raumx/schrit-1;
				}
				if (y==raumy/schrit){
					y=raumy/schrit-1;
				}
				if (x==-1){
					x=0;
				}
				if (y==-1){
					y=0;
				}
				if (masterstop==0){
					frame.repaint();
				}

			}
		});
		frame.add(panel);

		Timer look = new Timer(100, panel);
		look.setRepeats(true);
		look.start();

		frame.pack();
		frame.setVisible(true);

	}
	public static void main(String[] args) {
		if (again==1){
			new Game();
			again=0;
		}
	}

	class MovePanel extends JPanel implements ActionListener {
		private static final long serialVersionUID = 1L;

		private int counter;

		public MovePanel() {
			super();
			counter = 0;
		}



		public Dimension getPreferredSize() {
			return new Dimension(raumx, raumy);
		}

		public void wand(int wallx, int wally, Graphics2D g2d){
			if (wallx==x-1 && wally==y){
				stopl=1;
			}
			if (wallx==x+1 && wally==y){
				stopr=1;
			} 
			if (wallx==x && wally==y-1){
				stopu=1;
			} 
			if (wallx==x && wally==y+1){
				stopd=1;
			}
			if (wallx==portx && wally==porty){
				newport=0;
			}
			g2d.setColor(new Color(Integer.parseInt("000000", 16)));
			g2d.fillRect(wallx*schrit, wally*schrit, schrit, schrit);
		}
		public void feuer(int feuerx, int feuery, Graphics2D g2d){
			if (feuerx==x && feuery==y && gemoved==1){
				leben=leben-1;
				gemoved=0;
			}
			if (feuerx==portx && feuery==porty){
				newport=0;
			}
			g2d.setColor(new Color(Integer.parseInt("FF0000", 16)));
			g2d.fillRect(feuerx*schrit, feuery*schrit, schrit, schrit);
		}
		public void enemy(int enemyx, int enemyy, Graphics2D g2d){
			if (enemyx==x-1 && enemyy==y && schlagl==1){
				enemyx=-10;
				enemyy=-10;
			}
			if (enemyx==x+1 && enemyy==y && schlagr==1){
				enemyx=-10;
				enemyy=-10;
			} 
			if (enemyx==x && enemyy==y-1 && schlagu==1){
				enemyx=-10;
				enemyy=-10;
			} 
			if (enemyx==x && enemyy==y+1 && schlagd==1){
				enemyx=-10;
				enemyy=-10;
			}
			if (enemyx==x && enemyy==y && gemoved==1){
				leben=leben-1;
				gemoved=0;
			}
			if (enemyx==portx && enemyy==porty){
				newport=0;
			}
			g2d.setColor(new Color(Integer.parseInt("FF0000", 16)));
			g2d.fillOval(enemyx*schrit, enemyy*schrit, schrit, schrit);
		}


		public void paintComponent(Graphics g) {

			g2d = (Graphics2D) g;



			int boxX=schrit*x;
			int boxY=schrit*y;
			int boxU=schrit;
			if (score==3){
				score=0;
				welt+=1;
				verzögerer=0;
			}
			if (welt>4){
				System.out.println("Sieg!");
				welt=1;
			}
			if (welt==1){
				stopu=0;
				stopd=0;
				stopl=0;
				stopr=0;
				startx=2;
				starty=0;
				g2d.setColor(new Color(Integer.parseInt("7CFC00", 16)));
				g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

				if (newport==0){
					portx=(int)(Math.random()*maxX);
					porty=(int)(Math.random()*maxY);
					newport=1;
				} else if (portx==x && porty==y){
					newport=0;
					score+=1;
					scores+=1;
					System.out.println(score);
					repaint();
				}
				//enemy(5, 5, emove, g2d);
				feuer(1, 1, g2d);
				enemy(8, 8, g2d);
				wand(3,4,g2d);
				wand(3,3,g2d);
				wand(2,3,g2d);
				g2d.setColor(new Color(Integer.parseInt("082984", 16)));
				g2d.fillOval(portx*schrit, porty*schrit, schrit, schrit);
			} 
			if (welt==2){
				stopu=0;
				stopd=0;
				stopl=0;
				stopr=0;
				startx=7;
				starty=5;
				g2d.setColor(new Color(Integer.parseInt("66FFFF", 16)));
				g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

				if (newport==0){
					portx=(int)(Math.random()*maxX);
					porty=(int)(Math.random()*maxY);
					newport=1;
				} else if (portx==x && porty==y){
					newport=0;
					score+=1;
					scores+=1;
					System.out.println(score);
					repaint();
				}
				feuer(6, 7, g2d);
				wand(8,6,g2d);
				wand(8,5,g2d);
				wand(8,4,g2d);
				wand(7,4,g2d);
				wand(6,4,g2d);
				wand(6,5,g2d);
				wand(6,6,g2d);
				g2d.setColor(new Color(Integer.parseInt("082984", 16)));
				g2d.fillOval(portx*schrit, porty*schrit, schrit, schrit);
			}
			if (welt==3){
				stopu=0;
				stopd=0;
				stopl=0;
				stopr=0;
				startx=1;
				starty=1;
				g2d.setColor(new Color(Integer.parseInt("6600FF", 16)));
				g2d.fillRect(0, 0, this.getWidth(), this.getHeight());

				if (newport==0){
					portx=(int)(Math.random()*maxX);
					porty=(int)(Math.random()*maxY);
					newport=1;
				} else if (portx==x && porty==y){
					newport=0;
					score+=1;
					scores+=1;
					System.out.println(score);
					repaint();
				}
				wand(0,5,g2d);
				wand(1,5,g2d);
				wand(2,5,g2d);
				wand(3,5,g2d);
				wand(4,5,g2d);
				wand(6,5,g2d);
				wand(7,5,g2d);
				wand(8,5,g2d);
				wand(9,5,g2d);
				feuer(4, 4, g2d);
				feuer(6, 4, g2d);
				feuer(5, 2, g2d);
				g2d.setColor(new Color(Integer.parseInt("082984", 16)));
				g2d.fillOval(portx*schrit, porty*schrit, schrit, schrit);
			}
			if (welt==4){
				stopu=0;
				stopd=0;
				stopl=0;
				stopr=0;
				startx=1;
				starty=1;
				g2d.setColor(new Color(Integer.parseInt("FFFFFF", 16)));
				g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
				feuer(0, 1, g2d);
				feuer(0, 2, g2d);
				feuer(0, 3, g2d);
				feuer(0, 4, g2d);
				feuer(0, 5, g2d);
				feuer(2, 1, g2d);
				feuer(2, 2, g2d);
				feuer(2, 3, g2d);
				feuer(2, 4, g2d);
				feuer(2, 5, g2d);


				if (newport==0){
					portx=5;
					porty=5;
					newport=1;
				} else if (portx==x && porty==y){
					newport=0;
					score+=3;
					scores+=1;
					System.out.println(score);
					repaint();
				}			
				g2d.setColor(new Color(Integer.parseInt("082984", 16)));
				g2d.fillOval(portx*schrit, porty*schrit, schrit, schrit);
			}

			if (score==0&&verzögerer==0){
				System.out.println("Go!");
				x=startx;
				y=starty;
				verzögerer=1;
			}
			if (leben==0){
				g2d.setColor(new Color(Integer.parseInt("FF0000", 16)));
				g.setFont(new Font("TimesRoman", Font.PLAIN, (int)schrit)); 
				g.drawString("Verloren!",raumx/4+((int)schrit/2),raumy/2);
				g.setFont(new Font("TimesRoman", Font.PLAIN, (int)schrit/2)); 
				g.drawString("Du hast "+scores+" Punkte erreicht!",raumx/4,raumy/2+(int)schrit*3);
				masterstop=1;
			}


			//charakter
			if(move==0){
				g2d.setColor(new Color(Integer.parseInt("FFB90F", 16)));
			} else if (move==1){
				g2d.setColor(new Color(Integer.parseInt("D60000", 16)));
			}
			g2d.fillRect(boxX, boxY, boxU, boxU);
			/*
			 * 			schlagl=1;
						schlagr=0;
						schlagu=0;
						schlagd=0;
			 */
			//SchwertRechts
			if (schlagr==1){
				g2d.setColor(new Color(Integer.parseInt("707070", 16)));
				g2d.fillRect(boxX+schrit, boxY+schrit-schrit/5, schrit, schrit/5);
			}
			//SchwertLinks
			if (schlagl==1){
				g2d.setColor(new Color(Integer.parseInt("707070", 16)));
				g2d.fillRect(boxX-schrit, boxY, schrit, schrit/5);
			}
			//SchwertUnten
			if (schlagd==1){
				g2d.setColor(new Color(Integer.parseInt("707070", 16)));
				g2d.fillRect(boxX+schrit-schrit/5, boxY-schrit, schrit/5, schrit);
			}
			//SchwertOben
			if (schlagu==1){
				g2d.setColor(new Color(Integer.parseInt("707070", 16)));
				g2d.fillRect(boxX, boxY+schrit, schrit/5, schrit);
			}

			g2d.setColor(new Color(Integer.parseInt("000000", 16)));			
			g.setFont(new Font("TimesRoman", Font.PLAIN, (int)schrit/2)); 
			g.drawString("Score: "+scores,5,(int)schrit/2);
			g.drawString("Leben: "+leben,raumx-100,(int)schrit/2);
		}

		public void actionPerformed(ActionEvent e) {
			setState(counter);
			counter = (counter % 10) + 1;
		}

		private void setState(int i) {
			if(move==1){
				if(i %2 == 1) {
					time+=1;
				}
				else {
					time+=1;
				}

				if(speed==1){
					move=0;
				}
				if(time == 5&& speed==0){
					time=0;
					move=0;
				}			
				repaint();
			}
			if(sword==1){
				if(i %2 == 1) {
					stime+=1;
				}
				else {
					stime+=1;
				}
				if (stime==5){
					stime=0;
					sword=0;
					schlagl=0;
					schlagr=0;
					schlagu=0;
					schlagd=0;
					repaint();
				}
			}

		}
	}
}
 
Hey,

ich denke es wird sich niemand in deinen Code (nicht Skript - Java ist keine Skriptsprache) einarbeiten. Es ist einfach schwer lesbar. Versuche dich in Objektorientiertung. Schreibe für die Gegner eine eigene Klasse. Ggf. schau dir Quaxlis Tutorial zur Spieleprogrammierung an: Quaxli's Spiele-Tutorial (Dort wird auch erklärt wie das mit der Gameloop funktioniert.)
 
Zuletzt bearbeitet:
Du musst anfangen Konzepte zu modellieren. Den Gedanken hinter OOP ist, dass man Gegenstände (z.b. deine Wand) in eine eigene Klasse Wand steckt. Die Wände stehen auf einer Spielfläche, usw.

Also hier zum Beispiel sind die Objekte selbst für das Zeichnen zuständig. Wenn du mit der linken oder rechten Maustaste in das Fenster klickst wirst du es sehen:

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class ToastbrotTutorial {

	public static void main(String[] args) {
		new ToastbrotTutorial();
	}

	public ToastbrotTutorial() {
		JFrame frame = new JFrame("Tutorial");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationByPlatform(true);
		JPanel sketch = new Sketchboard();
		frame.add(sketch);

		frame.pack();
		frame.setVisible(true);
	}

	class Sketchboard extends JPanel {
		private static final long serialVersionUID = 1L;

		private List<Shape> shapes;

		public Sketchboard() {
			shapes = new ArrayList<>();
			addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent e) {
					super.mouseClicked(e);
					switch (e.getButton()) {
					case MouseEvent.BUTTON1:
						shapes.add(new Square(e.getX(), e.getY()));
						break;

					case MouseEvent.BUTTON3:
						shapes.add(new Circle(e.getX(), e.getY()));
						break;
					}
					repaint();
				}
			});
		}
		
		@Override
		public Dimension getPreferredSize() {
			return new Dimension(800, 600);
		}

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			for (Shape s : shapes) {
				s.draw(g);
			}
		}
	}

	abstract class Shape {

		protected int x, y;

		public Shape(int x, int y) {
			this.x = x;
			this.y = y;
		}

		abstract void draw(Graphics g);
	}

	class Square extends Shape {

		public Square(int x, int y) {
			super(x, y);
		}

		public static final int SQUAREWIDTH = 20;

		@Override
		void draw(Graphics g) {
			g.drawRect(x, y, SQUAREWIDTH, SQUAREWIDTH);
		}
	}

	class Circle extends Shape {
		
		public Circle(int x, int y) {
			super(x, y);
		}
		
		public static final int CIRCLERADIUS = 40;

		@Override
		void draw(Graphics g) {
			g.drawOval(x, y, CIRCLERADIUS, CIRCLERADIUS);
		}
	}
}
 

Neue Themen


Zurück
Oben