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
Das hier ist mein Spielfeld
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
}
}