Hilfe bei snake

Status
Nicht offen für weitere Antworten.
N

Nils ait

Gast
hallo erstmal ich bin seit einem jahr auf einem informationstechnischen Gymnasium und habe einige probleme mit java

wir arbeiten mit dem programm eclipse.

wir haben gerade die aufgabe ein spiel zu programmieren ich habe mich für snake entschieden und habe einige kleine logik fehler die ich nicht lösen kann

zuerst einmal bewegt sich die schlange nicht so wie sie sich bewegen soll
desweiteren funktioniert das mit dem einsammeln nicht so wie gedacht denn die schlange muss genau die selben x und y werte haben wie die frucht gibt es keine methode oder ähnliches welche bewirkt dass wenn die schlange auf das rechteck kommt egal an welcher stelle dieses verschwindet? ich habe die frucht so programmiert dass wenn die x und y werte übereinstimmen eine neue frucht erstellt wird doch das funktioniert nicht weil ich nich genau diese werte bekomme (die frucht soll willkürlich irgendwo im applet erscheinen (math.random) brauche hilfe meine e-mail addrese ist nils90@web.de

hier das programm (codes):

http://rapidshare.de/files/40108612/snake_1_5.rar.html
 

Soulfly

Bekanntes Mitglied
Für beide Probleme!!

Nutze Rechtecke für Frucht,Kugel und Snake Kopf, am besten mit der Rectangle-Klasse benutzen und dann man kann die Rechtecke auf Schnitt prüfen und fertig. Dann ist es nicht mehr pixelgenau, was aber bei snake nicht weiter stören sollte.
 

Quaxli

Top Contributor
Poste doch mal ein bißchen Code hier im Forum. Dein Link oben ist für mich nicht erlaubt. Interssant wären die Methode mit der Du die Schlange bewegst und Deine Spielschleife (neudeutsch: GameLoop).

Die Kollision überprüfst Du mit intersects(..) einfach mal bei der Klasse Rectangle in die API gucken. Oder wenn's genauer sein soll, dann bei Rectangle2D.Double.
 

Nils ait

Mitglied
Code:
[u][b]also hier ist meine klasse Rechteck:[/b][/u]

package snake_1_5;

import java.applet.Applet;
import java.awt.*;
import java.applet.Applet;

public class Rechteck extends Applet {

	private int x1;
	private int y1;
	
	private  Color farbe= Color.blue;

	
	public Rechteck (int pX1, int pY1, Color f){
		
		this.x1=pX1;
		this.y1=pY1;
	
		
		
		farbe = f;
	}
	
	public void zeichne (Graphics g){
		g.setColor(farbe);
		
		g.drawRect(this.x1, this.y1, 10,10);
		g.fillRect(this.x1, this.y1, 10,10);
		

		
	}
	public int getX(){
		return x1;
	}
	public void setX (int x){
	this.x1 =x1;	
	}
	public int getY(){
		return y1;
	}
	public void setY(int y){
		this.y1=y1;
	}

}



[u][b]Nun meine Steuerung:[/b][/u]

 package snake_1_5;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import snake_1_0.Rechteck;
import util.Zufall;

public class Steuerung extends Applet implements KeyListener {
	
	private Rechteck obj []= new Rechteck [5];
	private final int MAX =5;
	private Frucht obst;
	private final int Punkte=100;

	
	public void init(){
		this.setBackground(Color.RED);
		this.setSize(800,800);
		
		obst =new Frucht(Zufall.hundert(),Zufall.hundert(),Color.cyan);
		obj[0] =new Rechteck(20,10,Color.GREEN);
		for (int i=1; i<MAX;i++)
			obj[i] =new Rechteck(obj[i-1].getX()+10,obj[i-1].getY()+10,Color.BLACK);
		
		
		this.addKeyListener(this);
		
	}
	
	public void paint (Graphics g){
		obst.zeichne(g);
		if (obj[1].getY()==obst.getfY())
		{
			if (obj[1].getX()==obst.getfX())
			{
				obst.zeichne(g);
			}
			
		}
		
		for (int i=0; i<MAX;i++)
		obj[i].zeichne(g);
	
	}

	public void keyTyped(KeyEvent arg0) {

		
	}

	public void keyPressed(KeyEvent ev) {

		
		if (ev.getKeyCode()==KeyEvent.VK_RIGHT)
		{
			obj[0].setX(obj[0].getX()+10);
		}
		
		if (ev.getKeyCode()==KeyEvent.VK_LEFT)
		{
			obj[0].setX(obj[0].getX()-10);
		}
		
		if (ev.getKeyCode()==KeyEvent.VK_UP)
		{
			obj[0].setY(obj[0].getY()-10);
		}
		
		if (ev.getKeyCode()==KeyEvent.VK_DOWN)
		{
			obj[0].setY(obj[0].getY()+10);
		}
		
		for (int i=1; i<MAX;i++)
		{
			if (ev.getKeyCode()==KeyEvent.VK_RIGHT)
			{
			obj[i].setX(obj[i-1].getX()+10);	
			}
			
			if (ev.getKeyCode()==KeyEvent.VK_LEFT)
			{
			obj[i].setX(obj[i-1].getX()-10);	
			}
			
			if (ev.getKeyCode()==KeyEvent.VK_UP)
			{
			obj[i].setY(obj[i-1].getY()-10);	
			}
			
			if (ev.getKeyCode()==KeyEvent.VK_DOWN)
			{
			obj[i].setY(obj[i-1].getY()+10);	
			}
		}
			
		this.repaint();
	}

	public void keyReleased(KeyEvent arg0) {
		// TODO Automatisch erstellter Methoden-Stub
		
	}
}

[u][b]und zuletzt meine klasse Frucht:[/b][/u]

package snake_1_5;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Frucht extends Applet {
	private int Fx1;
	private int Fy1;
	
	private  Color farbe= Color.CYAN;

	
	public Frucht (int oX1, int oY1, Color f){
		
		this.Fx1=oX1;
		this.Fy1=oY1;
	
		
		
		farbe = f;
	}
	
	public void zeichne (Graphics g){
		g.setColor(farbe);
		g.drawRect(this.Fx1, this.Fy1, 10,10);
		g.fillRect(this.Fx1, this.Fy1, 10,10);
		

		
	}
	public int getfX(){
		return Fx1;
	}
	public void setfX (int gx){
	this.Fx1 =Fx1;	
	}
	public int getfY(){
		return Fy1;
	}
	public void setY(int gy){
		this.Fy1=Fy1;
	}

}
[/u]
 

Marco13

Top Contributor
:shock: Warum extenden die alle Applet?!? Mach das mal weg - NUR die "Haupklasse" sollte ein Applet sein.

Und sonst - die Frucht und das Rechteck könnten eben ein http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Rectangle.html enthalten (oder ggf. Rectangle extenden). Dann bräuchten sie auch nicht mehr selbst ihre x1 und y1 zu speichern. Sinngemäß
Code:
class Frucht
{
    Rectangle bounds = new Rectangle(0,0,10,10); // private machen, ggf. mit get-Methode

    public void setX (int x)
    {
         bounds.x = x;
    } 
    ...
}


class Rechteck
{
    Rectangle bounds = new Rectangle(); // private machen, ggf. mit get-Methode

    public void setX (int x)
    {
         bounds.x = x;
    } 
    ...

    public boolean hits(Frucht frucht)
    {
        return this.bounds.intersects(frucht.getBounds());
    }
}
 

Quaxli

Top Contributor
Frucht und Rechteck kannst Du sehr viel kleiner halten, z. b. so:

Code:
import java.awt.*;
import java.awt.geom.Rectangle2D;

public class Rechteck extends Rectangle2D.Double {

	private  Color farbe= Color.blue;

   
   public Rechteck (int pX1, int pY1, int breite, int hoehe, Color f){
     super(pX1,pY1,breite,hoehe);  
   }
   
   public void zeichne (Graphics g){
      g.setColor(farbe);
      g.drawRect((int)getX(),(int)getY(),(int)getWidth(),(int)getHeight()); //der hier ist unnötig wenn Du sonst nix machst
      g.drawRect((int)getX(),(int)getY(),(int)getWidth(),(int)getHeight());
   }

}

Zum Applet sag ich später was, da fehlt mir jetzt die Zeit. Oder vielleicht macht ja sonst jemand ein paar Anmerkungen.

<edit>
Marco13 war schon schneller... :)
</edit>
 

Quaxli

Top Contributor
So, ich hab' mal dran rumgefrickelt. Es ist aber erstmal ein Rechteck und keine Schlange. Die ist nämlich nicht ganz so einfach zu realisieren, wie du noch merken wirst... ;)

Die Klasse Steuerung ist lauffähig, aber ich habe nur das notwendigste umgesetzt. Du sollst ja schließlich auch was lernen.... :)

Zuerst hab' ich die Klasse Rechteck nochmal aufgebohrt:

Code:
import java.awt.*;
import java.awt.geom.Rectangle2D;

public class Rechteck extends Rectangle2D.Double {

	private  Color farbe= Color.blue;
	int dx = 0;
	int dy = 0;
	
   
   public Rechteck (int pX1, int pY1, int breite, int hoehe, Color f){
     super(pX1,pY1,breite,hoehe);  
     farbe = f;
     dx = 20;  //<<< nur mal als Beispiel
     dy = 20;
   }
   
   public void zeichne (Graphics g){
      g.setColor(farbe);
      g.drawRect((int)getX(),(int)getY(),(int)getWidth(),(int)getHeight()); //der hier ist unnötig wenn Du sonst nix machst
      g.drawRect((int)getX(),(int)getY(),(int)getWidth(),(int)getHeight());
   }
   
   //Bewegung in Abhängigkeit der Zeit, die der letze Durchlauf benötigt hat.
   public void move(long delta){
  	
  	 if(dx!=0){
  		 x += (dx*delta/1e9);
  	 }
  	 
  	 if(dy!=0){
  		 y += (dy*delta/1e9);
  	 }
  	 
   }
   
   public void setHorizontalSpeed(int i){
  	 dx = i;
   }
   
   public void setVerticalSpeed(int i){
  	 dy = i;
   }

}


Und dann die Klasse Steuerung:

Code:
import java.applet.Applet;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.*;


//Auf JApplet umgestellt, damit eine doppelgebufferte KOmponente reingepackt werden kann
public class Steuerung extends Applet implements KeyListener, Runnable {
	
	private static final long	serialVersionUID	= 1L;
	
	private Rechteck	obj[]		= new Rechteck[1]; //für den Anfang erst mal nur eines ;-)
	private Frucht		obst;
	
	boolean running = true; //boolean für GameLoop
	long delta = 0; //Zeit für Schleifendurchlauf
	long last = 0;  //Zeitmerker
	
	//Steuerung über Boolean realisieren, dann werden auch Mehrfacheingaben bemerkt!
	boolean left = false;  
	boolean right = false;
	boolean up = false;
	boolean down = false;

	//BufferedImage für Doppelbufferung
	BufferedImage buf;

	public void init() {
		setSize(800,800);
		//BufferedImage für Doppelbufferung instanziieren.
		buf = new BufferedImage(getWidth(),getHeight(),BufferedImage.TYPE_INT_RGB);

		//Ojbekte
		obst = new Frucht(50,50,20,20, Color.cyan); //Zufall mal rausgenommen, Dimension eingefügt
		obj[0] = new Rechteck(20, 10,20,20,Color.GREEN); //Dimension in Konstruktor
		
		//KeyListener
    addKeyListener(this);
    
    //Zeitstempel
		last = System.nanoTime();
		
		//GameLoop in eigenem Thread laufen lassen
		Thread t = new Thread(this);
		t.start();

	}


	public void keyTyped(KeyEvent e) {

	}

	public void keyPressed(KeyEvent e) {

		//KeyEvents in booleans schreiben
		if(e.getKeyCode()==KeyEvent.VK_UP){
			up = true;
		}
		
		if(e.getKeyCode()==KeyEvent.VK_DOWN){
			down = true;
		}

		if(e.getKeyCode()==KeyEvent.VK_LEFT){
			left = true;
		}

		if(e.getKeyCode()==KeyEvent.VK_RIGHT){
			right = true;
		}

	}

	public void keyReleased(KeyEvent e){
		
		if(e.getKeyCode()==KeyEvent.VK_UP){
			up = false;
		}
		
		if(e.getKeyCode()==KeyEvent.VK_DOWN){
			down = false;
		}

		if(e.getKeyCode()==KeyEvent.VK_LEFT){
			left = false;
		}

		if(e.getKeyCode()==KeyEvent.VK_RIGHT){
			right = false;
		}
		
		if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
			System.exit(0);
		}

	}

	//Run-Methode aus Runnable implementiert (vgl. Interfaces)
	//Hier läuft der GameLoop
	public void run() {
	
		while(running){
			
			delta = System.nanoTime() - last; //Zeit für den letzten Loop stoppen
			last = System.nanoTime();  //Zeit merken
			
			//für Spielablauf notwendige Methoden
			checkKeys();
			moveObjects();
			doLogic();
			
			//alles malen
			repaint();
			
			//kleines Päuschen, damit auch die anderen mal dürfen
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {}
			
		}//while
		
		
	}
	
	
	//Methoden des GameLoops
	private void checkKeys(){
		//hier booleans der Keys abfragen
		if(up){
			System.out.println("steuere Hoch...");
			//....
		}
		
		//undsoweiter...
	}
	
	private void moveObjects(){
		//hierObjekte bewegen
		for (int i = 0; i < obj.length; i++){ 
			obj[i].move(delta);
		}
	}
	
	private void doLogic(){
		if(obj[0].intersects(obst)){
			System.out.println("Kollision");
		}
	}

	
	//paint-Methode zum Zeichnen überschreiben
	public void paint(Graphics g) {

		Graphics g2 = buf.createGraphics();
		
		
		g2.setColor(Color.BLACK);
		g2.fillRect(0,0,getWidth(),getHeight());
		
		obst.zeichne(g2);
		
		for (int i = 0; i < obj.length; i++){ 
			obj[i].zeichne(g2);
		}
		
		g.drawImage(buf,0,0,this);
	}

 
	//Überschreibe Update für Doppelbufferung
	public void update(Graphics g) {
		paint(g);
	}
}

Viel Spaß beim fetig programmieren....
 

Nils ait

Mitglied
ersma danke aber was muss ich hier machen:

Code:
 private void checkKeys(){
      //hier booleans der Keys abfragen
      if(up){
         System.out.println("steuere Hoch...");
         //....
      }
      
      //undsoweiter...
   }
 

Quaxli

Top Contributor
Die Steuerung realiseieren, z. B.

Code:
 if(up){
   obj[0].setVerticalSpeed(-20); //oder so ähnlich
 }

 if(down){
  obj.[0].setVerticalSpeed(20); 
 }

 //und so weiter und so fort.
 

Nils ait

Mitglied
irgend etwas stimmt da nicht ich habe noch 2 fehler meine codes sehen grade so aus :

Steuerung

Code:
package snake_forum;

import java.applet.Applet;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.*;


//Auf JApplet umgestellt, damit eine doppelgebufferte KOmponente reingepackt werden kann
public class Steuerung extends Applet implements KeyListener, Runnable {
   
   private static final long   serialVersionUID   = 1L;
   
   private Rechteck   obj[]      = new Rechteck[1]; //für den Anfang erst mal nur eines ;-)
   private Frucht      obst;
   
   boolean running = true; //boolean für GameLoop
   long delta = 0; //Zeit für Schleifendurchlauf
   long last = 0;  //Zeitmerker
   
   //Steuerung über Boolean realisieren, dann werden auch Mehrfacheingaben bemerkt!
   boolean left = false; 
   boolean right = false;
   boolean up = false;
   boolean down = false;

   //BufferedImage für Doppelbufferung
   BufferedImage buf;

   public void init() {
      setSize(800,800);
      //BufferedImage für Doppelbufferung instanziieren.
      buf = new BufferedImage(getWidth(),getHeight(),BufferedImage.TYPE_INT_RGB);

      //Ojbekte
      obst = new Frucht(50,50,20,20, Color.cyan); //Zufall mal rausgenommen, Dimension eingefügt
      obj[0] = new Rechteck(20, 10,20,20,Color.GREEN); //Dimension in Konstruktor
      
      //KeyListener
    addKeyListener(this);
   
    //Zeitstempel
      last = System.nanoTime();
      
      //GameLoop in eigenem Thread laufen lassen
      Thread t = new Thread(this);
      t.start();

   }


   public void keyTyped(KeyEvent e) {

   }

   public void keyPressed(KeyEvent e) {

      //KeyEvents in booleans schreiben
      if(e.getKeyCode()==KeyEvent.VK_UP){
         up = true;
      }
      
      if(e.getKeyCode()==KeyEvent.VK_DOWN){
         down = true;
      }

      if(e.getKeyCode()==KeyEvent.VK_LEFT){
         left = true;
      }

      if(e.getKeyCode()==KeyEvent.VK_RIGHT){
         right = true;
      }

   }

   public void keyReleased(KeyEvent e){
      
      if(e.getKeyCode()==KeyEvent.VK_UP){
         up = false;
      }
      
      if(e.getKeyCode()==KeyEvent.VK_DOWN){
         down = false;
      }

      if(e.getKeyCode()==KeyEvent.VK_LEFT){
         left = false;
      }

      if(e.getKeyCode()==KeyEvent.VK_RIGHT){
         right = false;
      }
      
      if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
         System.exit(0);
      }

   }

   //Run-Methode aus Runnable implementiert (vgl. Interfaces)
   //Hier läuft der GameLoop
   public void run() {
   
      while(running){
         
         delta = System.nanoTime() - last; //Zeit für den letzten Loop stoppen
         last = System.nanoTime();  //Zeit merken
         
         //für Spielablauf notwendige Methoden
         checkKeys();
         moveObjects();
         doLogic();
         
         //alles malen
         repaint();
         
         //kleines Päuschen, damit auch die anderen mal dürfen
         try {
            Thread.sleep(10);
         } catch (InterruptedException e) {}
         
      }//while
      
      
   }
   
   
   //Methoden des GameLoops
   private void checkKeys(){
      //hier booleans der Keys abfragen
      if(up)
      {
         System.out.println("steuere Hoch...");
      }
      if(down)
      {
          System.out.println("Steure runter"); 
          
        }
      if(left)
      {
    	System.out.println("Steure Links");   
      }
      
      if(right)
      {
    	  System.out.println("Steure rechts"); 
      }

      if(up){
         obj[0].setVerticalSpeed(-20); //oder so ähnlich
      }

      if(down){
        obj[0].setVerticalSpeed(20);
        
      }
      if (right){
    	  obj[0].setHorizontalSpeed(20);
    	  
      }
      if (left){
    	  obj[0].setHorizontalSpeed(-20);
      }

//      und so weiter und so fort. 
   }
   
   private void moveObjects(){
      //hierObjekte bewegen
      for (int i = 0; i < obj.length; i++){
         obj[i].move(delta);
      }
   }
   
   private void doLogic(){
      if(obj[0].intersects(obst)){
         System.out.println("Kollision");
      }
   }

   
   //paint-Methode zum Zeichnen überschreiben
   public void paint(Graphics g) {

      Graphics g2 = buf.createGraphics();
      
      
      g2.setColor(Color.BLACK);
      g2.fillRect(0,0,getWidth(),getHeight());
      
      obst.zeichne(g2);
      
      for (int i = 0; i < obj.length; i++){
         obj[i].zeichne(g2);
      }
      
      g.drawImage(buf,0,0,this);
   }


   //Überschreibe Update für Doppelbufferung
   public void update(Graphics g) {
      paint(g);
   }
}

Rechteck:

Code:
package snake_forum;

import java.awt.*;
import java.awt.geom.Rectangle2D;

public class Rechteck extends Rectangle2D.Double {

   private  Color farbe= Color.blue;
   int dx = 0;
   int dy = 0;
   
   
   public Rechteck (int pX1, int pY1, int breite, int hoehe, Color f){
     super(pX1,pY1,breite,hoehe); 
     farbe = f;
     dx = 20;  //<<< nur mal als Beispiel
     dy = 20;
   }
   
   public void zeichne (Graphics g){
      g.setColor(farbe);
      g.drawRect((int)getX(),(int)getY(),(int)getWidth(),(int)getHeight()); //der hier ist unnötig wenn Du sonst nix machst
      g.drawRect((int)getX(),(int)getY(),(int)getWidth(),(int)getHeight());
   }
   
   //Bewegung in Abhängigkeit der Zeit, die der letze Durchlauf benötigt hat.
   public void move(long delta){
     
      if(dx!=0){
         x += (dx*delta/1e9);
      }
     
      if(dy!=0){
         y += (dy*delta/1e9);
      }
     
   }
   
   public void setHorizontalSpeed(int i){
      dx = i;
   }
   
   public void setVerticalSpeed(int i){
      dy = i;
   }

}

Frucht:
Code:
package snake_forum;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Frucht extends Applet {
	private int Fx1;
	private int Fy1;
	
	private  Color farbe= Color.CYAN;

	
	public Frucht (int oX1, int oY1, Color f){
		
		this.Fx1=oX1;
		this.Fy1=oY1;
	
		
		
		farbe = f;
	}
	
	public void zeichne (Graphics g){
		g.setColor(farbe);
		g.drawRect(this.Fx1, this.Fy1, 10,10);
		g.fillRect(this.Fx1, this.Fy1, 10,10);
		

		
	}
	public int getfX(){
		return Fx1;
	}
	public void setfX (int gx){
	this.Fx1 =Fx1;	
	}
	public int getfY(){
		return Fy1;
	}
	public void setY(int gy){
		this.Fy1=Fy1;
	}

}
 

Soulfly

Bekanntes Mitglied
Frucht is kein Applet!!! Es sollte nur eine Klasse geben, die startklasse, die von Applet erbt.

Frucht extends Rectangle

Hoffe du verstehst auch warum! Ansonsten frag
 

Quaxli

Top Contributor
Nils ait hat gesagt.:
in der steuerung z. 37 und z.179

Geht's noch ungenauer? ???:L Nachdem das eine Hausaufgabe ist, geben wir gerne Hilfestellungen, aber wir programmieren das Ding nicht für Dich. Nachdem Du schon einiges selbst gemacht hast, habe ich Dein Applet
etwas lauffähiger gemacht, da Du einige Prinzipien nicht beachtet hattest bzw. nicht wußtest. Und da habe ich schon ganz schön was für Dich rein gesteckt.

Den Rest mußt Du schon selbst machen!

Wenn Du ein Problem hast, helfen wir gerne, aber dann nenne die in der Konsole ausgegebene Fehlermeldung oder beschreibe das Verhalten Deines Programms genauer.
Außerdem solltest Du Tipps schon umsetzen. Sowohl Marco13 als auch ich haben bereits ganz am Anfang geschrieben, das Rechteck und Frucht nicht von Applet erben sollen, sondern daß Rectangle geeigneter ist. :(
 

Nils ait

Mitglied
kA wie des gemeint ist könntest du mir evtl den code von Frucht geben ? weil des klappt nicht welches rectangle muss ich da nehmen? 2D?oder rectangleDemo?
 

Nils ait

Mitglied
ja das problem ist das ich kA hab wie ich mit rectangle verfahre ich hab des noch nie benutzt und es wurde uns auch noch nie in irgendeiner hinsicht erklärt oder gezeigt oder sons was
 

Marco13

Top Contributor
Dir hat bestimmt auch niemand erklärt, wie man sich hier im Forum anmeldet - du hast es einfach gemacht :)

Das Beispielprogramm, das ich oben verlinkt hatte, verwendet ja auch Rectangles, die bewegt werden, und zwischen denen Überschneidungstests gemacht werden. Wenn's irgendwo hakt, schreib' dir eine kleine Testklasse, wo nur in der main zwei Rectangles erstellt und die dann auf Überschneidungen getestet werden. Wenn DAS auch nicht klappt, poste den Code und deine Frage.

Ob du Rectangle oder Rectangle2D verwendest, macht keinen sooo großen Unterschied. Rectangle2D bietet ein paar zusätzliche, praktische Funktionen, ist aber einen Tick komplizierter zu verwenden.
 

Nils ait

Mitglied
ich hab da noch en paar kleine fragen ich hab des frucht jetz programmiert ich weiss aber nicht ob des so stimmt also fehler werden keine mehr angezeigt

Code:
public class Frucht extends Rectangle {
	private  Color farbe= Color.CYAN;
	Rectangle bounds = new Rectangle(200,200,10,10); // private machen, ggf. mit get-Methode
	


    public void setX (int x)
    {
         bounds.x = x;
    } 
    public void sety (int y)
    {
    	bounds.y =y;
    }
    public int getx()
    {
    	return x;
    }
    public int gety()
    {
    	return y;
    }
	public void zeichne(Graphics g2) {
		// TODO Automatisch erstellter Methoden-Stub
		g2.setColor(farbe);
		g2.drawRect(this.x, this.y, 10,10);
		g2.fillRect(this.x, this.y, 10,10);
	}

}

und des mit dem aufeinander treffen klappt immer noch nicht :'(
 

Nils ait

Mitglied
okay hab des mit der kollision mal gemacht klappt aber nicht

Code:
 public void check()
   {
       if (obj[0].intersects(obst))
       {
       obst.setX(Zufall.Frucht());
       obst.sety(Zufall.Frucht());}
       
       }
 

Marco13

Top Contributor
Code:
public class Frucht extends Rectangle {
   private  Color farbe= Color.CYAN;
   Rectangle bounds = new Rectangle(200,200,10,10); // private machen, ggf. mit get-Methode
Da hast du jetzt zwei Sachen vermischt: Im Moment gilt
Frucht IST ein Rectangle (wegen "extends Rectangle")
UND
Frucht ENTHÄLT ein Rectangle (die bounds)

Du solltest nur eins von beidem verwenden. Z.B.:
Code:
public class Frucht extends Rectangle 
{
   private  Color farbe= Color.CYAN;

    public Frucht()
    {
        this.width = 10; // Richtige Größe für "this" (was ja ein Rectangle ist) setzen
        this.height = 10;
    }

    public void setX (int x)
    {
         this.x = x;
    }
    public void sety (int y)
    {
       this.y =y;
    }
    public int getx()
    {
       return x;
    }
    public int gety()
    {
       return y;
    }
   public void zeichne(Graphics g2) {
      // TODO Automatisch erstellter Methoden-Stub
      g2.setColor(farbe);
      g2.drawRect(this.x, this.y, this.width, this.height); // Hier dir Größe von "this" verwenden!
      g2.fillRect(this.x, this.y, this.width, this.height);
   }

}

Was genau die check-Methode machen sollte, ist mir nicht ganz klar. Aber du könntest mit dem oben stehenden Code jetzt sowas machen wie
Code:
Frucht frucht = new Frucht();
Rectangle someRectangle = new Rectangle(10,10,10,10);

frucht.setX(5);
frucht.setY(5);
System.out.println(someRectangle.intesects(frucht)); // Gibt "true" aus

frucht.setX(333);
frucht.setY(333);
System.out.println(someRectangle.intesects(frucht)); // Gibt "false" aus
 

Nils ait

Mitglied
also die check methode soll schauen ob die schlange(Rechteck) die Frucht(obst) berührt hat und wenn es so ist soll obst woanderst wieder auftauchen !
 

Nils ait

Mitglied
jetzt hab ich doch noch eine frage wie kann ich denn nun dieses applet zu einer exe macen ode eben ausführen ohne das ich eclipse starten muss ?
 

Soulfly

Bekanntes Mitglied
Das geht zwar, ist dann aber kein java mehr. Es gibt da drei Möglichenkeiten, die alle stinken (zumindest mir):

1. eigenes Programm mit der JRE, in eine Exe packen -> Resultat eine 20-30 Mb große exe-Datei (schlimm)

2. Pseudo Exe-Datei erstellen (ähnelt den Jar-Archive), es muss immernoch eine JRE auf dem System installiert sein.

3. den Java Code von den Java GNU Compiler in natives C++ umsetzen lassen und dann zur Exe formen

Wenn du richtig Java einsetzen willst, nutze obige Sachen bitte nicht!!! Lass dein Programm von Eclipse in ein ausführbares Jar-Archiv packen. Das ist dann so ähnlich wie ne Exe und mit doppelklick ausführbar. (Wenn ne JRE auf dem System installiert ist natürlich)

Und dann gibt es noch Webstart. Sehr nette Sache! Aber dass jetzt noch beschreiben fehlt mir die Muße. Google ist dein Freund.


Eins, was ich jetzt noch hoffe!

Euer Lehrer hat das selber nicht verlangt oder? War das deine Idee?
 

Nils ait

Mitglied
naja verlangt nich so wirklich wir haben vor den sommerferien angefangen damit also am letzten schultag und da ich tagsüber sowieso arbeiten muss in nem institut und da als hiwi bin und zum größten teil nur pc neuaufsetzen muss und zusammenschrauben muss und des netzwerk en bissl beausichtigen is es da immer en bissl langweillig also programmier ich des nebenher
 

Nils ait

Mitglied
okay ich weiss jetz wies geht aber da kommt immer eine fehlermeldung : failed to load mainfest attribute from C:Dokumente und einstellungen\Desktop\Snake
 

Soulfly

Bekanntes Mitglied
Da scheint es einfach so zu sein, als wenn du einen Absoluten Pfad zur Ausführung angegeben hast. In Eclipse, wenn du auf die Erstellung eines Jar Archivs klickst kannst du dort auch angeben, was zB die ausführbare Klasse ist.

Oh, wobei ich gerade bemerke!! Du hast ja ein Applet. Dann funktioniert das nicht. Du musst das dann in einer HTML-Datei einbetten (google/forum) dann geht das. Ansonsten mach aus deinem Programm eine Application. Heißt soviel wie "extends JFrame" plus geringfügige Änderungen.
 

Nils ait

Mitglied
also gut ich bekomm den scheiss nich hin -.- kann ich einem von euch des vielleicht per e mail als rar zu senden und einer von euch könnte mir des machen wäre echt super
 

Siassei

Bekanntes Mitglied
Nils ait hat gesagt.:
also gut ich bekomm den scheiss nich hin -.- kann ich einem von euch des vielleicht per e mail als rar zu senden und einer von euch könnte mir des machen wäre echt super
Wir sollen hier deine Hausaufgaben erledigen? Verstehe ich das richtig? Falls ja, dann möge doch jemand diesen Thread schliessen :noe:
 

Nils ait

Mitglied
nein... ich will nicht das ihr meine hausaufgeben macht ich bin ja fertig damit... ich will des nur vom desktop aus starten!
 

Nils ait

Mitglied
Siassei hat gesagt.:
Nils ait hat gesagt.:
also gut ich bekomm den scheiss nich hin -.- kann ich einem von euch des vielleicht per e mail als rar zu senden und einer von euch könnte mir des machen wäre echt super
Wir sollen hier deine Hausaufgaben erledigen? Verstehe ich das richtig? Falls ja, dann möge doch jemand diesen Thread schliessen :noe:

und selbst wenn ich hier fragen würde ob jemand meine hausaufgaben machen kann darf ich das auch es steht nirgends das es verboten ist zu fragen ob jemand seine hausaufgeben macht ... wenn es doch steht find ich es toll dass du das so toll gewusst hast :toll: :applaus:
 

Quaxli

Top Contributor
Marco13 hat gesagt.:
...er will ja keinen Code (davon hat er schon genug bekommen :roll: )....

Er hat sogar sehr viel Code bekommen - von mir.
Nicht das es was genutzt hätte. :(

Ich stimme Siassei zu, wenn er's nicht selber rauskriegt, es gut sein zu lassen. Genug Hinweise hat's gegeben und mit Google und der Forumssuche ist das rauszukriegen. :?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
M Hilfe bei Snake Spiele- und Multimedia-Programmierung 4
R Hilfe bei Snake-Programmierung Spiele- und Multimedia-Programmierung 6
Atten007 Minecraft Hilfe bei benutzerdefinierten Bannervorlagen in MCreator benötigt Spiele- und Multimedia-Programmierung 0
R Flappy Bird Hilfe Spiele- und Multimedia-Programmierung 1
Atten007 Minecraft Hilfe bei der Fehlerbehebung in MCreator benötigt Spiele- und Multimedia-Programmierung 1
Atten007 Minecraft Hilfe beim MCreator Plugin benötigt Spiele- und Multimedia-Programmierung 0
Atten007 Minecraft Hilfe beim MCreator Plugin benötigt Spiele- und Multimedia-Programmierung 5
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
J TreeNode erstellen [Hilfe beim Konstruktor, Zeile 16] Spiele- und Multimedia-Programmierung 2
Z Minecraft Hilfe bei Minecraft PvP Client Spiele- und Multimedia-Programmierung 21
T Hilfe beim Platzieren der Schiffe Spiele- und Multimedia-Programmierung 14
M Brauche Hilfe was zu Programmieren Spiele- und Multimedia-Programmierung 4
RalleYTN Brauche Hilfe beim Einlesen von PNGs Spiele- und Multimedia-Programmierung 14
P Hilfe für Seminar Arbeit Spiele- und Multimedia-Programmierung 9
T Pong Hilfe bei einer Website Spiele- und Multimedia-Programmierung 4
T Hilfe bei decompilen von Plugin Spiele- und Multimedia-Programmierung 6
E Brauche Hilfe was soll ich tun Spiele- und Multimedia-Programmierung 7
B HILFE bei Spieleprogrammierung mit Slick2D Spiele- und Multimedia-Programmierung 9
S Würfelspiel; Hilfe Spiele- und Multimedia-Programmierung 3
M Hilfe bei vier gewinnt Spiele- und Multimedia-Programmierung 4
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
C Visual Story programieren/hilfe Spiele- und Multimedia-Programmierung 5
L Hilfe: Moog VCF Diskretisierungs Algorithmen (Smith/Stilson u.A.) Spiele- und Multimedia-Programmierung 0
J Spielfiguren laufen lassen auf einer html Tabelle mit Hilfe von Servlets Spiele- und Multimedia-Programmierung 2
T Hintergrundmusik eines Spiels mit Hilfe von JLayer Spiele- und Multimedia-Programmierung 12
S 2D mit Slick - Anfänger sucht Hilfe Spiele- und Multimedia-Programmierung 4
C Generelle Hilfe zur lwjgl Spiele- und Multimedia-Programmierung 0
J Hilfe bei Fußballmanager Spiele- und Multimedia-Programmierung 0
C Hilfe bei einem Mosaikspiel Spiele- und Multimedia-Programmierung 16
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
E Hilfe bei Labyrinth Programmierung. Spiele- und Multimedia-Programmierung 9
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
T Aim-Hilfe Spiele- und Multimedia-Programmierung 4
S Shiritori / word chain / Wörterkette Hilfe Spiele- und Multimedia-Programmierung 1
J Hilfe bei mastermind dringend !!!!! Spiele- und Multimedia-Programmierung 3
S Hilfe bei Spielumsetzung Spiele- und Multimedia-Programmierung 6
M Kleines Spongebobspiel / Hilfe gesucht Spiele- und Multimedia-Programmierung 2
L Hilfe bei Entities benötigt Spiele- und Multimedia-Programmierung 6
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
A Minecraft Hilfe bei Minecraft Mod Spiele- und Multimedia-Programmierung 1
F Einen Sound mit veränderter Tonhöhe und Geschwindigkeit abspielen - Hilfe erbeten Spiele- und Multimedia-Programmierung 29
V Keine Ahnung von OpenGL! Hilfe wäre lieb! Spiele- und Multimedia-Programmierung 8
L Minecraft Minecraft Bukkit Plugin hilfe Spiele- und Multimedia-Programmierung 9
E Hilfe bei Highscore programmierung Spiele- und Multimedia-Programmierung 3
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
B Hilfe bei Minecraft Plugin Spiele- und Multimedia-Programmierung 3
C Java Brauche Hilfe Spiele- und Multimedia-Programmierung 5
M Hilfe bei Spiel Programmierung Spiele- und Multimedia-Programmierung 4
B Hilfe bei GameGrid Spiele- und Multimedia-Programmierung 11
J Spiel mit Java SWING, LWJGL und JMonkey [Anfänger braucht Hilfe] Spiele- und Multimedia-Programmierung 10
N Hilfe bei Tower Defense Spiele- und Multimedia-Programmierung 22
R hilfe bei 2DSpiel. Spiele- und Multimedia-Programmierung 3
S AirHockey Kollisionsprobleme, bitte um Hilfe Spiele- und Multimedia-Programmierung 2
L Abfrage-Fehler? - Hilfe bei Tetris Spiele- und Multimedia-Programmierung 9
R Hilfe bei Reversi/Othello Spiele- und Multimedia-Programmierung 6
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
B Hilfe bekomme den IF befehl nicht hin Spiele- und Multimedia-Programmierung 10
C RFID Überwachung - Hilfe Spiele- und Multimedia-Programmierung 3
javajavajava Java Lotto Zahl 6 aus 49 - Brauche Hilfe Spiele- und Multimedia-Programmierung 3
radiac FullScreenExlusiveMode HILFE!!! Spiele- und Multimedia-Programmierung 6
E TetrisApplet Thread Hilfe Spiele- und Multimedia-Programmierung 6
H PingPong HILFE !!! Spiele- und Multimedia-Programmierung 3
G GO-Spiel in Java noch fehlerhaft hoffe um hilfe Spiele- und Multimedia-Programmierung 7
N Brauche Hilfe bei kleinem Spiel Spiele- und Multimedia-Programmierung 40
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
L Brauche hilfe mit KeyEvent Spiele- und Multimedia-Programmierung 4
B brauche hilfe bei der tastenzuodnung Spiele- und Multimedia-Programmierung 3
E Hilfe bei einer GUI Programmierung mit Graph Spiele- und Multimedia-Programmierung 30
H Decke zeichnen mit Hilfe eines Polygons Spiele- und Multimedia-Programmierung 2
W Hilfe bei Pong mit Bluej Spiele- und Multimedia-Programmierung 4
A Hilfe bei der Methode COLOR (Java) Spiele- und Multimedia-Programmierung 10
S Hilfe: Ich sehe durch die ganze Api's nicht mehr durch! Spiele- und Multimedia-Programmierung 15
C Hilfe bei einfachen Game Spiele- und Multimedia-Programmierung 15
T Bitte um Hilfe bei Animationen Spiele- und Multimedia-Programmierung 10
G Fragespiel, Hilfe ! like Wer wird Millinär Spiele- und Multimedia-Programmierung 12
D Hilfe mit mini-spiel für die Schule. Spiele- und Multimedia-Programmierung 1
F Brauche Hilfe bei Bewegung eines Rechtecks [Applet] Spiele- und Multimedia-Programmierung 5
G Hilfe bei 3Gewinnt! Spiele- und Multimedia-Programmierung 2
C anfänger braucht hilfe für info unterricht Spiele- und Multimedia-Programmierung 21
A Hilfe bei Programmierung von Abalone Spiele- und Multimedia-Programmierung 6
S Hilfe bei Galgenmännchen Spiele- und Multimedia-Programmierung 4
M 'Mensch ärgere Dich nicht' - Hilfe! Spiele- und Multimedia-Programmierung 12
K Hilfe bei Grafikeinbindung in einem Spiel Spiele- und Multimedia-Programmierung 6
H Ich benötige Hilfe [Noob] Spiele- und Multimedia-Programmierung 9
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
B Hilfe gesucht!! (bewegen von grafischen Objekten) Spiele- und Multimedia-Programmierung 3
J SNAKE-GAME-LOOP / (Applet zu Application) Spiele- und Multimedia-Programmierung 4
P Snake Game Verbessern Spiele- und Multimedia-Programmierung 15
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
B "Snake"-Game Logikfehler Spiele- und Multimedia-Programmierung 1
B noch ein snake klon Spiele- und Multimedia-Programmierung 2
Viktim Snake - Schlange wächst nicht Spiele- und Multimedia-Programmierung 3
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
N Schulprogramm "Snake" Spiele- und Multimedia-Programmierung 4
C Hinterteil von Snake programmieren Spiele- und Multimedia-Programmierung 11
S Snake versuch Spiele- und Multimedia-Programmierung 14
J Snake Programmierung Spiele- und Multimedia-Programmierung 18

Ähnliche Java Themen

Neue Themen


Oben