Q
qbopa
Gast
Halli Hallo Hallöchen ^^.
Ich bin gerade dabei den Klassiker Sokoban nachzuprogrammieren und das funktioniert auch soweit super. ich hab zum steuern Buttons genommen. Aber als ich bemerkte wie beschi*** das zum steuern ist wollt ich das ganze über die Tastatur mit den Pfeiltasten machen. Ich hab den KeyListener eingebunden, welcher auch angesprochen wird. Der button und der keylistener greifen auf die gleiche Methode zu, aber bei dem keylistener funktioniert das irgendwie nicht. Da erscheinen Fehlermeldungen und er bricht ab.
Suche schon seit ner Stunde nach dem fehler aber irgendwie finde ich ihn nicht ^^.
Weis jemand wo das problem liegt?
Danke
Hier der Code:
(Ich hoff das ist nicht zu verwirrend ^^) :###
Ich bin gerade dabei den Klassiker Sokoban nachzuprogrammieren und das funktioniert auch soweit super. ich hab zum steuern Buttons genommen. Aber als ich bemerkte wie beschi*** das zum steuern ist wollt ich das ganze über die Tastatur mit den Pfeiltasten machen. Ich hab den KeyListener eingebunden, welcher auch angesprochen wird. Der button und der keylistener greifen auf die gleiche Methode zu, aber bei dem keylistener funktioniert das irgendwie nicht. Da erscheinen Fehlermeldungen und er bricht ab.
Suche schon seit ner Stunde nach dem fehler aber irgendwie finde ich ihn nicht ^^.
Weis jemand wo das problem liegt?
Danke
Hier der Code:
Code:
import javax.swing.*;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.*;
import java.util.HashMap;
import java.util.Timer;
import javax.swing.colorchooser.*;
import javax.swing.event.MouseInputListener;
import sun.swing.SwingUtilities2;
import java.lang.*;
import java.io.*;
import java.util.*;
public class Spiel implements ActionListener, KeyListener {
private JFrame MainFenster;
private JPanel HintergrundPanel;
private JPanel MainPanel;
private JPanel P1;
private HashMap meinePanels; //private
private JPanel WegPanel;
private JButton Button1;
private JButton Button2;
private JButton Button3;
private JButton Button4;
private JButton Button5;
private JButton Button6;
private JButton Button7;
private JPanel Figur;
private JPanel ZielPanel;
private JPanel Box;
private int Felder[];
private int orginalFelder[];
private int ZielFelder[];
private int position;
private int lvl;
public Spiel()
{
MainFenster= new JFrame ("Sokoban");
MainFenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
MainFenster.setSize(500,550);
MainFenster.setBackground(Color.gray);
MainFenster.setVisible(true);
MainPanel = new JPanel();
MainPanel.setLayout(new GridLayout(20,20));
MainPanel.setSize(200,200);
MainPanel.setBackground(Color.gray);
MainPanel.setVisible(true);
HintergrundPanel = new JPanel();
HintergrundPanel.setSize(20,20);
HintergrundPanel.setBackground(Color.black);
HintergrundPanel.setVisible(true);
MainFenster.addKeyListener(this);
MainFenster.add(HintergrundPanel);
Button1 = new JButton("<-");
Button2 = new JButton("^");
Button3 = new JButton("->");
Button4 = new JButton("v");
Button5 = new JButton("Neu");
Button6 = new JButton ("Next");
Button7 = new JButton("Back");
Button1.addActionListener(this);
Button2.addActionListener(this);
Button3.addActionListener(this);
Button4.addActionListener(this);
Button5.addActionListener(this);
Button6.addActionListener(this);
Button7.addActionListener(this);
meinePanels = new HashMap();
for (int i = 1; i < 401; i++ ){
JPanel P1 = new JPanel ();
P1.setBackground(Color.darkGray);
P1.setName(String.valueOf(i));
P1.setVisible(true);
P1.setSize(10,10);
MainPanel.add(P1);
meinePanels.put(String.valueOf(i), P1);
}
HintergrundPanel.add(MainPanel);
MainFenster.setSize(500,500);
HintergrundPanel.add(Button1);
HintergrundPanel.add(Button2);
HintergrundPanel.add(Button3);
HintergrundPanel.add(Button4);
HintergrundPanel.add(Button5);
HintergrundPanel.add(Button6);
HintergrundPanel.add(Button7);
lvls();
}
public void lvl1()
{
Felder = new int[401];
orginalFelder= new int[401];
ZielFelder=new int[401];
for(int i=1; i<401;i++)
{
Felder[i]=0;
orginalFelder[i]=0;
ZielFelder[i]=0;
}
Felder[173]=1;
Felder[174]=1;
Felder[175]=1;
Felder[176]=1;
Felder[177]=1;
Felder[178]=1;
Felder[179]=1;
Felder[193]=1;
Felder[195]=1;
Felder[197]=1;
Felder[199]=1;
Felder[213]=1;
Felder[217]=1;
Felder[219]=1;
Felder[233]=1;
Felder[237]=1;
Felder[239]=1;
Felder[252]=1;
Felder[253]=1;
Felder[254]=1;
Felder[255]=1;
Felder[256]=1;
Felder[257]=1;
Felder[259]=1;
Felder[272]=1;
Felder[274]=1;
Felder[279]=1;
Felder[292]=1;
Felder[294]=1;
Felder[296]=1;
Felder[297]=1;
Felder[299]=1;
Felder[312]=1;
Felder[314]=1;
Felder[316]=1;
Felder[317]=1;
Felder[319]=1;
Felder[332]=1;
Felder[334]=1;
Felder[336]=1;
Felder[352]=1;
Felder[354]=1;
Felder[356]=1;
Felder[358]=1;
Felder[359]=1;
Felder[372]=1;
Felder[373]=1;
Felder[374]=1;
Felder[375]=1;
Felder[376]=1;
Felder[377]=1;
Felder[378]=1;
Felder[379]=1;
Felder[394]=1;
Felder[398]=1;
Felder[399]=1;
Felder[180]=4; //Startpunkt
Felder[215]=3; //Ziele
Felder[371]=3;
Felder[400]=3;
Felder[216]=2; //Boxen
Felder[295]=2;
Felder[318]=2;
for (int i=1;i<401;i++)
{
orginalFelder[i]=Felder[i];
ZielFelder[i]=Felder[i];
}
WegPanel = null;
for (int i=1;i<401;i++)
{
if (Felder[i]==1)
{
WegPanel = (JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.white);
}
if (Felder[i]==2)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.blue);
}
if (Felder[i]==3)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.yellow);
}
if (Felder[i]==4)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.red);
}
}
}
public void lvl2()
{
Felder = new int[401];
orginalFelder= new int[401];
ZielFelder=new int[401];
for(int i=1; i<401;i++)
{
Felder[i]=0;
orginalFelder[i]=0;
ZielFelder[i]=0;
}
Felder[88]=1;
Felder[107]=1;
Felder[108]=1;
Felder[112]=1;
Felder[113]=1;
Felder[126]=1;
Felder[127]=2;
Felder[128]=1;
Felder[129]=1;
Felder[130]=1;
Felder[131]=1;
Felder[132]=1;
Felder[133]=1;
Felder[145]=1;
Felder[146]=1;
Felder[147]=1;
Felder[148]=4;
Felder[149]=2;
Felder[150]=1;
Felder[152]=1;
Felder[153]=1;
Felder[167]=1;
Felder[168]=2;
Felder[172]=1;
Felder[173]=1;
Felder[187]=1;
Felder[188]=1;
Felder[190]=3;
Felder[191]=3;
Felder[192]=1;
Felder[193]=1;
Felder[207]=1;
Felder[210]=3;
Felder[212]=1;
Felder[226]=1;
Felder[227]=1;
Felder[228]=1;
Felder[229]=1;
Felder[230]=1;
Felder[231]=1;
Felder[246]=1;
Felder[247]=1;
Felder[248]=1;
Felder[249]=1;
Felder[250]=1;
for (int i=1;i<401;i++)
{
orginalFelder[i]=Felder[i];
ZielFelder[i]=Felder[i];
}
WegPanel = null;
for (int i=1;i<401;i++)
{
if (Felder[i]==1)
{
WegPanel = (JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.white);
}
if (Felder[i]==2)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.blue);
}
if (Felder[i]==3)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.yellow);
}
if (Felder[i]==4)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.red);
}
}
}
public void lvl3()
{
Felder = new int[401];
orginalFelder= new int[401];
ZielFelder=new int[401];
for(int i=1; i<401;i++)
{
Felder[i]=0;
orginalFelder[i]=0;
ZielFelder[i]=0;
}
Felder[144]=3;
Felder[145]=3;
Felder[146]=3;
Felder[147]=3;
Felder[164]=3;
Felder[165]=3;
Felder[166]=3;
Felder[167]=3;
Felder[184]=3;
Felder[185]=3;
Felder[186]=3;
Felder[187]=3;
Felder[148]=1;
Felder[149]=1;
Felder[168]=1;
Felder[169]=1;
Felder[188]=1;
Felder[189]=1;
Felder[170]=1;
Felder[171]=1;
Felder[72]=1;
Felder[73]=1;
Felder[74]=1;
Felder[92]=1;
Felder[94]=2;
Felder[97]=1;
Felder[98]=1;
Felder[112]=1;
Felder[113]=1;
Felder[114]=1;
Felder[115]=1;
Felder[116]=1;
Felder[117]=2;
Felder[118]=1;
Felder[132]=1;
Felder[136]=1;
Felder[137]=1;
Felder[138]=1;
Felder[152]=1;
Felder[153]=2;
Felder[154]=1;
Felder[155]=1;
Felder[156]=2;
Felder[172]=2;
Felder[173]=1;
Felder[174]=2;
Felder[175]=2;
Felder[176]=1;
Felder[192]=2;
Felder[193]=1;
Felder[194]=1;
Felder[195]=2;
Felder[196]=1;
Felder[197]=4;
Felder[212]=1;
Felder[213]=1;
Felder[214]=2;
Felder[215]=1;
Felder[216]=1;
Felder[232]=1;
Felder[233]=2;
Felder[234]=1;
Felder[235]=2;
Felder[236]=1;
Felder[237]=1;
Felder[254]=1;
Felder[257]=1;
Felder[274]=1;
Felder[275]=1;
Felder[276]=1;
Felder[277]=1;
for (int i=1;i<401;i++)
{
orginalFelder[i]=Felder[i];
ZielFelder[i]=Felder[i];
}
WegPanel = null;
for (int i=1;i<401;i++)
{
if (Felder[i]==1)
{
WegPanel = (JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.white);
}
if (Felder[i]==2)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.blue);
}
if (Felder[i]==3)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.yellow);
}
if (Felder[i]==4)
{
WegPanel=(JPanel) meinePanels.get(String.valueOf(i));
WegPanel.setBackground(Color.red);
}
}
}
public static void main(String[] args) {
Spiel mf = new Spiel();
}
public void actionPerformed(ActionEvent arg0)
{
String Button ;
Button=arg0.getActionCommand().toString();
woistdiefigur();
if ( Button=="<-" )
{
links();
}
if ( Button=="->" )
{
rechts();
}
if ( Button=="v" )
{
runter();
}
if ( Button=="^" )
{
hoch();
}
if(Button=="Neu")
{
lvls();
}
if (Button=="Next")
{
lvl=lvl+1;
lvls();
}
if(Button=="Back")
{
lvl=lvl-1;
lvls();
}
fertig();
}
public void woistdiefigur()
{
Figur=null;
position=0;
for(int i=1;i<401;i++)
{
if (Felder[i]==4)
{
position=i;
}
}
}
public void links()
{
position=position-1;
if (Felder[position]==1||Felder[position]==3)
{
Figur=(JPanel)meinePanels.get(String.valueOf(position+1));
Figur.setBackground(Color.white);
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position));
Figur.setBackground(Color.red);
Felder[position]=4;
Felder[position+1]=1;
}
if (Felder[position]==2)
{
if (Felder[position-1]==1||Felder[position-1]==3)
{
Box=(JPanel)meinePanels.get(String.valueOf(position-1));//position der"neuen" Box
Felder[position-1]=2;
Figur=(JPanel)meinePanels.get(String.valueOf(position+1)); //position der Figue
Figur.setBackground(Color.white);//position der Figur weis setzen
if (Box.getBackground().equals(Color.yellow))//abfrage ob neue position der Box=ziel ist
{
orginalFelder[position-1]=2; //abändenr der Ziel position in Box position
}
Box.setBackground(Color.blue);//neue boc position blau färben
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position)); // neue position der Figur
Figur.setBackground(Color.red); //neue position der Figur rot färben
Felder[position]=4; //neue position der Figur in Felder speichern
Felder[position+1]=1; // zurückgelegeter weg in felder als Laufweg speichern
}
}
}
public void rechts()
{
position=position+1;
if (Felder[position]==1 ||Felder[position]==3)
{
Figur=(JPanel)meinePanels.get(String.valueOf(position-1));
Figur.setBackground(Color.white);
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position));
Figur.setBackground(Color.red);
Felder[position]=4;
Felder[position-1]=1;
}
if (Felder[position]==2 )
{
if (Felder[position+1]==1||Felder[position+1]==3)
{
Box=(JPanel)meinePanels.get(String.valueOf(position+1));//position der"neuen" Box
Felder[position+1]=2;
Figur=(JPanel)meinePanels.get(String.valueOf(position-1)); //position der Figue
Figur.setBackground(Color.white);//position der Figur weis setzen
if (Box.getBackground().equals(Color.yellow))//abfrage ob neue position der Box=ziel ist
{
orginalFelder[position+1]=2; //abändenr der Ziel position in Box position
}
Box.setBackground(Color.blue);//neue boc position blau färben
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position)); // neue position der Figur
Figur.setBackground(Color.red); //neue position der Figur rot färben
Felder[position]=4; //neue position der Figur in Felder speichern
Felder[position-1]=1; // zurückgelegeter weg in felder als Laufweg speichern
}
}
}
public void hoch()
{
position=position-20;
if (Felder[position]==1 ||Felder[position]==3)
{
Figur=(JPanel)meinePanels.get(String.valueOf(position+20));
Figur.setBackground(Color.white);
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position));
Figur.setBackground(Color.red);
Felder[position]=4;
Felder[position+20]=1;
}
if (Felder[position]==2 )
{
if (Felder[position-20]==1||Felder[position-20]==3)
{
Box=(JPanel)meinePanels.get(String.valueOf(position-20));//position der"neuen" Box
Felder[position-20]=2;
Figur=(JPanel)meinePanels.get(String.valueOf(position+20)); //position der Figue
Figur.setBackground(Color.white);//position der Figur weis setzen
if (Box.getBackground().equals(Color.yellow))//abfrage ob neue position der Box=ziel ist
{
orginalFelder[position-20]=2; //abändenr der Ziel position in Box position
}
Box.setBackground(Color.blue);//neue boc position blau färben
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position)); // neue position der Figur
Figur.setBackground(Color.red); //neue position der Figur rot färben
Felder[position]=4; //neue position der Figur in Felder speichern
Felder[position+20]=1; // zurückgelegeter weg in felder als Laufweg speichern
}
}
}
public void runter()
{
position=position+20;
if (Felder[position]==1 ||Felder[position]==3 )
{
Figur=(JPanel)meinePanels.get(String.valueOf(position-20));
Figur.setBackground(Color.white);
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position));
Figur.setBackground(Color.red);
Felder[position]=4;
Felder[position-20]=1;
}
if (Felder[position]==2)
{
if (Felder[position+20]==1||Felder[position+20]==3)
{
Box=(JPanel)meinePanels.get(String.valueOf(position+20));//position der"neuen" Box
Felder[position+20]=2;
Figur=(JPanel)meinePanels.get(String.valueOf(position-20)); //position der Figue
Figur.setBackground(Color.white);//position der Figur weis setzen
if (Box.getBackground().equals(Color.yellow))//abfrage ob neue position der Box=ziel ist
{
orginalFelder[position+20]=2; //abändenr der Ziel position in Box position
}
Box.setBackground(Color.blue);//neue boc position blau färben
ziel();
Figur=(JPanel) meinePanels.get(String.valueOf(position)); // neue position der Figur
Figur.setBackground(Color.red); //neue position der Figur rot färben
Felder[position]=4; //neue position der Figur in Felder speichern
Felder[position-20]=1; // zurückgelegeter weg in felder als Laufweg speichern
}
}
}
public void ziel()
{
ZielPanel=null;
JPanel lol = new JPanel();
lol=(JPanel)meinePanels.get(String.valueOf(191));
for (int i=1;i<401;i++)
{
if(ZielFelder[i]==3)
{
Figur=(JPanel) meinePanels.get(String.valueOf(i));
if (Figur.getBackground().equals(Color.white))
{
Figur.setBackground(Color.yellow);
Felder[i]=3;
}
}
if (orginalFelder[i]==3 )
{
ZielPanel=(JPanel) meinePanels.get(String.valueOf(i));
ZielPanel.setBackground(Color.yellow);
}
}
}
public void fertig()
{
int ziele=0;
for (int i=1;i<401;i++)
{
if (Felder[i]==2 && ZielFelder[i]==3)
{
ziele=ziele+1;
}
}
if (ziele==3)
{
lvl=lvl+1;
lvls();
}
}
public void lvls()
{
lvl3();
for (int i=1;i<401;i++)
{
Figur=(JPanel) meinePanels.get(String.valueOf(i));
Figur.setBackground(Color.darkGray);
}
if(lvl==0){
lvl1();
}
if (lvl==1)
{
lvl2();
}
if (lvl==2)
{
lvl3();
}
}
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyReleased(KeyEvent arg0) {
int key = arg0.getKeyCode();
switch (key){
case KeyEvent.VK_LEFT: links(); break;
}
}
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
(Ich hoff das ist nicht zu verwirrend ^^) :###