Hallo,
Ich bin dabei ein Tetris spiel mithilfe von JButtons, die in einem Array angeordnet sind (so vorgegeben) zu programmieren. Durch den Button in der Main möchte ich nur erstmal dien Block I in meinem JPanel erzeugen und bei jedem weiteren mal auf den Knopf drücken um 90° drehen. Die Methode ArrayTurn zum drehen funktioniert an sich auch aber mein Problem ist, dass der Block beim drücken auf den Knopf in dem JPanel sich zwar drehen würde, aber man dies nicht sieht, da an den Positionen ja schon ein Objekt vorhanden ist.
Klasse für den Block:
Klasse für die Figur I:
Main Metohde:
Danke für eure Hilfe. PS: bin neu hier
Ich bin dabei ein Tetris spiel mithilfe von JButtons, die in einem Array angeordnet sind (so vorgegeben) zu programmieren. Durch den Button in der Main möchte ich nur erstmal dien Block I in meinem JPanel erzeugen und bei jedem weiteren mal auf den Knopf drücken um 90° drehen. Die Methode ArrayTurn zum drehen funktioniert an sich auch aber mein Problem ist, dass der Block beim drücken auf den Knopf in dem JPanel sich zwar drehen würde, aber man dies nicht sieht, da an den Positionen ja schon ein Objekt vorhanden ist.
Klasse für den Block:
Java:
package Figuren;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Block extends JButton {
public Block (Color c,int posX, int posY,JPanel jp) {
this.setBounds(posX, posY, 32, 32);
this.setOpaque(true);
this.setBorderPainted(false);
this.setBackground(c);
}
}
Klasse für die Figur I:
Java:
package Figuren;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
public class I {
private int[][] I10 = {{1, 0, 0, 0}, {1, 0, 0, 0} ,{1, 0, 0, 0}, {1, 0 ,0, 0}};
private int[][] I1 = I10;
public Block[][] I = new Block[4][4];
public Block[][] I2 = I;
public I (JPanel buene,int PosX,int PosY,int rotation,int erstellt) {
I1 = Arrayturn(I1,rotation);
for (int i=0; i<4;i++) {
for (int j=0; j<4; j++) {
if (I1[i][j]==1) {
I2[i][j] = new Block(Color.cyan,PosX+i*32,PosY+j*32,buene);
}
else {
I2[i][j] = new Block(Color.white,PosX,PosY,buene);
I2[i][j].setVisible(false);
}
buene.add(I2[i][j]);
if(rotation>0)I1 = I10;
buene.repaint();
I2=I;
}
}
}
private int[][] Arrayturn (int arr[][], int Häufigkeit) {
int[][] neuesArray = new int[arr[0].length][arr.length];
for(int a=0;a<=Häufigkeit;a++) {
for (int i = 0; i < neuesArray.length; i++) {
for (int j = 0; j < neuesArray[0].length; j++) {
neuesArray[j][i] = arr[j][arr[j].length - i - 1];
}
}
}
if(Häufigkeit ==4) Häufigkeit = 0;
return neuesArray;
}
}
Main Metohde:
Java:
package Spiel;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import Figuren.I;
import Figuren.J;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.event.ActionEvent;
public class Main extends JFrame {
public int rotation = 0;
private JPanel ui;
int c=0;
int b=0;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 600, 600);
ui = new JPanel();
ui.setBorder(new EmptyBorder(5, 5, 5, 5));
ui.setVisible(true);
ui.setLayout(null);
ui.requestFocus();
setContentPane(ui);
ui.setLayout(null);
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(c==4)c=0;
I a = new I (ui, 60, 60, c);
c++;
}
});
btnNewButton.setBounds(295, 179, 89, 48);
ui.add(btnNewButton);
}
}
Danke für eure Hilfe. PS: bin neu hier
Zuletzt bearbeitet: