Hallo,
ich versuche zur Zeit ein Tetris Spiel zu programmieren und bin noch nicht so weit. Ich habe ein großes Problem: wenn ich die Blöcke unten absetze kommen zwar die neuen blöcke aber sie werden immer schneller und werden dann auf einmal fast unendlich schnell. Hier ist der Code:
ich versuche zur Zeit ein Tetris Spiel zu programmieren und bin noch nicht so weit. Ich habe ein großes Problem: wenn ich die Blöcke unten absetze kommen zwar die neuen blöcke aber sie werden immer schneller und werden dann auf einmal fast unendlich schnell. Hier ist der Code:
Java:
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.Timer;
import javax.swing.border.Border;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.ItemSelectable;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Random;
public class fenster {
private JFrame hauptfenster;
private JPanel panel1;
private JPanel panel2;
private Dimension comboboxd;
private Dimension panel1d;
private Dimension panel2d;
private Dimension hauptfensterd;
private Border border1;
private Random zufall;
private DrawBlock block;
private Timer timer1;
private boolean nix;
private JComboBox combobox;
private JLabel auswahllabel;
private int auswahlInt;
private String[] auswahl;
private Action leftaction;
private Action rightaction;
private ArrayList<DrawBlock> bloecke;
private int anzahlbloecke;
private int yG;
public fenster() {
yG = 10;
anzahlbloecke = 0;
bloecke = new ArrayList<DrawBlock>();
leftaction = new leftaction();
rightaction = new rightaction();
auswahllabel = new JLabel("Schwierigkeitsgrad:");
String[] auswahl = { " ", "Leicht", "Mittel", "Schwer"};
combobox = new JComboBox(auswahl);
combobox.setPreferredSize(comboboxd);
combobox.setSelectedIndex(0);
combobox.addItemListener(new comboboxlistener());
nix = false;
zufall = new Random();
border1 = BorderFactory.createLineBorder(Color.black);
hauptfenster = new JFrame("Ultris");
panel1 = new JPanel(new BorderLayout());
panel2 = new JPanel();
comboboxd = new Dimension(80, 20);
hauptfensterd = new Dimension(700, 700);
panel1d = new Dimension(500, 600);
panel2d = new Dimension(130, 600);
setFrameproperties();
}
public void setFrameproperties() {
hauptfenster.setLayout(new FlowLayout());
hauptfenster.setSize(hauptfensterd);
hauptfenster.add(panel1);
hauptfenster.add(panel2);
panel2.setLayout(new FlowLayout());
panel2.setPreferredSize(panel2d);
panel2.setBorder(border1);
panel2.add(auswahllabel);
panel2.add(combobox);
panel1.setPreferredSize(panel1d);
panel1.setBorder(border1);
panel1.getInputMap().put(KeyStroke.getKeyStroke("A"), "Apressed");
panel1.getActionMap().put("Apressed", leftaction);
panel1.getInputMap().put(KeyStroke.getKeyStroke("D"), "Dpressed");
panel1.getActionMap().put("Dpressed", rightaction);
bloecke.add(anzahlbloecke, new DrawBlock(200, 0));
panel1.add(bloecke.get(anzahlbloecke));
hauptfenster.pack();
hauptfenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
hauptfenster.setVisible(true);
}
class DrawBlock extends JPanel {
private final Color red = Color.red;
private int pY;
private int pX;
public DrawBlock(int xstart, int ystart) {
pX = xstart;
pY = ystart;
}
public void paintComponent(Graphics g) {
Graphics2D g2D=(Graphics2D) g;
g2D.setColor(red);
g2D.fillRect(pX, pY, 100, 50);
bloecke.get(anzahlbloecke).pY += yG;
}
}
class comboboxlistener implements ItemListener {
public void itemStateChanged(ItemEvent e) {
if(combobox.getSelectedIndex()== 1) {
timer1 = new Timer(100, new timerlistener());
timer1.setInitialDelay(500);
timer1.start();
auswahllabel.setVisible(false);
combobox.setVisible(false);
yG = 10;
}
if(combobox.getSelectedIndex()== 2) {
timer1 = new Timer(100, new timerlistener());
timer1.setInitialDelay(500);
timer1.start();
auswahllabel.setVisible(false);
combobox.setVisible(false);
yG = 15;
}
if(combobox.getSelectedIndex()== 3) {
timer1 = new Timer(100, new timerlistener());
timer1.setInitialDelay(500);
timer1.start();
auswahllabel.setVisible(false);
combobox.setVisible(false);
yG = 20;
}
}
}
public static void main(String[] args) {
new fenster();
}
class timerlistener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if(bloecke.get(anzahlbloecke).pY<550) {
panel1.repaint();
panel1.validate();
}
else {
anzahlbloecke++;
bloecke.add(anzahlbloecke, new DrawBlock(200, 0));
panel1.add(bloecke.get(anzahlbloecke));
panel1.validate();
}
}
}
class leftaction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
bloecke.get(anzahlbloecke).pX -= 15;
panel1.repaint();
}
}
class rightaction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent e) {
bloecke.get(anzahlbloecke).pX += 15;
panel1.repaint();
}
}
}