ich habe diesen code:
es wird ein fenster erzeugt mit einer beliebigen höhe und breite, darin bewegt sich mein kleines feld mit wasd kann ich es bewegen...
ich möchte nun ein maze erzeugen in dem sich das feld bewegen kann, ich könnte im move befehl ne abfrage machen ob das nächste feld geblockt ist das ist kein problem ich weiß nur nicht wie ich eine methode schrieben soll, die mir ein maze erzeugt und die checkt ob es lösbar ist....
ideen vorschläge?
Java:
package GridGames;
import java.util.Timer;
public class GridAutoMove extends JFrame implements KeyListener
{
private JPanel contentPane;
private int hight = 10; //Höhe und breite des Spielfeldes
private int width = 10;
private Timer timer = new Timer(); //für den Timer
private int begin = 5000;
private int timeinterval = 350;
private int zaehler = 0;
private JLabel[][] map = new JLabel[hight][width]; //2D-Array um einzeln auf die labels zuzugreifen
private int aktH = 0; //das aktuelle feld - das rote
private int aktW = 0;
private boolean weiter = true; //abfrage ob gameover oder nicht
private boolean pause = false; // mit p kann man pausieren
private String direction = "down"; //die aktuelle richtung
public static void main(String[] args) //aufruf des programms
{
EventQueue.invokeLater(new Runnable() {
}
public GridAutoMove() //erstellung des Gitters / grids
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 300, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(hight,width));
createGrid(); // hier wird eigentlich das gitter erstellt
addKeyListener(this); //damit wasd & p auch was machen
}
public void createGrid() //hintergrundfarben / blaue ränder und ein rotes feld erzeugen
{
for (int i = 0; i < map.length; i++)
{
for (int j = 0; j < map[i].length; j++)
{
Border border = BorderFactory.createLineBorder(Color.BLUE, 1);
map[i][j] = new JLabel();
map[i][j].setBorder(border);
map[i][j].setBackground(Color.GRAY);
map[i][j].setOpaque(true);
contentPane.add(map[i][j]);
}
}
map[0][0].setBackground(Color.RED);
timerx(); // aufruf des timers - damit sich das rote feld alleine bewegt
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e) //input für die jeweiligen tasten erkennen
{
char input = e.getKeyChar();
switch(input)
{
case 'w' : direction="up";
break;
case 's' : direction="down";
break;
case 'a' : direction="left";
break;
case 'd' : direction="right";
break;
case 'p' : pause();
break;
default : System.out.println("False Eingabe"); ;
}
}
@Override
public void keyReleased(KeyEvent e)
{
}
public void goDown() //in die jeweilige richtung bewegen
{ //weiter auf flase wenn rand berürt
if(aktH != 9)
{
map[aktH][aktW].setBackground(Color.GRAY);
aktH += 1;
map[aktH][aktW].setBackground(Color.RED);
}else if(aktH == 9)
{
System.out.println("GAME OVER");
weiter = false;
}
}
public void goUp()
{
if(aktH != 0)
{
map[aktH][aktW].setBackground(Color.GRAY);
aktH -= 1;
map[aktH][aktW].setBackground(Color.RED);
}else if(aktH == 0)
{
System.out.println("GAME OVER");;
weiter = false;
}
}
public void goLeft()
{
if(aktW != 0)
{
map[aktH][aktW].setBackground(Color.GRAY);
aktW -= 1;
map[aktH][aktW].setBackground(Color.RED);
}else if(aktW == 0)
{
System.out.println("GAME OVER");
weiter = false;
}
}
public void goRight()
{
if(aktW != 9)
{
map[aktH][aktW].setBackground(Color.GRAY);
aktW += 1;
map[aktH][aktW].setBackground(Color.RED);
}else if(aktW == 9)
{
System.out.println("GAME OVER");
weiter = false;
}
}
public void timerx() //im jeweiligen timeinterval wird nach begin move aufgerufen
{
timer.scheduleAtFixedRate(new TimerTask() {
}
public void Move() // je nach richtung wird das feld in die nächste position bewegt
{
if(direction.equalsIgnoreCase("down"))
{
goDown();
}else
if(direction.equalsIgnoreCase("up"))
{
goUp();
}else
if(direction.equalsIgnoreCase("right"))
{
goRight();
}else
if(direction.equalsIgnoreCase("left"))
{
goLeft();
}
}
public void pause() // wenn p dann wird der timer indirekt angehalten, durch die if abfrage im timer ob pause ja/nein ist
{
if(pause == false)
{
pause = true;
}
else if(pause == true)
{
pause = false;
}
}
}
es wird ein fenster erzeugt mit einer beliebigen höhe und breite, darin bewegt sich mein kleines feld mit wasd kann ich es bewegen...
ich möchte nun ein maze erzeugen in dem sich das feld bewegen kann, ich könnte im move befehl ne abfrage machen ob das nächste feld geblockt ist das ist kein problem ich weiß nur nicht wie ich eine methode schrieben soll, die mir ein maze erzeugt und die checkt ob es lösbar ist....
ideen vorschläge?