Das Beispiel in diesem Artikel beschreibt den in Java basierenden Jagd- und Schießspielcode, der auf Swing basiert. Teilen Sie es als Referenz mit allen.
Der spezifische Implementierungscode lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
Paketspiel;
import java.awt.Graphics;
java.awt.Image importieren;
import javax.swing.JPanel;
Die öffentliche Klasse BackgroundPanel erweitert JPanel {
private static final long serialVersionUID = 1L;
privates Bild image;// Hintergrundbild
öffentliches BackgroundPanel() {
setOpaque(false);
setLayout(null);
}
public void setImage(Image image) {
this.image = Bild;
}
/**
* Zeichnen Sie den Hintergrund
*/
protected void paintComponent(Graphics g) {
if (image != null) {
//Bildbreite
int width = getWidth();
// Bildhöhe
int height = getHeight();
// Zeichne das Bild
g.drawImage(image, 0, 0, width, height, this);
}
super.paintComponent(g);
}
}
Kopieren Sie den Codecode wie folgt:
Paketspiel;
import java.awt.Container;
import java.awt.event.*;
javax.swing.* importieren;
Die öffentliche Klasse BirdLabel erweitert JLabel und implementiert Runnable {
private static final long serialVersionUID = 1L;
// Erzeuge zufällig die Schlafzeit des Threads, d. h. steuere die Bewegungsgeschwindigkeit des Vogels
private int sleepTime = (int) (Math.random() * 300) + 5;
private int y = 100;
privater Thread thread; // Thread als Mitgliedsvariable verwenden
privater übergeordneter Container;
private int score = 15;//Die diesem Rollentyp entsprechende Punktzahl
/**
*Bauweise
*/
öffentliches BirdLabel() {
super();
//Erstelle ein Vogelsymbolobjekt
ImageIcon icon = new ImageIcon(getClass().getResource("bird.gif"));
setIcon(icon);//Legen Sie das Steuersymbol fest
addMouseListener(new MouseAction());//Maus-Ereignis-Listener hinzufügen
//Kontrollereignis-Listener hinzufügen
addComponentListener(new ComponentAction());
thread = new Thread(this);//Thread-Objekt erstellen
}
/**
* Kontrollereignis-Listener des Steuerelements
*/
private finale Klasse ComponentAction erweitert ComponentAdapter {
public void ComponentResized(final ComponentEvent e) {
thread.start();//Thread-Start
}
}
/**
* Maus-Ereignis-Listener des Controls
*/
private finale Klasse MouseAction erweitert MouseAdapter {
public void mousePressed(final MouseEvent e) {
if (!MainFrame.readyAmmo())// Wenn das Bullet nicht bereit ist
return;//Nichts tun
MainFrame.useAmmo(); // Kugeln verbrauchen
appScore(); // Bonuspunkte
destroy(); // Zerstöre diese Komponente
}
}
public void run() {
parent = null;
int width = 0;
versuchen {
while (width <= 0 || parent == null) {
if (parent == null) {
parent = getParent(); // Den übergeordneten Container abrufen
} anders {
width = parent.getWidth(); // Ermittelt die Breite des übergeordneten Containers
}
Thread.sleep(10);
}
for (int i = width; i > 0 && parent != null; i -= 8) {
setLocation(i, y);//Verschieben Sie die Position dieser Komponente von rechts nach links
Thread.sleep(sleepTime);//Eine Weile schlafen
}
} Catch (InterruptedException e) {
e.printStackTrace();
}
if (parent != null) {
MainFrame.appScore(-score * 10); // Natürliche Zerstörung zieht Punkte ab
}
destroy();// Zerstöre diese Komponente, nachdem die Verschiebung abgeschlossen ist
}
/**
* Methode zum Entfernen dieser Komponente aus dem Container
*/
Zerstörung der öffentlichen Leere() {
if (parent == null)
zurückkehren;
parent.remove(this);//Diese Datei aus dem übergeordneten Container entfernen
parent.repaint();
parent = null; // Beende die Thread-Schleife durch diese Anweisung
}
/**
* Möglichkeiten zum Hinzufügen von Punkten
*/
private void appScore() {
System.out.println("Der Vogel wurde getroffen");
MainFrame.appScore(15);
}
}
Kopieren Sie den Codecode wie folgt:
Paketspiel;
import java.awt.Container;
import java.awt.event.*;
javax.swing.* importieren;
öffentliche Klasse PigLabel erweitert JLabel implementiert Runnable {
private static final long serialVersionUID = 1L;
// Generiere zufällig die Schlafzeit, die der Bewegungsgeschwindigkeit des Wildschweins entspricht
private int sleepTime = (int) (Math.random() * 300) + 30;
private int y = 260;//Vertikale Koordinaten des Steuerelements
private int score = 10;//Die diesem Zeichen entsprechende Punktzahl
privater Thread-Thread; // integriertes Thread-Objekt
private Container parent;//Das übergeordnete Containerobjekt des Steuerelements
/**
*Bauweise
*/
öffentliches PigLabel() {
super();
ImageIcon icon = new ImageIcon(getClass().getResource("pig.gif"));//Wildschweinbilder laden
setIcon(icon);//Legen Sie das Symbol dieser Komponente fest
//Maus-Ereignisadapter hinzufügen
addMouseListener(new MouseAdapter() {
// Wie man mit dem Drücken von Maustasten umgeht
public void mousePressed(final MouseEvent e) {
if (!MainFrame.readyAmmo())
zurückkehren;
MainFrame.useAmmo(); // Kugeln verbrauchen
appScore(); // Punkte zum Spiel hinzufügen
destroy(); // Zerstöre diese Komponente
}
});
//Komponenten-Ereignisadapter hinzufügen
addComponentListener(new ComponentAdapter() {
//Bei der Größenänderung der Komponente
public void ComponentResized(final ComponentEvent e) {
thread.start();//Starte den Thread
}
});
// Initialisiere das Thread-Objekt
thread = neuer Thread(dies);
}
public void run() {
parent = null;
int width = 0;
while (width <= 0 || parent == null) {//Ermitteln Sie die Breite des übergeordneten Containers
if (parent == null)
parent = getParent();
anders
width = parent.getWidth();
}
//Diese Komponente von links nach rechts verschieben
for (int i = 0; i < width && parent != null; i += 8) {
setLocation(i, y);
versuchen {
Thread.sleep(sleepTime);//Eine Weile schlafen
} Catch (InterruptedException e) {
e.printStackTrace();
}
}
if (parent != null) {
MainFrame.appScore(-score * 10); // Natürliche Zerstörung zieht Punkte ab
}
zerstören();
}
/**
* Methode zum Entfernen dieser Komponente aus dem Container
*/
Zerstörung der öffentlichen Leere() {
if (parent == null)
zurückkehren;
parent.remove(this);
parent.repaint();
parent = null; // Beende die Thread-Schleife durch diese Anweisung
}
/**
* Möglichkeiten zum Hinzufügen von Punkten
*/
private void appScore() {
System.out.println("Das Wildschwein wurde getroffen");
MainFrame.appScore(10);
}
}
Kopieren Sie den Codecode wie folgt:
Paketspiel;
import static java.lang.Math.random;
java.awt.* importieren;
import java.awt.event.*;
javax.swing.* importieren;
öffentliche Klasse MainFrame erweitert JFrame {
private static final long serialVersionUID = 1L;
privater statischer langer Score = 0; // Score
private static Integer ammoNum = 5;//Anzahl der Kugeln
privates statisches JLabel ScoreLabel;// Score
privates BackgroundPanel backgroundPanel;
privates statisches JLabel ammoLabel;
privates statisches JPanel infoPane;
/**
*Bauweise
*/
public MainFrame() {
super();
setResizable(false);//Passen Sie die Größe des Formulars an
setTitle("Jagdspiel");
infoPane = (JPanel) getGlassPane(); // Holen Sie sich die Glasscheibe
JLabel label = new JLabel("Aufzählungszeichen laden...");//Eingabeaufforderungs-Label-Komponente erstellen
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font("楷体", Font.BOLD, 32));
label.setForeground(Color.RED);
infoPane.setLayout(new BorderLayout());
infoPane.add(label); // Eingabeaufforderungsetikettenkomponente zur Glasscheibe hinzufügen
setAlwaysOnTop(true);//Das Formular bleibt auf der obersten Ebene
setBounds(100, 100, 573, 411);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
backgroundPanel = new BackgroundPanel(); // Ein Panel mit einem Hintergrund erstellen
backgroundPanel.setImage(new ImageIcon(getClass().getResource(
"background.jpg")).getImage());//Legen Sie das Hintergrundbild fest
getContentPane().add(backgroundPanel, BorderLayout.CENTER);
//Maus-Ereignisadapter hinzufügen
addMouseListener(new FrameMouseListener());
scoreLabel = new JLabel(); // Label-Komponente, die Scores anzeigt
scoreLabel.setHorizontalAlignment(SwingConstants.CENTER);
scoreLabel.setForeground(Color.ORANGE);
scoreLabel.setText("Score:");
scoreLabel.setBounds(25, 15, 120, 18);
backgroundPanel.add(scoreLabel);
ammoLabel = new JLabel(); // Automatische Anzahl der Etikettenkomponenten anzeigen
ammoLabel.setForeground(Color.ORANGE);
ammoLabel.setHorizontalAlignment(SwingConstants.RIGHT);
ammoLabel.setText("Anzahl der Kugeln: " + ammoNum);
ammoLabel.setBounds(422, 15, 93, 18);
backgroundPanel.add(ammoLabel);
}
/**
* Extrapunkte-Methode
*/
öffentlich synchronisiertes statisches void appScore(int num) {
Punktzahl += num;
ScoreLabel.setText("Score: " + Score);
}
/**
* Wie man Kugeln verbraucht
*/
öffentlich synchronisiertes statisches void useAmmo() {
synchronisiert (ammoNum) {
ammoNum--;// Verringert die Anzahl der Kugeln
ammoLabel.setText("Anzahl der Kugeln: " + ammoNum);
if (ammoNum <= 0) {// Bestimmen Sie, ob die Kugel kleiner als 0 ist
neuer Thread(new Runnable() {
public void run() {
//Eingabeaufforderungsinformationsfeld anzeigen
infoPane.setVisible(true);
versuchen {
// 1 Sekunde, um Kugeln zu laden
Thread.sleep(1000);
} Catch (InterruptedException e) {
e.printStackTrace();
}
ammoNum = 5;//Stellen Sie die Anzahl der Kugeln wieder her
// Ändern Sie den Text der Aufzählungsmengenbezeichnung
ammoLabel.setText("Anzahl der Kugeln: " + ammoNum);
infoPane.setVisible(false);//Das Eingabeaufforderungsinformationsfeld ausblenden
}
}).Start();
}
}
}
/**
* Stellen Sie fest, ob die Kugeln ausreichen
*
*/
öffentlich synchronisierter statischer boolescher Wert readyAmmo() {
synchronisiert (ammoNum) {
return ammoNum > 0;
}
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
versuchen {
MainFrame-Frame = new MainFrame();
frame.setVisible(true);
frame.start();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
});
}
/**
* So starten Sie das Spiel
*/
public void start() {
new PigThread().start();
new BirdThread().start();
}
/**
* Maus-Ereignis-Listener für das Formular
*
*/
private finale Klasse FrameMouseListener erweitert MouseAdapter {
public void mousePressed(final MouseEvent e) {
Komponente at = backgroundPanel.getComponentAt(e.getPoint());
if (at exampleof BackgroundPanel) {//Wenn Sie auf das Panel klicken, werden auch Aufzählungszeichen abgezogen
MainFrame.useAmmo(); // Kugeln verbrauchen
}
/*
* if (bei Instanz von BirdLabel) {//Wenn Sie auf den BirdMainFrame.appScore(32);// klicken
*Bonuspunkte} if (bei Instanz von PigLabel) {// Wenn auf das Wildschwein geklickt wird
* MainFrame.appScore(11);//Extrapunkte}
*/
}
}
/**
* Thread, der Schweinezeichen generiert
*
*/
Klasse PigThread erweitert Thread {
@Override
public void run() {
while (wahr) {
//Erstelle ein Label-Steuerelement, das das Wildschwein darstellt
PigLabel pig = new PigLabel();
pig.setSize(120, 80);//Legen Sie die Anfangsgröße des Steuerelements fest
backgroundPanel.add(pig);//Füge Steuerelemente zum Hintergrundpanel hinzu
versuchen {
//Der Thread schläft zufällig eine Zeit lang
sleep((long) (random() * 3000) + 500);
} Catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* Der Thread, der den Vogelcharakter generiert
*
*/
Klasse BirdThread erweitert Thread {
@Override
public void run() {
while (wahr) {
//Erstelle ein Label-Steuerelement, das den Vogel darstellt
BirdLabel Bird = new BirdLabel();
Bird.setSize(50, 50);//Legen Sie die Anfangsgröße des Steuerelements fest
backgroundPanel.add(bird); // Steuerelemente zum Hintergrundpanel hinzufügen
versuchen {
//Der Thread schläft zufällig eine Zeit lang
sleep((long) (Math.random() * 3000) + 500);
} Catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.