Hallo zusammen,
ich habe mir ein kleines Spiel programmiert, was ich von Zeit zu Zeit um Funktionen erweitere. Jedoch gibt es 2 Probleme 1. ich kann den Dialog nicht über die Leertaste schließen sondern nur öffnen. Beim 2. mal Leertaste wird einfach der Button 1 auf diesen dialog ausgeführt. Mein 2. Problem ist das das Spiel nicht richtig schließt sondern sich iwíe nur unsichtbar macht. Dafür bräuchte ich auch noch Schlüsselsequenzen. Hier ist der Quelltext:
Und hier die 2. Klasse Timer die einwandfrei funktioniert:
Danke für eure Hilfe
ich habe mir ein kleines Spiel programmiert, was ich von Zeit zu Zeit um Funktionen erweitere. Jedoch gibt es 2 Probleme 1. ich kann den Dialog nicht über die Leertaste schließen sondern nur öffnen. Beim 2. mal Leertaste wird einfach der Button 1 auf diesen dialog ausgeführt. Mein 2. Problem ist das das Spiel nicht richtig schließt sondern sich iwíe nur unsichtbar macht. Dafür bräuchte ich auch noch Schlüsselsequenzen. Hier ist der Quelltext:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.Component;
import java.net.URL;
import javax.imageio.ImageIO;
import java.io.IOException;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class Steuerung extends JPanel implements Runnable, KeyListener, ActionListener{
JFrame Fenster;
JPanel panel;
JDialog dialog;
private boolean gestartet;
private boolean links = false;
private boolean rechts = false;
private int o = 300;
private int c = 1;
private int[] y = new int[44];
private int p = 0;
private int punkte = 0;
private String Name;
public BufferedImage Hintergrund;
public BufferedImage Korb;
public BufferedImage[] Apfel = new BufferedImage[44];
public ArrayList<Integer> Zahl = new ArrayList<Integer>();
public int[] Zufall = new int[44];
public int[] x = new int[44];
public Timer timer = new Timer(30);
public static void main(String[] args){
new Steuerung(700,800);
}
public Steuerung(int w, int h){
this.setPreferredSize(new Dimension(w,h));
Fenster = new JFrame("Apfelbaum 0.3 BETA");
Fenster.setLocation(350,0);
Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
dialog = new JDialog(Fenster,"Menü",true);
dialog.add(panel);
dialog.setSize(500, 500);
dialog.setLocation(460,150);
JButton Reset = new JButton("Reset");
Reset.addActionListener(this);
Reset.setBounds(100, 100, 100, 60);
panel.add(Reset);
Fenster.add(this);
Fenster.pack();
Fenster.addKeyListener(this);
dialog.addKeyListener(this);
Fenster.setVisible(true);
dialog.setVisible(false);
x[1] = 100;
x[2] = 200;
x[3] = 300;
x[4] = 300;
x[5] = 50;
x[6] = 400;
x[7] = 500;
x[8] = 400;
x[9] = 500;
x[10] = 550;
x[11] = 600;
x[12] = 550;
x[13] = 350;
x[14] = 550;
x[15] = 250;
x[16] = 650;
x[17] = 450;
x[18] = 350;
x[19] = 100;
x[20] = 150;
x[21] = 225;
x[22] = 280;
x[23] = 90;
x[24] = 325;
x[25] = 380;
x[26] = 380;
x[27] = 465;
x[28] = 480;
x[29] = 150;
x[30] = 465;
x[31] = 120;
x[32] = 230;
x[33] = 150;
x[34] = 100;
x[35] = 175;
x[36] = 200;
x[37] = 290;
x[38] = 40;
x[39] = 350;
x[40] = 533;
x[41] = 465;
x[42] = 620;
x[43] = 625;
y[1] = 100;
y[2] = 150;
y[3] = 250;
y[4] = 150;
y[5] = 200;
y[6] = 120;
y[7] = 120;
y[8] = 50;
y[9] = 80;
y[10] = 150;
y[11] = 250;
y[12] = 350;
y[13] = 400;
y[14] = 200;
y[15] = 300;
y[16] = 200;
y[17] = 375;
y[18] = 350;
y[19] = 300;
y[20] = 350;
y[21] = 70;
y[22] = 60;
y[23] = 225;
y[24] = 225;
y[25] = 300;
y[26] = 200;
y[27] = 200;
y[28] = 350;
y[29] = 250;
y[30] = 300;
y[31] = 350;
y[32] = 225;
y[33] = 200;
y[34] = 170;
y[35] = 120;
y[36] = 380;
y[37] = 375;
y[38] = 294;
y[39] = 112;
y[40] = 285;
y[41] = 243;
y[42] = 140;
y[43] = 340;
Thread th = new Thread(this);
th.start();
StarteSpiel();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(Hintergrund, 0, 0, this);
g.drawImage(Korb, o, 710,this);
g.drawImage(Apfel[1], x[1], y[1], this);
g.drawImage(Apfel[2], x[2], y[2], this);
g.drawImage(Apfel[3], x[3], y[3], this);
g.drawImage(Apfel[4], x[4], y[4], this);
g.drawImage(Apfel[5], x[5], y[5], this);
g.drawImage(Apfel[6], x[6], y[6], this);
g.drawImage(Apfel[7], x[7], y[7], this);
g.drawImage(Apfel[8], x[8], y[8], this);
g.drawImage(Apfel[9], x[9], y[9], this);
g.drawImage(Apfel[10], x[10], y[10], this);
g.drawImage(Apfel[11], x[11], y[11], this);
g.drawImage(Apfel[12], x[12], y[12], this);
g.drawImage(Apfel[13], x[13], y[13], this);
g.drawImage(Apfel[14], x[14], y[14], this);
g.drawImage(Apfel[15], x[15], y[15], this);
g.drawImage(Apfel[16], x[16], y[16], this);
g.drawImage(Apfel[17], x[17], y[17], this);
g.drawImage(Apfel[18], x[18], y[18], this);
g.drawImage(Apfel[19], x[19], y[19], this);
g.drawImage(Apfel[20], x[20], y[20], this);
g.drawImage(Apfel[21], x[21], y[21], this);
g.drawImage(Apfel[22], x[22], y[22], this);
g.drawImage(Apfel[23], x[23], y[23], this);
g.drawImage(Apfel[24], x[24], y[24], this);
g.drawImage(Apfel[25], x[25], y[25], this);
g.drawImage(Apfel[26], x[26], y[26], this);
g.drawImage(Apfel[27], x[27], y[27], this);
g.drawImage(Apfel[28], x[28], y[28], this);
g.drawImage(Apfel[29], x[29], y[29], this);
g.drawImage(Apfel[30], x[30], y[30], this);
g.drawImage(Apfel[31], x[31], y[31], this);
g.drawImage(Apfel[32], x[32], y[32], this);
g.drawImage(Apfel[33], x[33], y[33], this);
g.drawImage(Apfel[34], x[34], y[34], this);
g.drawImage(Apfel[35], x[35], y[35], this);
g.drawImage(Apfel[36], x[36], y[36], this);
g.drawImage(Apfel[37], x[37], y[37], this);
g.drawImage(Apfel[38], x[38], y[38], this);
g.drawImage(Apfel[39], x[39], y[39], this);
g.drawImage(Apfel[40], x[40], y[40], this);
g.drawImage(Apfel[41], x[41], y[41], this);
g.drawImage(Apfel[42], x[42], y[42], this);
g.drawImage(Apfel[43], x[43], y[43], this);
g.setColor(Color.red);
g.setFont(new Font("Arial", Font.PLAIN, 30));
g.drawString("Punkte: " + Long.toString(punkte), 530, 35);
g.drawString("Zeit: " + Long.toString(30 - timer.Zeit()), 15, 35);
}
public void run(){
while(Fenster.isVisible()){
if(gestartet == true){
for(int n = 1; n <= 44 && gestartet == true; n++){
for(int i = 1; i <= 250 && gestartet == true; i++){
BewegeObjekte();
if(y[Zufall[n]] <= 800){
y[Zufall[n]] = y[Zufall[n]] + 3;
repaint();
}
if(y[Zufall[n]] >= 705 && y[Zufall[n]] <= 720){
if(x[Zufall[n]] >= o - 5 && x[Zufall[n]] <= o + 125){
PunkteErhöhen();
y[Zufall[n]] = 1000;
}
}
try{
Thread.sleep(4);
}
catch(InterruptedException e){}
}
if(30 - timer.Zeit() <= 0){
repaint();
StoppeSpiel();
}
}
}
repaint();
}
}
private void Initialisieren(){
Zufall();
Hintergrund = LadeBilder("Bilder/Hintergrund.jpg",1)[0];
Korb = LadeBilder("Bilder/Korb.png",1)[0];
Apfel[1] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[2] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[3] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[4] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[5] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[6] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[7] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[8] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[9] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[10] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[11] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[12] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[13] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[14] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[15] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[16] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[17] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[18] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[19] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[20] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[21] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[22] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[23] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[24] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[25] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[26] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[27] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[28] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[29] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[30] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[31] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[32] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[33] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[34] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[35] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[36] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[37] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[38] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[39] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[40] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[41] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[42] = LadeBilder("Bilder/Apfel.png",1)[0];
Apfel[43] = LadeBilder("Bilder/Apfel.png",1)[0];
gestartet = false;
}
private void BewegeObjekte(){
if(rechts == true && o <= 572){
for( int i = 1; i <= 5 && rechts == true; i++){
o = o + 1;
repaint();
}
}
if(links == true && o >= 7){
for( int i = 1; i <= 5 && links == true; i++){
o = o - 1;
repaint();
}
}
}
private BufferedImage[] LadeBilder(String Pfad, int Bilder){
BufferedImage[] animation = new BufferedImage[Bilder];
BufferedImage source = null;
URL Hole_url = getClass().getClassLoader().getResource(Pfad);
try {
source = ImageIO.read(Hole_url);
} catch (IOException e) {}
for(int x=0;x<Bilder;x++){
animation[x] = source.getSubimage(x*source.getWidth()/Bilder, 0, source.getWidth()/Bilder, source.getHeight());
}
return animation;
}
private void StarteSpiel(){
Initialisieren();
SetzeGestartet(true);
timer.Countdown();
}
private void StoppeSpiel(){
try{
SetzeGestartet(false);
BufferedReader reader = new BufferedReader(new FileReader("Punkte.txt"));
p = Integer.parseInt(reader.readLine());
reader.close();
}
catch (IOException e){}
if(punkte > p){
Name = JOptionPane.showInputDialog(null,"Geben Sie Ihren Namen ein", "Neuer Highscore", JOptionPane.PLAIN_MESSAGE);
Speichern();
JOptionPane.showMessageDialog(null, "Herzlichen Glückwunsch " + Name + ". sie haben mit " + punkte + " Punkten ihr neuen persöhnlichen Highscore erziehlt.", Name, JOptionPane.INFORMATION_MESSAGE);
}
else{
JOptionPane.showMessageDialog(null, "Sie haben leider nur " + punkte + " Punkte => Kein neuer Highscore", "Leider kein neuer Highscore", JOptionPane.INFORMATION_MESSAGE);
}
try{
Thread.sleep(3000);
}
catch (Exception e){}
Fenster.setVisible(false);
}
public void SetzeGestartet(boolean gestartet) {
this.gestartet = gestartet;
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_LEFT){
links = true;
rechts = false;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
rechts = true;
links = false;
}
if(e.getKeyCode() == KeyEvent.VK_SPACE){
if(dialog.isVisible()){
dialog.setVisible(false);
}
else{
dialog.setVisible(true);
}
}
}
public void keyReleased(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_LEFT){
links = false;
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
rechts = false;
}
if(e.getKeyCode() == KeyEvent.VK_ESCAPE){
if(gestartet == true){
StoppeSpiel();
}
else{
Fenster.dispose();
}
}
}
public void keyTyped(KeyEvent e){
}
public void Zufall(){
for(int i = 0; i < 43; i++){
Zahl.add(i + 1);
}
Collections.shuffle(Zahl);
for(int i = 1; i < 43; i++){
Zufall[i] = Zahl.get(i);
}
}
public void PunkteErhöhen(){
punkte = punkte + 10;
}
public void Speichern(){
try{
BufferedWriter Puffer = new BufferedWriter(new FileWriter("Punkte.txt"));
Puffer.write(Integer.toString(punkte));
Puffer.newLine();
Puffer.close();
BufferedWriter Puffer2 = new BufferedWriter(new FileWriter("Rekord.txt"));
Puffer2.write(Name);
Puffer2.newLine();
Puffer2.close();
}
catch (IOException e){}
}
public void actionPerformed(ActionEvent event){
int eingabe = JOptionPane.showConfirmDialog(null, "Bist du dir sicher?", "Highscore löschen", JOptionPane.YES_NO_OPTION);
if(eingabe == 0){
try{
BufferedWriter Puffer = new BufferedWriter(new FileWriter("Punkte.txt"));
Puffer.write(Integer.toString(0));
Puffer.newLine();
Puffer.close();
BufferedWriter Puffer2 = new BufferedWriter(new FileWriter("Rekord.txt"));
Puffer2.write(" ");
Puffer2.newLine();
Puffer2.close();
}
catch (IOException e){}
}
}
}
Und hier die 2. Klasse Timer die einwandfrei funktioniert:
Java:
public class Timer{
private int delta, sekunden;
private long start, time, stop;
public Timer(int d){
delta = d * 1000;
start = System.currentTimeMillis();
stop = start + delta;
}
public void Countdown(){
time = System.currentTimeMillis();
while(time < stop){
time = System.currentTimeMillis();
if(time >= start + 1000){
sekunden++;
start = start + 1000;
}
}
}
public int Zeit(){
return sekunden;
}
}
Danke für eure Hilfe
Zuletzt bearbeitet von einem Moderator: