Hi schlaue Java-Experten )
Ich bin 15 Jahre alt und bringe mir seit drei Wochen Java im Selbststudium bei.
Ich programmiere ein Spiel, bei dem ein
an einer zufälligen Stelle generiertes graues Kästchen (ein Quadrat von kästBreite*kästHöhe, ist aber veränderbar) angeklickt werden muss,
was dann einen Punkt gibt.
Wird das Kästchen verfehlt gibt's nen Minuspunkt. Nach jedem Klick wird neugezeichnet (repaint()) und das Kästchen wird wieder random auf das JPanel gezeichnet.
Das Spiel-Panel kann man dann in ein JFrame integrieren und spielen.
Die Darstellung des Punktestands über drawString() funkt super aber der Punkt/Versuche-Verhältnis-Balken als drawRect() und fillRect() funktioniert noch nicht richtig.
Beim Verhältnis-Balken soll das Verhältnis Punkte:Versuche dargestellt werden.
Der Balken soll also voll sein (144 Pixel), wenn man noch keinen Fehler gemacht hat,
und leer, wenn man noch keinen Treffer hatte.
Als Beispiel: #3 Punkte, 4 Versuche
#3/4 = 0,75
#Länge des Verhältnis-Balkens = 144
#0,75 * 144 = 108
#Balken zeigt also grafisch ca. drei-viertel an (108 Pixel lang)
Jedoch sobald man auch nur einen Klick falsch setzt (sprich: zähler--) funktioniert das nicht mehr.
Dass ich das Anzeigen des Balkens bei Punkte kleiner-gleich Null verhindere, hat den Grund, dass dann der Balken negativ wäre, und das ist ja Schwachsinn.
Ich hoffe ihr wollt (und könnt) mir helfen - das würde mich echt freuen!
Wenn es sonst noch Verbesserungsvorschläge zu meinem Code gibt, bitte sagen!
Hoffentlich ist der Code nicht zu lang und Danke für eure Hilfe! ;-)
Ich bin 15 Jahre alt und bringe mir seit drei Wochen Java im Selbststudium bei.
Ich programmiere ein Spiel, bei dem ein
an einer zufälligen Stelle generiertes graues Kästchen (ein Quadrat von kästBreite*kästHöhe, ist aber veränderbar) angeklickt werden muss,
was dann einen Punkt gibt.
Wird das Kästchen verfehlt gibt's nen Minuspunkt. Nach jedem Klick wird neugezeichnet (repaint()) und das Kästchen wird wieder random auf das JPanel gezeichnet.
Das Spiel-Panel kann man dann in ein JFrame integrieren und spielen.
Die Darstellung des Punktestands über drawString() funkt super aber der Punkt/Versuche-Verhältnis-Balken als drawRect() und fillRect() funktioniert noch nicht richtig.
Beim Verhältnis-Balken soll das Verhältnis Punkte:Versuche dargestellt werden.
Der Balken soll also voll sein (144 Pixel), wenn man noch keinen Fehler gemacht hat,
und leer, wenn man noch keinen Treffer hatte.
Als Beispiel: #3 Punkte, 4 Versuche
#3/4 = 0,75
#Länge des Verhältnis-Balkens = 144
#0,75 * 144 = 108
#Balken zeigt also grafisch ca. drei-viertel an (108 Pixel lang)
Jedoch sobald man auch nur einen Klick falsch setzt (sprich: zähler--) funktioniert das nicht mehr.
Dass ich das Anzeigen des Balkens bei Punkte kleiner-gleich Null verhindere, hat den Grund, dass dann der Balken negativ wäre, und das ist ja Schwachsinn.
Ich hoffe ihr wollt (und könnt) mir helfen - das würde mich echt freuen!
Wenn es sonst noch Verbesserungsvorschläge zu meinem Code gibt, bitte sagen!
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class HauptP extends JPanel
{
// Zeichenkoordinaten des Kästchens
static int posX, posY;
// Kästchenausmaße
static int kästBreite = 20, kästHöhe = 20;
//Punkte und Versuche
static int punkte;
static int versuche;
public HauptP()
{
super();
addMouseListener(new Lauscher());
}
public void paintComponent(Graphics g)
{
// Test wegen ArithmeticException (Teilen durch 0) und damit Balken nicht negativ
if(versuche > 0 && punkte > 0)
{
// Bildfläche wieder weiß färben
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
// Punktestand anzeigen
Color c = new Color(77, 155, 77);
g.setColor(c);
Font f = new Font("Verdana", Font.BOLD, 16);
g.setFont(f);
g.drawString("Punkte: " + punkte, 10, 20);
// Punkte/Klick-Verhältnis anzeigen
// Rahmen des Balkens zeichnen
g.drawString("Punkte/Klick-Verhältnis", 10, 45);
g.drawRect(223, 30, 150, 15);
// Balken zeichnen
int verhältnis = punkte / versuche;
int verhältnisBalken = verhältnis * 144;
g.fillRect(225, 32, verhältnisBalken, 10);
// Quadrat neuzeichnen
Random rndm = new Random();
posX = rndm.nextInt(getWidth() - kästBreite); // damit das Kästchen nicht
posY = rndm.nextInt(getHeight() - kästHöhe); // größer als das Fenster ist
g.setColor(Color.DARK_GRAY);
g.fillRect(posX, posY, kästBreite, kästHöhe);
g.dispose();
}
// Wenn Punktzahl kleiner-gleich Null oder Versuche kleiner-gleich Null, dann ohne Balken zeichnen
else
{
// Bildfläche wieder weiß färben
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
// Punktestand anzeigen
Color c = new Color(77, 155, 77);
g.setColor(c);
Font f = new Font("Verdana", Font.BOLD, 16);
g.setFont(f);
g.drawString("Punkte: " + punkte, 10, 20);
// Quadrat neuzeichnen
Random rndm = new Random();
posX = rndm.nextInt(getWidth() - kästBreite);
posY = rndm.nextInt(getHeight() - kästHöhe);
g.setColor(Color.DARK_GRAY);
g.fillRect(posX, posY, kästBreite, kästHöhe);
g.dispose();
}
}
private class Lauscher extends MouseAdapter
{
public void mousePressed(MouseEvent me)
{
int x = me.getX();
int y = me.getY();
// wenn Klick innerhalb des Kästchens liegt, einen Punkt
if( (x >= posX && x <= (posX + kästBreite)) && (y >= posY && y <= (posY + kästHöhe)) )
{
punkte++;
versuche++;
repaint();
}
// wenn nicht, einen Punkt Abzug
else
{
punkte--;
versuche++;
repaint();
}
}
}
}
Hoffentlich ist der Code nicht zu lang und Danke für eure Hilfe! ;-)
Zuletzt bearbeitet: