Da ich in sachen Spiele Programmierung ein absoluter Anfänger bin und kein ordenliches Tutorial zur Programmierung von Applikationsspielen gefungen hab hab ich mich einfach mit der API hingesetzt und mal darauf losgeschrieben, und das ist das (bescheidene) Resultat (es ist nur ein Test zur Steuerung):
Welche Ratschläge, Tipps, Links,... könnt ihr mir geben???
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.image.*;
public class Spieltest extends JFrame
{
Spielflaeche gamePanel;
MoveFig mv;
class CMeinWindowLauscher extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
class MoveFig extends Thread
{
int newx;
int newy;
int relx;
int rely;
MoveFig(int x, int y)
{
relx = x - gamePanel.figx;
rely = y - gamePanel.figy;
newx = x;
newy = y;
}
MoveFig(int x, int y, boolean absolut)
{
if(absolut)
{
relx = x - gamePanel.figx;
rely = y - gamePanel.figy;
newx = x;
newy = y;
}
if(!absolut)
{
relx = x;
rely = y;
newx = gamePanel.figx + x;
newy = gamePanel.figy + y;
}
}
public void run()
{
System.out.println(relx);
System.out.println(rely);
int xadd = 0;
int yadd = 0;
int betragx = relx;
int betragy = rely;
if(relx<0)
betragx = -1 * relx;
if(rely<0)
betragy = -1 * rely;
if(betragy>betragx && betragx!=0)
{
yadd= rely/relx;
if(yadd<0)
yadd = -1*yadd;
}
if(betragx>betragy && betragx!=0)
{
xadd = rely/relx; //### Ineffizient!!!
if(xadd<0)
xadd = -1*xadd;
}
int j = gamePanel.figy;
int i = gamePanel.figx;
while(i!=newx || j!=newy)
{
System.out.println("relx: "+relx+"rely: "+rely);
System.out.println("xadd: " + xadd);
System.out.println("yadd: " + yadd);
if(i<newx){
if(i+ xadd +1>newx)
i= i+ 1;
else
i= i+ xadd +1;
System.out.println("i+xadd: " +i);}
if(j<newy){
if(j + yadd +1>newy)
j = j + 1;
else
j = j + yadd +1;
System.out.println("j+yadd: " +j);}
if(i>newx){
if(i - xadd -1<newx)
i= i -1;
else
i= i - xadd -1;
System.out.println("i-xadd: " +i);}
if(j>newy){
if(j - yadd -1<newy)
j = j -1;
else
j = j - yadd -1;
System.out.println("j-yadd: " +j);}
System.out.println("2: i: "+i+"j: "+j);
gamePanel.paintback();
gamePanel.paintfigur((int) i, j);
gamePanel.repaint();
try
{
Thread.sleep(15);
}
catch(java.lang.InterruptedException IEx){System.out.println("Fehler!");}
}
}
}
class MeinMouseLauscher implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
// einmal piepen
//java.awt.Toolkit.getDefaultToolkit().beep();
mv = new MoveFig(e.getX()-20,e.getY()-20);
mv.start();
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
class MyKeyLauscher implements KeyListener
{
public void keyTyped(KeyEvent k)
{
System.out.println("key:");
System.out.println(k);
int relx = 0;
int rely = 0;
switch(k.getKeyChar())
{
case 'w':
rely = -10;
break;
case 's':
rely = 10;
break;
case 'a':
relx = -10;
break;
case 'd':
relx = 10;
break;
case 'W':
rely = -10;
break;
case 'S':
rely = 10;
break;
case 'A':
relx = -10;
break;
case 'D':
relx = 10;
break;
default:
break;
}
mv = new MoveFig(relx,rely,false);
mv.start();
}
public void keyPressed(KeyEvent k)
{
//System.out.println("key:");
//System.out.println(k);
}
public void keyReleased(KeyEvent k)
{
//System.out.println("key:");
//System.out.println(k);
}
}//Ende KeyLauscher
Spieltest(String titel)
{
super(titel);
addWindowListener(new CMeinWindowLauscher());
getContentPane().setLayout(new BorderLayout());
gamePanel = new Spielflaeche();
getContentPane().add(gamePanel);
gamePanel.paintback();
gamePanel.paintfigur(0,0);
gamePanel.repaint();
gamePanel.setFocusable(true);
gamePanel.addKeyListener(new MyKeyLauscher());
gamePanel.addMouseListener(new MeinMouseLauscher());
}
public static void main(String[] args)
{
Spieltest Fenster = new Spieltest("Spieltest");
Fenster.setSize(300,300);
Fenster.pack();
Fenster.show();
}
}//Ende Spieltest
class Spielflaeche extends JPanel
{
private Image image = new BufferedImage(450, 350, BufferedImage.TYPE_INT_RGB);
int figx = 0;
int figy =0;
public void update(Graphics g)
{
System.out.println("update!");
paint(g);
}
Spielflaeche()
{
setBackground(Color.black);
repaint();
}
public void paintback() //hier wird das Hintergrund gezeichnet!
{
Graphics g = image.getGraphics();
g.drawImage(loadImage("back.jpg"),0,0,this);
}
public void paintfigur(int x, int y) //hier wird eine Figur gezeichnet!
{
Graphics g = image.getGraphics();
figx= x;
figy =y;
g.drawImage(loadImage("fig.gif"), x, y, this);
}
public void paint(Graphics g) // Die wichtigste Methode: hier wird gezeichnet!
{
g.drawImage(image,0,0,this);
}
public Image loadImage(String filename)
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
MediaTracker ladekontrolle = new MediaTracker(this);
// Bild laden und beim MediaTracker registrieren
Image Bild = toolkit.getImage(filename);
ladekontrolle.addImage(Bild,0);
// Solange warten, bis das Bild ganz geladen ist
try
{
ladekontrolle.waitForID(0);
}
catch(InterruptedException e)
{
// Das Laden ist fehlgeschlagen
System.out.println("Fehler!");
return null;
}
return Bild;
}
// Diese Methode liefert die minimale Größe der Canvas
public Dimension getMinimumSize()
{
return new Dimension(400,300);
}
// Die Lieblingsgröße setzen wir auf die Minimalgröße
public Dimension getPreferredSize()
{
return getMinimumSize();
}
}