witam, zrobiłem grę sokoban w javie. chciałem prosić o uwagi i porady odnośnie kodu. gra składa się z klas, ogólnie wszystko działa ale brakuje kilku warunków podczas poruszania, gra jest oparta o tablice dwu wymiarową. pozdrawiam i wstawiam kod dla potomnych
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingsokoban;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
*
* @author marcin kaszuba
*/
public class ClassBoard extends JPanel{
private ClassMove classMove = new ClassMove(this);
private int sizeSquare = 40;
private int positionX = 50;
private int positionY = 50;
//0 - mur czarny
//1 - puste pole bialy
//2 - pudelko zielony
//3 - ludzik czerwony
//4 - pole końcowe
static int[][] plansza = {
{0,0,0,0,0,0,0,0,0,0,0,0,1,1},
{0,4,4,1,3,0,1,1,1,1,1,0,0,0},
{0,4,4,1,1,0,1,2,1,1,2,1,1,0},
{0,4,4,1,1,0,2,0,0,0,0,1,1,0},
{0,4,4,1,1,1,1,1,1,0,0,1,1,0},
{0,4,4,1,1,0,1,0,1,1,2,1,0,0},
{0,0,0,0,0,0,1,0,0,2,1,2,1,0},
{1,1,0,1,2,1,1,2,1,2,1,2,1,0},
{1,1,0,1,1,1,1,0,1,1,1,1,1,0},
{1,1,0,0,0,0,0,0,0,0,0,0,0,0}
};
public ClassBoard() {
this.setFocusable(true);
addKeyListener(classMove);
}
@Override
public void paint(Graphics graphics){
drawBoard(graphics);
}
void drawBoard(Graphics graphics){
super.paint(graphics);
for(int i = 0; i < plansza.length; ++i){
for(int j = 0; j < plansza[0].length; ++j){
if(plansza[i][j] == 0){
graphics.setColor(Color.BLACK);
graphics.fillRect((sizeSquare * j) + positionX, (sizeSquare * i) + positionY, sizeSquare, sizeSquare);
} else if(plansza[i][j] == 1){
graphics.setColor(Color.WHITE);
graphics.fillRect((sizeSquare * j) + positionX, (sizeSquare * i) + positionY, sizeSquare, sizeSquare);
} else if(plansza[i][j] == 2){
graphics.setColor(Color.GREEN);
graphics.fillRect((sizeSquare * j) + positionX, (sizeSquare * i) + positionY, sizeSquare, sizeSquare);
} else if(plansza[i][j] == 3){
graphics.setColor(Color.RED);
graphics.fillRoundRect((sizeSquare * j) + positionX, (sizeSquare * i) + positionY, sizeSquare, sizeSquare, 360, 360);
} else if(plansza[i][j] == 4){
graphics.setColor(Color.blue);
graphics.fillRoundRect((sizeSquare * j) + positionX, (sizeSquare * i) + positionY, sizeSquare, sizeSquare, 0, 0);
}
}
}
}
static void checkingFinish(){
if((plansza[1][1] == 2) && (plansza[1][2] == 2) && (plansza[2][1] == 2) && (plansza[2][2] == 2 &&
(plansza[3][1] == 2) && (plansza[3][2] == 2)) && (plansza[4][1] == 2) && (plansza[4][2] == 2) &&
(plansza[5][1] == 2) && (plansza[5][2] == 2)){
JOptionPane.showMessageDialog(null, "wygrana", "wygrales !!", JOptionPane.INFORMATION_MESSAGE);
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingsokoban;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
*
* @author marcin kaszuba
*/
public class ClassMove implements KeyListener{
private ClassBoard classBoard;
private int x = 1;
private int y = 4;
public ClassMove(ClassBoard classBoard) {
this.classBoard = classBoard;
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent keyEvent) {
switch(keyEvent.getKeyCode()){
case KeyEvent.VK_UP:
System.out.println("wcisles up");
if((ClassBoard.plansza[x - 1][y] == 2) && (ClassBoard.plansza[x - 2][y] == 4)){
ClassBoard.plansza[x - 2][y] = 2;
ClassBoard.plansza[x - 1][y] = 3;
ClassBoard.plansza[x][y] = 4;
x--;
} else if(ClassBoard.plansza[x - 1][y] == 1){
ClassBoard.plansza[x - 1][y] = 3;
ClassBoard.plansza[x][y] = 1;
x--;
} else if((ClassBoard.plansza[x - 1][y] == 2) && (ClassBoard.plansza[x - 2][y] == 1)){
ClassBoard.plansza[x - 2][y] = 2;
ClassBoard.plansza[x - 1][y] = 3;
ClassBoard.plansza[x][y] = 1;
x--;
} else if(ClassBoard.plansza[x - 1][y] == 4){
ClassBoard.plansza[x - 1][y] = 3;
ClassBoard.plansza[x][y] = 4;
x--;
}
break;
case KeyEvent.VK_DOWN:
System.out.println("wcisles down");
if((ClassBoard.plansza[x + 1][y] == 2) && (ClassBoard.plansza[x + 2][y] == 4)){
ClassBoard.plansza[x + 2][y] = 2;
ClassBoard.plansza[x + 1][y] = 3;
ClassBoard.plansza[x][y] = 4;
x++;
} else if((ClassBoard.plansza[x + 1][y] == 2) && (ClassBoard.plansza[x + 2][y] == 1)){
ClassBoard.plansza[x + 2][y] = 2;
ClassBoard.plansza[x + 1][y] = 3;
ClassBoard.plansza[x][y] = 1;
x++;
} else if(ClassBoard.plansza[x + 1][y] == 1){
ClassBoard.plansza[x + 1][y] = 3;
ClassBoard.plansza[x][y] = 1;
x++;
} else if(ClassBoard.plansza[x + 1][y] == 4){
ClassBoard.plansza[x + 1][y] = 3;
ClassBoard.plansza[x][y] = 4;
x++;
}
break;
case KeyEvent.VK_LEFT:
System.out.println("wcisles left");
if((ClassBoard.plansza[x][y - 1] == 4) && (ClassBoard.plansza[x][y - 2] == 2)){
ClassBoard.plansza[x][y - 2] = 2;
ClassBoard.plansza[x][y - 1] = 3;
ClassBoard.plansza[x][y] = 1;
y--;
} else if((ClassBoard.plansza[x][y - 1] == 2) && (ClassBoard.plansza[x][y - 2] == 4)){
ClassBoard.plansza[x][y - 2] = 2;
ClassBoard.plansza[x][y - 1] = 3;
ClassBoard.plansza[x][y] = 1;
y--;
} else if((ClassBoard.plansza[x][y - 1] == 2) && (ClassBoard.plansza[x][y - 2] == 1)){
ClassBoard.plansza[x][y - 2] = 2;
ClassBoard.plansza[x][y - 1] = 3;
ClassBoard.plansza[x][y] = 1;
y--;
} else if((ClassBoard.plansza[x][y - 1] == 4) && (ClassBoard.plansza[x][y - 2] == 4)){
ClassBoard.plansza[x][y - 1] = 3;
ClassBoard.plansza[x][y] = 1;
y--;
} else if(ClassBoard.plansza[x][y - 1] == 4){
ClassBoard.plansza[x][y - 1] = 3;
ClassBoard.plansza[x][y] = 4;
y--;
} else if(ClassBoard.plansza[x][y - 1] == 1){
ClassBoard.plansza[x][y - 1] = 3;
ClassBoard.plansza[x][y] = 1;
y--;
}
break;
case KeyEvent.VK_RIGHT:
System.out.println("wcisles right");
if((ClassBoard.plansza[x][y - 1] == 2) && (ClassBoard.plansza[x][y - 2] == 0) && (ClassBoard.plansza[x - 1][y] == 2) && (ClassBoard.plansza[x - 1][y - 1] == 1)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 1;
y++;
} else if((ClassBoard.plansza[x][y - 1] == 2) && (ClassBoard.plansza[x][y - 2] == 0) && (ClassBoard.plansza[x - 1][y] == 1)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 1;
y++;
} else if((ClassBoard.plansza[x][y - 1] == 4) && (ClassBoard.plansza[x][y - 2] == 0)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 4;
y++;
} else if((ClassBoard.plansza[x][y - 1] == 4) && (ClassBoard.plansza[x][y + 1] == 1)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 1;
y++;
} else if((ClassBoard.plansza[x][y - 1] == 4) && (ClassBoard.plansza[x][y - 2] == 3)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 1;
y++;
} else if((ClassBoard.plansza[x][y - 1] == 2) && (ClassBoard.plansza[x][y - 2] == 0)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 4;
y++;
} else if((ClassBoard.plansza[x][y - 1] == 0) && (ClassBoard.plansza[x][y + 1] == 4)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 4;
y++;
} else if((ClassBoard.plansza[x][y - 1] == 4) && (ClassBoard.plansza[x][y - 2] == 4)){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 1;
y++;
} else if((ClassBoard.plansza[x][y + 1] == 2) && (ClassBoard.plansza[x][y + 2] == 1)){
ClassBoard.plansza[x][y + 2] = 2;
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 1;
y++;
} else if(ClassBoard.plansza[x][y + 1] == 1){
ClassBoard.plansza[x][y + 1] = 3;
ClassBoard.plansza[x][y] = 1;
y++;
}
break;
}
classBoard.repaint();
ClassBoard.checkingFinish();
}
@Override
public void keyReleased(KeyEvent e) {
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingsokoban;
import java.awt.Dimension;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/**
*
* @author marcin kaszuba
*/
public class JavaSwingSokoban{
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame jFrame = new JFrame();
int widthWindow = 660;
int heightWindow = 500;
jFrame.setTitle("sokoban !!");
jFrame.setLocation(new Point(100, 100));
jFrame.setSize(new Dimension(widthWindow, heightWindow));
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setResizable(false);
jFrame.setVisible(true);
ClassBoard classBoard = new ClassBoard();
jFrame.add(classBoard);
}
});
}
}[/code]