Snake Programmierung

Joeline

Mitglied
Hallo,
ich habe noch nie ein Spiel programmiert, deshalb habe ich gleich am Anfang der Programmierung von Snake so meine Probleme.

Ich weiß mein Spiel ist noch lange nicht fertig und das kann so noch nicht funktionieren, aber was ich erst einmal hinbekommen möchte ist, dass die Schlange (besteht aus bildern) auf dem dafür vorgesehenen "Spielfeld" erscheint. Das Applet und die Schlange ist vorerst nur provisorisch, damit ich überprüfen konnte ob sich die Schlange schon wenigstens gleichmäßig in eine Richtung bewegt.

Könnt Ihr euch den code bitte mal anschauen und mir sagen wie ich die schlange auf das Spielfeld bekomme?? Dankeschön schon im Vorraus!

Hier wir der Schlangenkörper erstellt

Java:
package paketSnake;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.applet.Applet;


//Damit das Applet einen Thread versteht, wird das Interface Runnable API: java.lang.Runnable implementiert.
public class Schlange extends Applet implements Runnable
{ 
	public Schlange()
	{
		addKeyListener(new KeyEvents());
		setFocusable(true);
	}
	
	//Definiert die Anfangswerte
	int px = 0;
    int py = 50;
    Thread wiederhole;// Objektname aufgabenbezogen
    
    private boolean left = false;
    private boolean right = true;
    private boolean up = false;
    private boolean down = false;
 
    
    
    public boolean keyPressed (KeyEvent event)
    {
   
    	
    	if (event.getKeyCode()==KeyEvent.VK_LEFT) 
    	{
    		left= true;
    		right=false;
    		up = false;
    		down = false;
    	}
    	
    	if (event.getKeyCode()==KeyEvent.VK_RIGHT)
    	{
    		right = true;
    		left= false;
    		up = false;
    		down = false;
    	}
    	if (event.getKeyCode()==KeyEvent.VK_UP)
    	{
    		up = true;
    		right = false;
    		left= false;
    		down = false;
    	}
    	
    	if (event.getKeyCode()==KeyEvent.VK_DOWN)
    	{
    		down = true;
    		right = false;
    		left= false;
    		up = false;
    	}
    	return true;
    
    	
    }
    

	 public void start()
	 {//Thread erzeugen und starten
	        wiederhole = new Thread(this);
	        wiederhole.start();
	        
	    }
	 
	 //Innerhalb der run() Methode teile ich in einer Dauerschleife mit was zu wiederholen ist.
	    public void run(){//wiederhole
	    	//Eine unendliche Schleife starten
			//die alle 100 Millisekunden (Standard) das Bild Aktualisiert und 
			//Die Schlange um ein Kästchen weiter bewegt
	    	

	        while(true)
	        {
	        	
	        	if (right)
	        	{
	        		px++;//Wert aendern
		            repaint();//neu zeichnen
		            try{ wiederhole.sleep(60);}//pausieren
		            catch(InterruptedException e){}
	        	}
	        	
	        	if (left)
	        	{
	        		px--;
	        		repaint();
	        		try{ wiederhole.sleep(60);}//pausieren (//Standardeinstellung: 100?)
		            catch(InterruptedException e){}	
	        	}
	        	
	        	if (up)
	        	{
	        		py--;;
	        		repaint();
	        		try{ wiederhole.sleep(60);}//pausieren
		            catch(InterruptedException e){}	
	        	}
	        	
	        	if (down)
	        	{
	        		py++;
	        		repaint();
	        		try{ wiederhole.sleep(60);}//pausieren
		            catch(InterruptedException e){}	
	        	}
	            
	        }
	    }

	    public void paint(Graphics g)//zuerst Eigenschaft dann Objekt
		{  
	    	super.paint(g);
			/**
			 * Bilder sind vom Typ Image. Der Dateiname des Bildes (GIF oder JPG) wird aus der Klasse Toolkit dem Image Objekt mit der Methode:
				Toolkit.getDefaultToolkit().getImage (DateinameDesBildes) ¸bergeben.
				Anschlieflend kann es als Graphics-Objekt mit der Methode: drawImage(nameImageObjekt,x,y,null) gezeichnet werden.
			 */
			
	    	if (right)
	    	{
			// Objekt holen
	    		Image rhead = getImage(getCodeBase(),"SnakeBody/snake_head_r.jpg");
		        Image rbody = getImage(getCodeBase(),"SnakeBody/snake_body_r.jpg");
		        Image rtail = getImage(getCodeBase(),"SnakeBody/snake_tail_r.jpg");
    		 
			// Objekt ausgeben
			        g.drawImage(rhead,px,py,this);
			        g.drawImage(rbody,px-10,py,this);
			        g.drawImage(rbody,px-20,py,this);
			        g.drawImage(rbody,px-30,py,this);
			        g.drawImage(rbody,px-40,py,this);
			        g.drawImage(rtail,px-50,py,this);
	    	}   
	    	
	    	if (left)
	    	{
	    		Image lhead = getImage(getCodeBase(),"SnakeBody/snake_head_l.jpg");
		        Image lbody = getImage(getCodeBase(),"SnakeBody/snake_body_l.jpg");
		        Image ltail = getImage(getCodeBase(),"SnakeBody/snake_tail_l.jpg");
		        
		        g.drawImage(lhead,px,py,this);
		        g.drawImage(lbody,px+10,py,this);
		        g.drawImage(lbody,px+20,py,this);
		        g.drawImage(lbody,px+30,py,this);
		        g.drawImage(lbody,px+40,py,this);
		        g.drawImage(ltail,px+50,py,this);
		           
	    	}
	    	
	    	if (up)
	    	{
	    		Image uhead = getImage(getCodeBase(),"SnakeBody/snake_head_u.jpg");
		        Image ubody = getImage(getCodeBase(),"SnakeBody/snake_body_u.jpg");
		        Image utail = getImage(getCodeBase(),"SnakeBody/snake_tail_u.jpg");
		        
		        g.drawImage(uhead,px,py,this);
		        g.drawImage(ubody,px,py+10,this);
		        g.drawImage(ubody,px,py+20,this);
		        g.drawImage(ubody,px,py+30,this);
		        g.drawImage(ubody,px,py+40,this);
		        g.drawImage(utail,px,py+50,this);
	    		
	    	}
	    	
	    	if (down)
	    	{
	    		Image dhead = getImage(getCodeBase(),"SnakeBody/snake_head_d.jpg");
		        Image dbody = getImage(getCodeBase(),"SnakeBody/snake_body_d.jpg");
		        Image dtail = getImage(getCodeBase(),"SnakeBody/snake_tail_d.jpg");
		 
		// Objekt ausgeben
		        g.drawImage(dhead,px,py,this);
		        g.drawImage(dbody,px,py-10,this);
		        g.drawImage(dbody,px,py-20,this);
		        g.drawImage(dbody,px,py-30,this);
		        g.drawImage(dbody,px,py-40,this);
		        g.drawImage(dtail,px,py-50,this);
	    	}
	    		
			        
		} 
	    
	    public static void main(String[] args)
		  {
		    new Schlange();
		  
		  }
		   
}

Das hier ist mein Spielfeld

Java:
package paketSnake;

import java.awt.*;
import java.awt.event.*;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;
import javax.swing.SwingUtilities;
import java.awt.Graphics; // Enthält Methoden zum zeichnen geometrischer Figuren
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;

/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Spiel extends javax.swing.JFrame {
	private JPanel pLeiste;
	private JPanel lbHintergrund;
	private JLabel lbScore;
	private JButton btHautmenue;
	


	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Spiel inst = new Spiel();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
				
			}
			
			
		});
	}
	
	public Spiel() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				pLeiste = new JPanel();
				getContentPane().add(pLeiste);
				pLeiste.setBounds(0, 262, 452, 25);
				pLeiste.setLayout(null);
				
				{
					btHautmenue = new JButton();
					pLeiste.add(btHautmenue);
					btHautmenue.setText("Hauptmenü");
					btHautmenue.setBounds(349, 0, 98, 22);
					btHautmenue.setFont(new java.awt.Font("Arial",0,11));
					btHautmenue.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							btHautmenueActionPerformed(evt);
							
							Hauptmenue menueFenster = new Hauptmenue();
							menueFenster.setVisible(true);
							
							Spiel.this.dispose();
						}
					});

				}
				{
					lbScore = new JLabel();
					pLeiste.add(lbScore);
					lbScore.setText("Score:");
					lbScore.setBounds(6, 3, 49, 15);
					lbScore.setFont(new java.awt.Font("Arial",0,11));
				}
			}
			{
				lbHintergrund = new JPanel();
				getContentPane().add(lbHintergrund);
				lbHintergrund.setBounds(0, 0, 460, 259);
				lbHintergrund.setBackground(new java.awt.Color(255,255,255));
				lbHintergrund.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));

			}
			
			pack();
			setSize(460, 314);
			setTitle("Snake");
			
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void btHautmenueActionPerformed(ActionEvent evt) {
		System.out.println("btHautmenue.actionPerformed, event="+evt);
		//TODO add your code for btHautmenue.actionPerformed
	}
	
}
 

Joeline

Mitglied
Aso hätt mir eigentlich auch selber aufallen müssen, ein Aufruf von repaint reicht in dem fall ja.

Dankeschön, aber du hast meine Frage noch nicht richtig beantwortet und ich habe die Antwort auf dieses Problem auch so noch nicht gefunden. Ich wollte statt dem Applet die Klasse Spiel aufrufen, auf der dann meine Schlange sich bewegt. Ungefär so nur dass hier nur das Spielfeld aufgerufen wird:

Java:
package PaketSnake;

import java.awt.*;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


//Damit das Applet einen Thread versteht, wird das Interface Runnable API: java.lang.Runnable implementiert.
public class Schlange extends Spiel implements Runnable
{ 
	//Definiert die Anfangswerte, beginnt links oben
	int px = 0;
    int py = 50;
    Thread wiederhole;// Objektname aufgabenbezogen
    
    private boolean left = false;
    private boolean right = true;
    private boolean up = false;
    private boolean down = false;

    public void keyPressed (KeyEvent e)
    {
    	int key = e.getKeyCode();

    if (key==KeyEvent.VK_LEFT) 
     {
    	left = true;
    	right = false;
    	up = false;
    	down = false;
    	
     }
 
    if (key==KeyEvent.VK_RIGHT)
     {
    	right = true;
    	left= false;
    	up = false;
    	down = false;
     }
    if (key==KeyEvent.VK_UP)
     {
    	up = true;
    	right = false;
    	left= false;
    	down = false;
     }

    if (key==KeyEvent.VK_DOWN)
     {
    	down = true;
    	right = false;
    	left= false;
    	up = false;
     }
    
    } 
    

	 public void start()
	 {//Thread erzeugen und starten
	        wiederhole = new Thread(this);
	        wiederhole.start();
	        
	    }
	 
	 //Innerhalb der run() Methode teile ich in einer Dauerschleife mit was zu wiederholen ist.
	    public void run(){//wiederhole
	    	
	        while(true)
	        {
	        	if (right)
	        	{
	        		px++;//Wert aendern
		            try{ wiederhole.sleep(60);}//pausieren
		            catch(InterruptedException e){}
	        	}
	        	
	        	if (left)
	        	{
	        		px--;
	        		try{ wiederhole.sleep(60);}//pausieren
		            catch(InterruptedException e){}	
	        	}
	        	
	        	if (up)
	        	{
	        		py--;
	        		try{ wiederhole.sleep(60);}//pausieren
		            catch(InterruptedException e){}	
	        	}
	        	
	        	if (down)
	        	{
	        		py++;
	        		try{ wiederhole.sleep(60);}//pausieren
		            catch(InterruptedException e){}	
	        	}
	        	
	        	repaint();//neu zeichnen
	            
	        }
	    }

	    public void paint(Graphics g)//zuerst Eigenschaft dann Objekt
		{ 
			/**
			 * Bilder sind vom Typ Image. Der Dateiname des Bildes (GIF oder JPG) wird aus der Klasse Toolkit dem Image Objekt mit der Methode:
				Toolkit.getDefaultToolkit().getImage (DateinameDesBildes) ¸bergeben.
				Anschlieflend kann es als Graphics-Objekt mit der Methode: drawImage(nameImageObjekt,x,y,null) gezeichnet werden.
			 */
			
	    	if (right)
	    	{
			// Objekt holen
			        Image rhead = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_head_r_2.png");
			        Image rbody = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_body_r_.png");
			        //Image rcurve = getImage(getCodeBase(),"SnakeBody/snake_curve_tr.jpg");
			        Image rtail = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_tail_r.png");
			 
			// Objekt ausgeben
			        g.drawImage(rhead,px,py,this);
			        g.drawImage(rbody,px-10,py,this);
			        g.drawImage(rbody,px-20,py,this);
			        g.drawImage(rbody,px-30,py,this);
			        g.drawImage(rbody,px-40,py,this);
			        g.drawImage(rtail,px-50,py,this);
	    	}   
	    	
	    	if (left)
	    	{
	    		Image lhead = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_head_l.png");
		        Image lbody = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_body_l.png");
		        Image ltail = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_tail_l.png");
		        
		        g.drawImage(lhead,px,py,this);
		        g.drawImage(lbody,px+10,py,this);
		        g.drawImage(lbody,px+20,py,this);
		        g.drawImage(lbody,px+30,py,this);
		        g.drawImage(lbody,px+40,py,this);
		        g.drawImage(ltail,px+50,py,this);
		           
	    	}
	    	
	    	if (up)
	    	{
	    		Image uhead = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_head_u.png");
		        Image ubody = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_body_u.png");
		        Image utail = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_tail_u.png");
		        
		        g.drawImage(uhead,px,py,this);
		        g.drawImage(ubody,px,py+10,this);
		        g.drawImage(ubody,px,py+20,this);
		        g.drawImage(ubody,px,py+30,this);
		        g.drawImage(ubody,px,py+40,this);
		        g.drawImage(utail,px,py+50,this);
	    		
	    	}
	    	
	    	if (down)
	    	{
	    		Image dhead = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_head_d.png");
		        Image dbody = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_body_d.png");
		        Image dtail = Toolkit.getDefaultToolkit().getImage("SnakeBody/snake_tail_d.png");
		 
		// Objekt ausgeben
		        g.drawImage(dhead,px,py,this);
		        g.drawImage(dbody,px,py-10,this);
		        g.drawImage(dbody,px,py-20,this);
		        g.drawImage(dbody,px,py-30,this);
		        g.drawImage(dbody,px,py-40,this);
		        g.drawImage(dtail,px,py-50,this);
	    	}
	    		
			        
		}
		   
}

Hier noch mal die Klasse Spiel
Java:
package paketSnake;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
import java.awt.Graphics; // Enth‰lt Methoden zum zeichnen geometrischer Figuren
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit [url=http://www.cloudgarden.com]Cloud Garden (Java Resources)[/url] for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class Spiel extends javax.swing.JFrame {
	private JPanel pLeiste;
	private JLabel lbHintergrund;
	private JLabel lbScore;
	private JButton btHautmenue;
	


	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Spiel inst = new Spiel();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
				
			}
			
			
		});
	}
	
	public Spiel() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				pLeiste = new JPanel();
				getContentPane().add(pLeiste);
				pLeiste.setBounds(0, 262, 452, 25);
				pLeiste.setLayout(null);
				{
					btHautmenue = new JButton();
					pLeiste.add(btHautmenue);
					btHautmenue.setText("Hauptmenü");
					btHautmenue.setBounds(349, 0, 98, 22);
					btHautmenue.setFont(new java.awt.Font("Arial",0,11));
					btHautmenue.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							btHautmenueActionPerformed(evt);
							
							Hauptmenue menueFenster = new Hauptmenue();
							menueFenster.setVisible(true);
							
							Spiel.this.dispose();
						}
					});

				}
				{
					lbScore = new JLabel();
					pLeiste.add(lbScore);
					lbScore.setText("Score:");
					lbScore.setBounds(6, 3, 49, 15);
					lbScore.setFont(new java.awt.Font("Arial",0,11));
				}
			}
			{
				lbHintergrund = new JLabel();
				getContentPane().add(lbHintergrund);
				lbHintergrund.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Bilder/Alabaster_sand.jpg")));
				lbHintergrund.setBounds(0, 0, 464, 259);
				
				
				
			}
			
			pack();
			setSize(460, 314);
			setTitle("Snake");
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void btHautmenueActionPerformed(ActionEvent evt) {
		System.out.println("btHautmenue.actionPerformed, event="+evt);
		//TODO add your code for btHautmenue.actionPerformed
	}

}
 

Quaxli

Top Contributor
Ja, ich habe Deine Frage nicht richtig beantwortet, werde ich auch nicht tun, weil Du selbst etwas tun sollst, z. B. mal ein Tutorial lesen und abgleichen, was anders gemacht ist

Der Code den Du da gepostet hast ist nicht wirklich brauchbar (mehrere repaints(), mehrere sleep(), laden von Objekten in der paint-Methode, etc.) und vermutlich auch gar nicht von Dir oder?
Sonst solltest Du nämlich zumindest keine Probleme haben, den von Applet auf Anwendung umzustellen?

Falls es zuviel Mühe macht, durch die Tutorial-Abteilung zu lesen, kannst Du auch auf den Link in meiner Signatur klicken....
 

Joeline

Mitglied
Doch der ist von mir sonst hätte er ja nicht so viele Fehler, das Problem ist das ich immer wenn ich um einen Teil erweitert habe dien oben teil, der ja funktioniert hat, einfach kopiert habe ohne nachzudenken, dass ich repaint oder sleep ja nur einmal brauche. Die verschieden Bilder bräuchte ich ja, wenn ich meine Schlange in verschiede Richtungen schauen lassen will. Da dies aber vorerst zu kompiziert wäre werde ich das noch umändern bwz. bin ich gerade dabei. Und mit dem Applet auf Anwendung umzustellen habe ich ja auch keine probleme.

Ja das Tutorial hatte ich mir ja auch schon runtergeladen, nur fällt es mir schwer mich da durchzuarbeiten, da manche Dinge die ich noch nicht kenne mich verwirren. Aber na gut, dann werd ich mir das Tutorial noch einmal genauer anschauen.
 

Joeline

Mitglied
So also ich habe jetzt noch mal neu angefangen....aber jetzt komm ich einfach nicht mehr weiter. Ich habe mein programm jetzt schon mehrmals angeschaut, aber ich komm einfach nicht drauf warum die KeyEvents bei mir nicht funktionieren. Könnt ihr mir hier vllt weiterhelfen??


Das hier ist mein Spielfeld:

Java:
package snake;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


public class Spielfeld extends javax.swing.JFrame {
	private JPanel pLeiste;
	private JPanel pSpielfeld;
	private JButton btHauptmenue;
	private JLabel lbZeit;
	private JLabel lbScore;
	

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Spielfeld  inst = new Spielfeld();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public Spielfeld () {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			BorderLayout thisLayout = new BorderLayout();
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(thisLayout);
			{
				
				pLeiste = new JPanel();
				GridLayout pLeisteLayout = new GridLayout(1, 1);
				pLeisteLayout.setColumns(1);
				pLeisteLayout.setHgap(5);
				pLeisteLayout.setVgap(5);
				pLeiste.setLayout(pLeisteLayout);
				getContentPane().add(pLeiste, BorderLayout.NORTH);
				pLeiste.setBackground(new java.awt.Color(120,228,239));
				pLeiste.setPreferredSize(new java.awt.Dimension(400, 26));
				{
					lbScore = new JLabel();
					pLeiste.add(lbScore);
					lbScore.setText("Score:");
				}
				{
					lbZeit = new JLabel();
					pLeiste.add(lbZeit);
					lbZeit.setText("Zeit:");
				}
				{
					btHauptmenue = new JButton();
					pLeiste.add(btHauptmenue);
					btHauptmenue.setText("Hauptmenü");
					btHauptmenue.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							btHauptmenueActionPerformed(evt);
							
							//Hauptmenue menueFenster = new Hauptmenue();
							//menueFenster.setVisible(true);
							
							Spielfeld.this.dispose();
						}
					});
				}
				
			}
			{
				pSpielfeld = new JPanel();
				getContentPane().add(BorderLayout.CENTER,new Schlange());
			}
			pack();
			setSize(400, 340);
			setTitle("Snake");
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void btHauptmenueActionPerformed(ActionEvent evt) {
		System.out.println("btHauptmenue.actionPerformed, event="+evt);
		//TODO add your code for btHauptmenue.actionPerformed
	}

}

Und hier ist der Code für die Aktionen, darunter die KeyEvents

Java:
package snake;

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;


public class Schlange extends JPanel implements ActionListener 
{	
	    // x- und y-Koordinaten der einzelnen Körperteile Schlange
	    private int x[] = new int[500]; 
	    private int y[] = new int[500]; 
	 
	    //private int score = 0; 
	    private int bodys = 0; 
	    private int apfel_x; 
	    private int apfel_y; 
	    private int leben = 0;
	    private Timer timer;
  
	 
	    private boolean left = false; 
	    private boolean right = true; 
	    private boolean up = false; 
	    private boolean down = false; 
	    private boolean game = true; 
	  
	    private Image body; 
	    private Image apple; 
	    private Image head; 
	     
	  
	    public Schlange() 
	    { 
	                 
	        addKeyListener(new TAdapter()); 
	          
	        setBackground(Color.white); 
	          
	        ImageIcon bild1 = new ImageIcon(this.getClass().getResource("snake_body_r.png")); 
	        body = bild1.getImage(); 
	 
	        ImageIcon bild2 = new ImageIcon(this.getClass().getResource("the_almighty_apple.png")); 
	        apple = bild2.getImage(); 
	 
	        ImageIcon bild3 = new ImageIcon(this.getClass().getResource("snake_head_r.png")); 
	        head = bild3.getImage(); 
	        
	        timer = new Timer(100, this); 
	        timer.start();
	 
	      
	        setFocusable(true); 
	        begGame(); // ruft die Methode begGame auf 
	    } 
	    
	    public void moveSnake() 
	    { 
	         
	        // Die einzelnen Körperteile rücken immer um eins weiter in Richtung Kopf 
	        for (int z = bodys; z > 0; z--) 
	        { 
	            x[z] = x[(z - 1)]; 
	            y[z] = y[(z - 1)]; 
	        } 
	         
	        // Wenn Kopf nach links bewegt wird, 
	        if (left) 
	        { 
	            x[0] -= 10;
	        } 
	         
	        // Wenn Kopf nach rechts bewegt wird 
	        if (right) 
	        { 
	            x[0] += 10; 
	        } 
	         
	        // Wenn Kopf nach oben bewegt wird 
	        if (up) 
	        { 
	            y[0] -= 10; 
	        } 
	         
	        // Wenn Kopf nach unten bewegt wird 
	        if (down) 
	        { 
	            y[0] += 10; 
	        } 
	    } 
	    
	    private void beginn() {
	        
	        left = false;
	        right = true;
	        up = false;
	        down = false;
	 
	        // Anfangslänge der Schlange
	        bodys = 4;
	 

	        for (int z = 0; z < bodys; z++) 
	          { 
	              x[z] = 50 - z * 10; 
	              y[z] = 50; 
	          } 

	        legeApfel(); 
	 
	        game = true;
	    }
	 
	    
	    public void begGame() {
	       // score = 0;
	    	leben = 3;
	       
	        beginn();
	    } 
	    
	 
	    public void paint(Graphics g) 
	    { 
	        super.paint(g); 
	 
	        if (game) 
	        { 
	            g.drawImage(apple, apfel_x, apfel_y, this); 
	 
	            for (int z = 0; z < bodys; z++) 
	            { 
	                if (z == 0) 
	                    g.drawImage(head, x[z], y[z], this); 
	                else 
	                    g.drawImage(body, x[z], y[z], this); 
	            } 
	 
	            Toolkit.getDefaultToolkit().sync(); 
	            g.dispose(); }

	    } 
	 
	    public void prüfeApfel() 
	    { 
	 
	        if ((x[0] == apfel_x) && (y[0] == apfel_y)) 
	        { 
	            bodys++; 
	            //score += 10; 
	            legeApfel(); 
	        } 
	    } 
	     
	   
	    public void prüfeKollision() 
	    { 
	        boolean tot = false;
	  
	        
	        for (int z = bodys; z > 0; z--) 
	        { 
	 
	            if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z]))
	            { 
	                tot = true;
	               
	            } 
	        } 

	        if (y[0] > 320) 
	        { 
	            tot = true;

	        } 
	 
	        if (y[0] < 0) 
	        { 
	            tot = true;

	        }     

	        if (x[0] > 380) 
	        { 
	            tot = true; 
	        } 
	 
	        if (x[0] < 0) 
	        { 
	            tot = true; 
	        } 
	        
	        if (tot) 
	        {
	           leben--;
	            if (leben > 0) 
	            {
	                begGame();
	            } 
	            else 
	            {
	                game = false;
	                
	            }
	        }
	        
	    } 
	 
	    public void legeApfel() 
	    { 
	        int r = (int) (Math.random() * 30); 
	        apfel_x = ((r * 10)); 
	        r = (int) (Math.random() * 30); 
	        apfel_y = ((r * 10)); 
	    } 
	    
	    public void actionPerformed(ActionEvent e) 
	    { 
	 
	        if (game) 
	        {  
	            prüfeApfel(); 
	            prüfeKollision(); 
	            moveSnake(); 
	           
	        } 
	        repaint(); 
	    } 
	     
	     
	    private class TAdapter extends KeyAdapter 
	    { 
	 
	        public void keyPressed(KeyEvent e) 
	        { 
	 
	            int key = e.getKeyCode(); 
	 
	            if ((key == KeyEvent.VK_LEFT) && (!right)) 
	            { 
	                left = true; 
	                up = false; 
	                down = false; 
	            } 
	             
	  
	            if ((key == KeyEvent.VK_RIGHT) && (!left)) 
	            { 
	                right = true; 
	                up = false; 
	                down = false; 
	            } 
	             
	            if ((key == KeyEvent.VK_UP) && (!down)) 
	            { 
	                up = true; 
	                right = false; 
	                left = false; 
	            } 
	            
	            if ((key == KeyEvent.VK_DOWN) && (!up)) 
	            { 
	                down = true; 
	                right = false; 
	                left = false; 
	            } 
	        } 
	    } 

}
 

Marco13

Top Contributor
Das ist so eine Sache mit den KeyEvents. Die landen immer nur bei der Component, die den Focus hat. D.h. wenn man z.B. eine TextArea hat, und darin der Cursor blinkt, landen natürlich alle Tastendrücke dort (und nicht beim Panel).

setFocusable(true) hast du schon aufgerufen. Das ändert aber nichts daran, dass der Focus am Anfang auf dem Button ist (sieht man wenn man nach dem Start die Leertaste drückt: Das betätigt den Button!). Kann man sowas mit KeyBindings How to Use Key Bindings (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features) lösen.

Alternativ dazu kann man schauen, ob man mit einem FocusListener und requestFocus() was machen kann. Der ... unschöne Workaround wäre, in der actionPerformed-Methode vom Schlangen-Panel immer
requestFocus();
aufzurufen - eigentlich ein no-go, aber damit kriegt man es zumindest schnell zum Laufen, und kann sich um das Testen und weiter-ausarbeiten der eigentlichen Spiellogik kümmern...
 

Joeline

Mitglied
Vielen vielen herzlichen Dank! Man da wär ich nie drauf gekommen...Ich hab es jetzt erst einmal die no-go-Methode angewendet und versuche das jetzt das anderst hinzubekommen.
 

Joeline

Mitglied
So ich hab jetzt eine Zeitanzeige mit System.currentTimeMillis(); in mein SnakeSpiel eingebaut. Die funktionert am Anfang so weit so gut, aber wenn ich das Spiel jetzt neu starte, dann spinnt diese Anzeige. Es sieht so aus als könnte es sich nicht entscheiden welche zeit es anzeigen soll.
An was könnte das liegen und wie kann ich es beheben?


In der Klasse wird die Zeit gemessen:

Java:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;


public class Schlange extends JPanel implements ActionListener 
{	
	
	    // x- und y-Koordinaten der einzelnen Körperteile Schlange
	    private int x[] = new int[900]; 
	    private int y[] = new int[900]; 
	    
	    public static int sleep = 100; //Klassenbezogen
	    public static int score = 0; 
	    public static int punkte = 5;
	    private int bodys = 0; 
	    private int apfel_x; 
	    private int apfel_y; 
	    private int cake_x; 
	    private int cake_y; 
	    private int erdbeere_x; 
	    private int erdbeere_y;
	    private Timer timer;
	    
	   
	    public static long zeit = 0;
	    private long zeit1;
	    private long zeit2;
	 
	    
	    private boolean left = false; 
	    private boolean right = true; 
	    private boolean up = false; 
	    private boolean down = false; 
	    private boolean game = true; 
	    private boolean gameover = false;
	  
	    private Image body; 
	    private Image apple; 
	    private Image cake;
	    private Image strawberry;
	    private Image rhead;
	    private Image lhead;
	    private Image uhead;
	    private Image dhead;
	    
	    private Status meldung = new Status();
	     
	    
	    public Schlange() 
	    { 
	                 
	        addKeyListener(new TAdapter()); 
	          
	        setBackground(Color.white); 
	          
	        //statische Bilder-> Icons haben eine beliebige, aber feste Größe 
	        ImageIcon bild1 = new ImageIcon(this.getClass().getResource("snake_body_r_2.png")); 
	        body = bild1.getImage(); 
	 
	        ImageIcon bild2 = new ImageIcon(this.getClass().getResource("red_apple.png")); 
	        apple = bild2.getImage(); 
	 
	        ImageIcon bild3 = new ImageIcon(this.getClass().getResource("snake_head_r_2.png")); 
	        rhead = bild3.getImage(); 
	        
	        ImageIcon bild4 = new ImageIcon(this.getClass().getResource("snake_head_l_2.png")); 
	        lhead = bild4.getImage();
	        
	        ImageIcon bild5 = new ImageIcon(this.getClass().getResource("snake_head_u_2.png")); 
	        uhead = bild5.getImage();
	        
	        ImageIcon bild6 = new ImageIcon(this.getClass().getResource("snake_head_d_2.png")); 
	        dhead = bild6.getImage();
	        
	        ImageIcon bild7 = new ImageIcon(this.getClass().getResource("cupcake.png")); 
	        cake = bild7.getImage();
	        
	        ImageIcon bild8 = new ImageIcon(this.getClass().getResource("strawberry.png")); 
	        strawberry = bild8.getImage();
	        
	        timer = new Timer(sleep, this); 
	        timer.start();
	 
	      
	        setFocusable(true); 
	        runGame(); // ruft die Methode runGame auf 
	    } 
	    
	    
	    public void moveSnake() 
	    { 
	    	if(game)
	    	{
	         
	        // Die einzelnen Körperteile rücken immer um eins weiter in Richtung Kopf 
	        for (int z = bodys; z > 0; z--) 
	        { 
	            x[z] = x[(z - 1)]; 
	            y[z] = y[(z - 1)]; 
	        } 
	         
	        // Wenn Kopf nach links bewegt wird, 
	        if (left) 
	        { 
	            x[0] -= 10;
	        } 
	         
	        // Wenn Kopf nach rechts bewegt wird 
	        if (right) 
	        { 
	            x[0] += 10; 
	        } 
	         
	        // Wenn Kopf nach oben bewegt wird 
	        if (up) 
	        { 
	            y[0] -= 10; 
	        } 
	         
	        // Wenn Kopf nach unten bewegt wird 
	        if (down) 
	        { 
	            y[0] += 10; 
	        } 
	        
	      }
	    } 
	    
	    public void runGame() {
	    	
	        //Richtung wird zurükgesetzt
	        left = false;
	        right = true;
	        up = false;
	        down = false;
	 
	        // Anfangslänge der Schlange
	        bodys = 4;
	        score =0;
	        zeit1 = System.currentTimeMillis();

	        for (int z = 0; z < bodys; z++) 
	          { 
	              x[z] = 50 - z * 10; 
	              y[z] = 50; 
	          } 

	        legeApfel(); 
	        legeCake();
	        legeErdbeere();
	 
	        game = true;
	        gameover = false;
	    }
	 
	 
	    public void paint(Graphics g) 
	    { 
	        super.paint(g); 
	  
	            g.drawImage(apple, apfel_x, apfel_y, this); 
	            g.drawImage(cake, cake_x, cake_y, this);
	            g.drawImage(strawberry, erdbeere_x, erdbeere_y, this);
	 
	            for (int z = 0; z < bodys; z++) 
	            { 
	                if (z == 0) 
	                {	
	                	if(right)
	                	{
	                		g.drawImage(rhead, x[z], y[z], this);
	                	}
	                	
	                	if(left)
	                	{
	                		g.drawImage(lhead, x[z], y[z], this);
	                	}
	                	
	                	if(up)
	                	{
	                		g.drawImage(uhead, x[z], y[z], this);
	                	}
	                	
	                	if(down)
	                	{
	                		g.drawImage(dhead, x[z], y[z], this);
	                	}
	                } 	
	                	
	                else 
	                    {
	                		g.drawImage(body, x[z], y[z], this); 
	                    }
	                
	                if (gameover)
		            {
	                	
	                	String s= "Game Over";  
	        	        Font schrift = new Font("Helvetica", Font.BOLD, 26); 
	        	 
	        	        g.setColor(Color.black);
	        	        g.setFont(schrift); 
	        	        g.drawString(s, 130, 150);
		            }
		 
	            } 
	            
	            Toolkit.getDefaultToolkit().sync(); 
	            g.dispose(); 

	    } 
	 
	    public void prüfeApfel() 
	    { 
	 
	        if ((x[0] == apfel_x) && (y[0] == apfel_y)) 
	        { 
	            bodys++; 
	            score += punkte; 
	            legeApfel(); 
	            
	            Spielfeld.ausgabeScore();
	            
	            meldung.status("Apfel gegessen, Schlange wird länger...");
	        } 
	    } 
	    
	    public void prüfeCake() 
	    { 
	 
	        if ((x[0] == cake_x) && (y[0] == cake_y)) 
	        { 
	            bodys++; 
	            score += punkte; 
	            legeCake(); 
	           
	            Spielfeld.ausgabeScore();
	            
	            meldung.status("Kuchen gegessen, Schlange wird länger...");
	        } 
	    } 
	    
	    public void prüfeErdbeere() 
	    { 
	 
	        if ((x[0] == erdbeere_x) && (y[0] == erdbeere_y)) 
	        { 
	            bodys++; 
	            score += punkte; 
	            legeErdbeere(); 
	           
	            Spielfeld.ausgabeScore();
	            
	            meldung.status("Erdbeere gegessen, Schlange wird länger...");
	        } 
	    } 
	     
	   // Es wird geprüft, ob die Schlange gegen die Spielfeldbegrenzung oder gegen sich selber stößt. 
	    public void prüfeKollision() 
	    { 
	        boolean tot = false;
	  
	        
	        for (int z = bodys; z > 0; z--) 
	        { 
	        
	            if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z]))
	            { 
	                tot = true;
	               
	            } 
	        } 

	        // Wenn die Schlange oben oder unten, rechts oder links gegen die Spielfeldbegrenzung stoeßt, 
	        //dann ist das Spiel vorbei.
	        if (y[0] > 280) 
	        { 
	            tot = true;

	        } 
	 
	        if (y[0] <0) 
	        { 
	            tot = true;

	        } 
	         
	        if (x[0] > 390) 
	        { 
	            tot = true; 
	        } 
	 
	        if (x[0] < 0) 
	        { 
	            tot = true; 
	        } 
	        
	        if (tot) 
	        {
	        	game = false;
	        	gameover = true;
	        	meldung.status("GameOver");
	        }
	        
	    } 
	 
	    public void legeApfel() 
	    {   
	        int r = (int) ((Math.random() * 29)); 
	        apfel_x = ((r * 10)); 
	        r = (int) ((Math.random() * 29)); 
	        apfel_y = ((r * 10)); 
	    } 
	    
	    public void legeCake() 
	    {   
	        int r = (int) ((Math.random() * 29)); 
	        cake_x = ((r * 10)); 
	        r = (int) ((Math.random() * 29)); 
	        cake_y = ((r * 10)); 
	    } 
	    
	    public void legeErdbeere() 
	    {   
	        int r = (int) ((Math.random() * 29)); 
	        erdbeere_x = ((r * 10)); 
	        r = (int) ((Math.random() * 29)); 
	        erdbeere_y = ((r * 10)); 
	    } 
	    
	    public void actionPerformed(ActionEvent e) 
	    { 
	 
	        if (game) 
	        {  
	            prüfeApfel(); 
	            prüfeCake();
	            prüfeErdbeere();
	            prüfeKollision(); 
	            moveSnake(); 
	            requestFocus();
	            
	        } 
	        repaint(); 
	        zeit2 = System.currentTimeMillis();
	        zeit = zeit2-zeit1;
	        Spielfeld.ausgabeZeit();
	    } 
	     
	     
	    private class TAdapter extends KeyAdapter 
	    { 
	 
	        public void keyPressed(KeyEvent e) 
	        { 
	 
	            int key = e.getKeyCode(); //Gibt den Keycode (int Zahl) der gedrückten Taste zurück
	            
	            
	            if ((key == KeyEvent.VK_LEFT) && (!right)) 
	            { 
	                left = true; 
	                up = false; 
	                down = false;

	            } 
	             
	  
	            if ((key == KeyEvent.VK_RIGHT) && (!left)) 
	            { 
	                right = true; 
	                up = false; 
	                down = false; 
	                
	            } 
	             
	            if ((key == KeyEvent.VK_UP) && (!down)) 
	            { 
	                up = true; 
	                right = false; 
	                left = false; 
	                
	            } 
	            
	            if ((key == KeyEvent.VK_DOWN) && (!up)) 
	            { 
	                down = true; 
	                right = false; 
	                left = false; 
	                
	            } 
	        } 
	    } 

}

Und hier wird sie ausgegeben:
Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;


public class Spielfeld extends javax.swing.JFrame {
	private JPanel pLeiste;
	private JPanel pSpielfeld;
	private JButton btHauptmenue;
	private JButton btNewGame;
	private static JLabel lbZeit;
	private static JLabel lbScore;
	
	private Schlange eineSchlange = new Schlange();
	
	
	
	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Spielfeld  inst = new Spielfeld();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public Spielfeld () {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			BorderLayout thisLayout = new BorderLayout();
			setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
			getContentPane().setLayout(thisLayout);
			{
				
				pLeiste = new JPanel();
				GridLayout pLeisteLayout = new GridLayout(1, 1);
				pLeisteLayout.setColumns(1);
				pLeisteLayout.setHgap(5);
				pLeisteLayout.setVgap(5);
				pLeiste.setLayout(pLeisteLayout);
				getContentPane().add(pLeiste, BorderLayout.NORTH);
				pLeiste.setBackground(new java.awt.Color(120,228,239));
				pLeiste.setPreferredSize(new java.awt.Dimension(400, 26));
				{
					lbScore = new JLabel();
					pLeiste.add(lbScore);
					lbScore.setText("Score: " + Integer.toString(Schlange.score));
					
				}
				{
					lbZeit = new JLabel();
					pLeiste.add(lbZeit);
					lbZeit.setText("Zeit:");
				}
				
				{
					btNewGame = new JButton();
					pLeiste.add(btNewGame);
					btNewGame.setText("NewGame");
					btNewGame.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							btNewGameActionPerformed(evt);
							
							eineSchlange.runGame();
							
						}
					});

				}
				{
					btHauptmenue = new JButton();
					pLeiste.add(btHauptmenue);
					btHauptmenue.setText("Menü");
					btHauptmenue.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							btHauptmenueActionPerformed(evt);
							
							Hauptmenue menueFenster = new Hauptmenue();
							menueFenster.setVisible(true);
							
							Spielfeld.this.dispose();
							
						}
					});
				}
				
			}
			{
				pSpielfeld = new JPanel();
				getContentPane().add(BorderLayout.CENTER, new Schlange());
			}
			pack();
			setSize(400, 340);
			setTitle("Snake");
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	private void btHauptmenueActionPerformed(ActionEvent evt) {
		System.out.println("btHauptmenue wurde angeklickt...");
		//TODO add your code for btHauptmenue.actionPerformed
	}
	
	private void btNewGameActionPerformed(ActionEvent evt) {
		System.out.println("btNewGame wurde angeklickt...");
		//TODO add your code for btNewGame.actionPerformed
	}

	
	public static void ausgabeScore()
	{
		lbScore.setText("Score: " + Integer.toString(Schlange.score));
	}
	
	public static void ausgabeZeit()
	{
		lbZeit.setText("Zeit: " + Long.toString(Schlange.zeit/1000));
	}
	
	
}

Wäre schön wenn ihr mir weiterhelfen könntet!
 

Marco13

Top Contributor
Wie startest du das den neu? (Kann man den Code compilieren, hab's grad nicht getestet..). Kann es sein, dass du zwei "Schlange"-Objekte erstellst, die sich dann drum kloppen, wer "seine" Zeit in das Label schreiben darf?
 

Joeline

Mitglied
Aso ok jetzt versteh ich was nicht stimmt. Bin selbst drauf gekommen. Mein Zähler zählt weiter auch wenn, dass Spiel eig beendet ist.
Wenn man jetzt nämlich
Java:
if(game)
	        {
	        	zeit2 = System.currentTimeMillis();
	        	zeit = zeit2-zeit1;
	        	Spielfeld.ausgabeZeit();
	        }

einfügt, dann funktioniert es.
 

Marco13

Top Contributor
"Funktionieren" ist ein dehnbarer Begriff. Wenn man es definiert als "Es scheint auf dem Bildschirm das zu erscheinen, was man erwartet" mag das zutreffen. Aber nochmal: Kann es sein, dass du zwei "Schlange"-Objekte erstellst? Zumindest scheint ja der Timer nicht gestoppt und/oder neu gestartet zu werden...
 

Joeline

Mitglied
Aber dafür habe ich jetzt noch eine andere Frage. Warum wird das Spiel nicht neu gestartet, wenn ich auf NewGame klicke....das versteh ich einfach nicht. Was mache ich falsch?

Code siehe vorherige Frage.
 

Joeline

Mitglied
Ja also neu starten kann man das nicht wirklich nennen. Ich geh zurück zum Hauptmenü und klicke dann wieder auf spielen. Vllt hast du recht. Meinst ich sollte den timer erst in run Game starten und bei Game over stoppen oder wie sonst??
 

Marco13

Top Contributor

Joeline

Mitglied
Oh man.... sry. Bin manchmal schwer von Begriff. Natürlich hast du recht. Vielen Dank das du es mir nochmal genau gesagt hast!!
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Die ersten beiden waren auch nur Vermutungen, die ich auf Basis der beschriebenen Symptome geäußert hatte... wenn das so versteckt ist, fällt es eben nicht sofort auf :bahnhof:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Hilfe bei Snake-Programmierung Spiele- und Multimedia-Programmierung 6
J SNAKE-GAME-LOOP / (Applet zu Application) Spiele- und Multimedia-Programmierung 4
P Snake Game Verbessern Spiele- und Multimedia-Programmierung 15
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
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
M Hilfe bei Snake Spiele- und Multimedia-Programmierung 4
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
V Snake Spiel Spiele- und Multimedia-Programmierung 7
D Snake n+1-Thread Spiele- und Multimedia-Programmierung 2
N Hilfe bei snake Spiele- und Multimedia-Programmierung 37
N Snake (Programmier Stil) Spiele- und Multimedia-Programmierung 8
G SNAKE HILFEEE! Spiele- und Multimedia-Programmierung 15
G Snake Alphaversion Spiele- und Multimedia-Programmierung 18
B Snake-Game fürs Handy Spiele- und Multimedia-Programmierung 3
P Objektorientierte Programmierung umwandeln! Spiele- und Multimedia-Programmierung 22
filtastisch Discord JDA Programmierung Spiele- und Multimedia-Programmierung 2
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Splayfer Discord JDA Programmierung Spiele- und Multimedia-Programmierung 3
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
T Android-App-Programmierung? Spiele- und Multimedia-Programmierung 3
D Programmierung einer Tor-Anzeige Spiele- und Multimedia-Programmierung 8
J Wie kann ich die Programmierung von Konfiguratoren erlernen? Spiele- und Multimedia-Programmierung 2
E Programmierung eines 2.5D Point&Click Adventures ohne Spieleengine machbar? Spiele- und Multimedia-Programmierung 14
M Programmierung eines "Fantasy Rollenspiels" Spiele- und Multimedia-Programmierung 5
K Minecraft-Forge Mod Programmierung Spiele- und Multimedia-Programmierung 1
E Hilfe bei Labyrinth Programmierung. Spiele- und Multimedia-Programmierung 9
O Fehler bei Programmierung lässt Figur nicht bewegen Spiele- und Multimedia-Programmierung 5
F Programmierung eines Bots Spiele- und Multimedia-Programmierung 23
M Minecraft Bukkit Programmierung Spiele- und Multimedia-Programmierung 3
E Hilfe bei Highscore programmierung Spiele- und Multimedia-Programmierung 3
M Hilfe bei Spiel Programmierung Spiele- und Multimedia-Programmierung 4
c_sidi90 Einstieg in die 3D Programmierung Spiele- und Multimedia-Programmierung 6
A 3D Programmierung Spiele- und Multimedia-Programmierung 8
E Hilfe bei einer GUI Programmierung mit Graph Spiele- und Multimedia-Programmierung 30
G API für 3d-Programmierung? OpenGL? Spiele- und Multimedia-Programmierung 12
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
D 2D Programmierung Spiele- und Multimedia-Programmierung 4
C Wii Java Programmierung Spiele- und Multimedia-Programmierung 7
X JPCT 3d-Spiele Programmierung Tutorial Spiele- und Multimedia-Programmierung 40
S Optimale Grafikkarte für Java 3D programmierung? Spiele- und Multimedia-Programmierung 13
J 3d Programmierung, Fragen: Spiele- und Multimedia-Programmierung 14
A Hilfe bei Programmierung von Abalone Spiele- und Multimedia-Programmierung 6
M Puzzle-Programmierung ->Hilfestellung gesucht!!! Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben