ตัวอย่างในบทความนี้จะอธิบายโค้ดเกมล่าสัตว์และยิงปืนที่ใช้งานใน Java โดยอิงจาก Swing แบ่งปันกับทุกคนสำหรับการอ้างอิงของคุณ
รหัสการใช้งานเฉพาะมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจเกม;
นำเข้า java.awt.Graphics;
นำเข้า java.awt.Image;
นำเข้า javax.swing.JPanel;
BackgroundPanel คลาสสาธารณะขยาย JPanel {
serialVersionUID ยาวสุดท้ายแบบคงที่ส่วนตัว = 1L;
รูปภาพรูปภาพส่วนตัว;// ภาพพื้นหลัง
พื้นหลังสาธารณะ () {
setOpaque(เท็จ);
setLayout(โมฆะ);
-
setImage โมฆะสาธารณะ (รูปภาพรูปภาพ) {
this.image = รูปภาพ;
-
-
* วาดพื้นหลัง
-
ป้องกันโมฆะสีส่วนประกอบ (กราฟิก g) {
ถ้า (ภาพ != null) {
//ความกว้างของภาพ
ความกว้าง int = getWidth();
//ความสูงของภาพ
int height = getHeight();
//วาดรูป
g.drawImage(รูปภาพ, 0, 0, ความกว้าง, ความสูง, นี่);
-
ซุปเปอร์.paintComponent(g);
-
-
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจเกม;
นำเข้า java.awt.Container;
นำเข้า java.awt.event.*;
นำเข้า javax.swing.*;
BirdLabel คลาสสาธารณะขยาย JLabel ใช้งาน Runnable {
serialVersionUID ยาวสุดท้ายแบบคงที่ส่วนตัว = 1L;
// สุ่มสร้างเวลาพักของเธรด นั่นคือ ควบคุมความเร็วในการเคลื่อนที่ของนก
ส่วนตัว int sleepTime = (int) (Math.random() * 300) + 5;
ส่วนตัว int y = 100;
เธรดส่วนตัว // ใช้เธรดเป็นตัวแปรสมาชิก
พาเรนต์คอนเทนเนอร์ส่วนตัว
คะแนน int ส่วนตัว = 15;//คะแนนที่สอดคล้องกับบทบาทประเภทนี้
-
*วิธีการก่อสร้าง
-
BirdLabel สาธารณะ () {
ซุปเปอร์();
//สร้างวัตถุไอคอนนก
ไอคอน ImageIcon = ImageIcon ใหม่ (getClass().getResource("bird.gif"));
setIcon(icon);//ตั้งค่าไอคอนควบคุม
addMouseListener(new MouseAction());//เพิ่มตัวฟังเหตุการณ์เมาส์
//เพิ่มผู้ฟังเหตุการณ์การควบคุม
addComponentListener (ส่วนประกอบใหม่ ());
thread = new Thread(this);//สร้างวัตถุ thread
-
-
* ควบคุมผู้ฟังเหตุการณ์ของการควบคุม
-
คลาสสุดท้ายส่วนตัว ComponentAction ขยาย ComponentAdapter {
โมฆะสาธารณะคอมโพเนนต์ปรับขนาด (สุดท้าย ComponentEvent e) {
thread.start();//เริ่มกระทู้
-
-
-
* ฟังเหตุการณ์เมาส์ของ Control
-
MouseAction คลาสสุดท้ายส่วนตัวขยาย MouseAdapter {
โมฆะสาธารณะ mousePressed (สุดท้าย MouseEvent e) {
if (!MainFrame.readyAmmo())// ถ้ากระสุนไม่พร้อม
กลับ;//ไม่ทำอะไรเลย
MainFrame.useAmmo(); // ใช้กระสุน
appScore(); // คะแนนโบนัส
destroy(); // ทำลายส่วนประกอบนี้
-
-
โมฆะสาธารณะวิ่ง () {
ผู้ปกครอง = โมฆะ;
ความกว้าง int = 0;
พยายาม {
ในขณะที่ (ความกว้าง <= 0 || parent == null) {
ถ้า (พาเรนต์ == null) {
parent = getParent(); // รับคอนเทนเนอร์หลัก
} อื่น {
width = parent.getWidth(); // รับความกว้างของคอนเทนเนอร์หลัก
-
เธรด.สลีป(10);
-
สำหรับ (int i = width; i > 0 && parent != null; i -= 8) {
setLocation(i, y);//ย้ายตำแหน่งของส่วนประกอบนี้จากขวาไปซ้าย
Thread.sleep(sleepTime);//หลับไปสักพัก
-
} จับ (InterruptedException e) {
e.printStackTrace();
-
ถ้า (พาเรนต์ != null) {
MainFrame.appScore(-score * 10); // การทำลายตามธรรมชาติจะหักคะแนน
-
destroy();// หลังจากการย้ายเสร็จสิ้น ให้ทำลายส่วนประกอบนี้
-
-
* วิธีการถอดส่วนประกอบนี้ออกจากคอนเทนเนอร์
-
การทำลายล้างโมฆะสาธารณะ () {
ถ้า (พาเรนต์ == null)
กลับ;
parent.remove(this);//ลบไฟล์นี้ออกจากคอนเทนเนอร์หลัก
parent.repaint();
parent = null; // ยุติการวนซ้ำเธรดผ่านคำสั่งนี้
-
-
* วิธีเพิ่มคะแนน
-
appScore เป็นโมฆะส่วนตัว () {
System.out.println("นกถูกโจมตี");
MainFrame.appScore(15);
-
-
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจเกม;
นำเข้า java.awt.Container;
นำเข้า java.awt.event.*;
นำเข้า javax.swing.*;
PigLabel คลาสสาธารณะขยาย JLabel ใช้งาน Runnable {
serialVersionUID ยาวสุดท้ายแบบคงที่ส่วนตัว = 1L;
// สุ่มสร้างเวลานอนซึ่งเป็นความเร็วเคลื่อนที่ของหมูป่า
ส่วนตัว int sleepTime = (int) (Math.random() * 300) + 30;
ส่วนตัว int y = 260;//พิกัดแนวตั้งของตัวควบคุม
คะแนน int ส่วนตัว = 10;//คะแนนที่สอดคล้องกับตัวละครนี้
เธรดเธรดส่วนตัว // วัตถุเธรดในตัว
พาเรนต์คอนเทนเนอร์ส่วนตัว;//วัตถุคอนเทนเนอร์พาเรนต์ของตัวควบคุม
-
*วิธีการก่อสร้าง
-
PigLabel สาธารณะ () {
ซุปเปอร์();
ไอคอน ImageIcon = new ImageIcon(getClass().getResource("pig.gif"));//โหลดรูปภาพหมูป่า
setIcon(icon);//ตั้งค่าไอคอนของส่วนประกอบนี้
//เพิ่มอะแดปเตอร์เหตุการณ์เมาส์
addMouseListener (MouseAdapter ใหม่ () {
// วิธีจัดการกับการกดปุ่มเมาส์
โมฆะสาธารณะ mousePressed (สุดท้าย MouseEvent e) {
ถ้า (!MainFrame.readyAmmo())
กลับ;
MainFrame.useAmmo(); // ใช้กระสุน
appScore(); // เพิ่มคะแนนให้กับเกม
destroy(); // ทำลายส่วนประกอบนี้
-
-
//เพิ่มอะแดปเตอร์เหตุการณ์ส่วนประกอบ
addComponentListener (ComponentAdapter ใหม่ () {
//เมื่อปรับขนาดส่วนประกอบ
โมฆะสาธารณะคอมโพเนนต์ปรับขนาด (สุดท้าย ComponentEvent e) {
thread.start();//เริ่มเธรด
-
-
// เริ่มต้นวัตถุเธรด
thread = เธรดใหม่ (สิ่งนี้);
-
โมฆะสาธารณะวิ่ง () {
ผู้ปกครอง = โมฆะ;
ความกว้าง int = 0;
ในขณะที่ (ความกว้าง <= 0 || parent == null) {//รับความกว้างของคอนเทนเนอร์หลัก
ถ้า (พาเรนต์ == null)
ผู้ปกครอง = getParent();
อื่น
ความกว้าง = parent.getWidth();
-
//ย้ายส่วนประกอบนี้จากซ้ายไปขวา
สำหรับ (int i = 0; i < width && parent != null; i += 8) {
setLocation(i, y);
พยายาม {
Thread.sleep(sleepTime);//หลับไปสักพัก
} จับ (InterruptedException e) {
e.printStackTrace();
-
-
ถ้า (พาเรนต์ != null) {
MainFrame.appScore(-score * 10); // การทำลายตามธรรมชาติจะหักคะแนน
-
ทำลาย();
-
-
* วิธีการถอดส่วนประกอบนี้ออกจากคอนเทนเนอร์
-
การทำลายล้างเป็นโมฆะสาธารณะ () {
ถ้า (พาเรนต์ == null)
กลับ;
parent.remove(นี้);
parent.repaint();
parent = null; // ยุติการวนซ้ำเธรดผ่านคำสั่งนี้
-
-
* วิธีเพิ่มคะแนน
-
appScore เป็นโมฆะส่วนตัว () {
System.out.println("หมูป่าถูกโจมตี");
MainFrame.appScore(10);
-
-
คัดลอกรหัสรหัสดังต่อไปนี้:
แพ็คเกจเกม;
นำเข้า java.lang.Math.random แบบคงที่
นำเข้า java.awt.*;
นำเข้า java.awt.event.*;
นำเข้า javax.swing.*;
MainFrame ระดับสาธารณะขยาย JFrame {
serialVersionUID ยาวสุดท้ายแบบคงที่ส่วนตัว = 1L;
คะแนนยาวคงที่ส่วนตัว = 0; // คะแนน
ammoNum จำนวนเต็มคงที่ส่วนตัว = 5;//จำนวนกระสุน
JLabel ScoreLabel แบบคงที่ส่วนตัว;// คะแนน
พื้นหลังแผงพื้นหลังส่วนตัวแผง;
JLabel ammoLabel แบบคงที่ส่วนตัว;
JPanel infoPane แบบคงที่ส่วนตัว;
-
*วิธีการก่อสร้าง
-
MainFrame สาธารณะ () {
ซุปเปอร์();
setResizable(false);//ปรับขนาดของแบบฟอร์ม
setTitle("เกมล่าสัตว์");
infoPane = (JPanel) getGlassPane(); // รับแผงกระจก
JLabel label = new JLabel("Load bullets...");//สร้างส่วนประกอบป้ายกำกับพร้อมท์
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(แบบอักษรใหม่("楷体", Font.BOLD, 32));
label.setForeground(สี.RED);
infoPane.setLayout(BorderLayout ใหม่());
infoPane.add(label);//เพิ่มส่วนประกอบป้ายกำกับพร้อมท์ลงในแผงกระจก
setAlwaysOnTop(true);//ฟอร์มยังคงอยู่ที่ระดับบนสุด
ตั้งค่าขอบเขต(100, 100, 573, 411);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
backgroundPanel = new BackgroundPanel(); // สร้างพาเนลที่มีพื้นหลัง
backgroundPanel.setImage (ImageIcon ใหม่ (getClass().getResource(
"พื้นหลัง.jpg")).getImage());//ตั้งค่าภาพพื้นหลัง
getContentPane().add(พื้นหลังแผง, BorderLayout.CENTER);
//เพิ่มอะแดปเตอร์เหตุการณ์เมาส์
addMouseListener(FrameMouseListener ใหม่());
ScoreLabel = new JLabel(); // องค์ประกอบป้ายกำกับที่แสดงคะแนน
ScoreLabel.setHorizontalAlignment (SwingConstants.CENTER);
ScoreLabel.setForeground(Color.ORANGE);
ScoreLabel.setText("คะแนน:");
ScoreLabel.setBounds(25, 15, 120, 18);
backgroundPanel.add(scoreLabel);
ammoLabel = new JLabel(); // แสดงจำนวนส่วนประกอบฉลากอัตโนมัติ
ammoLabel.setForeground(สี.สีส้ม);
ammoLabel.setHorizontalAlignment (SwingConstants.RIGHT);
ammoLabel.setText("จำนวนกระสุน: " + ammoNum);
ammoLabel.setBounds(422, 15, 93, 18);
backgroundPanel.add(กระสุนกระสุน);
-
-
* วิธีแต้มพิเศษ
-
appScore โมฆะคงที่ที่ซิงโครไนซ์สาธารณะ (int num) {
คะแนน += จำนวน;
ScoreLabel.setText("คะแนน: " + คะแนน);
-
-
* วิธีการบริโภคกระสุน
-
โมฆะคงสาธารณะ useAmmo () {
ซิงโครไนซ์ (ammoNum) {
ammoNum--;// ลดจำนวนกระสุน
ammoLabel.setText("จำนวนกระสุน: " + ammoNum);
if (ammoNum <= 0) {// ตรวจสอบว่ากระสุนมีค่าน้อยกว่า 0 หรือไม่
เธรดใหม่ (เรียกใช้ใหม่ () {
โมฆะสาธารณะวิ่ง () {
//แสดงแผงข้อมูลพร้อมท์
infoPane.setVisible (จริง);
พยายาม {
// 1 วินาทีเพื่อโหลดกระสุน
เธรด.สลีป(1,000);
} จับ (InterruptedException e) {
e.printStackTrace();
-
ammoNum = 5;//เรียกคืนจำนวนกระสุน
// แก้ไขข้อความของป้ายกำกับปริมาณสัญลักษณ์แสดงหัวข้อย่อย
ammoLabel.setText("จำนวนกระสุน: " + ammoNum);
infoPane.setVisible(false);//ซ่อนแผงข้อมูลที่แจ้ง
-
}).เริ่ม();
-
-
-
-
* ตรวจสอบว่ากระสุนเพียงพอหรือไม่
-
-
สาธารณะซิงโครไนซ์บูลีนคงที่ readyAmmo () {
ซิงโครไนซ์ (ammoNum) {
ส่งคืนกระสุน> 0;
-
-
โมฆะคงที่สาธารณะ main (String args []) {
EventQueue.inurgeLater (เรียกใช้ใหม่ () {
โมฆะสาธารณะวิ่ง () {
พยายาม {
MainFrame frame = MainFrame ใหม่();
frame.setVisible(จริง);
เฟรม.เริ่มต้น();
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
-
-
-
* วิธีการเริ่มเกม
-
โมฆะสาธารณะเริ่มต้น () {
ใหม่ PigThread().start();
ใหม่ BirdThread().start();
-
-
* ฟังเหตุการณ์เมาส์สำหรับแบบฟอร์ม
-
-
คลาสสุดท้ายส่วนตัว FrameMouseListener ขยาย MouseAdapter {
โมฆะสาธารณะ mousePressed (สุดท้าย MouseEvent e) {
องค์ประกอบที่ = backgroundPanel.getComponentAt(e.getPoint());
ถ้า (ที่อินสแตนซ์ของ BackgroundPanel) {//หากคุณคลิกที่แผง สัญลักษณ์แสดงหัวข้อย่อยจะถูกหักออกด้วย
MainFrame.useAmmo(); // ใช้กระสุน
-
-
* ถ้า (ที่อินสแตนซ์ของ BirdLabel) {//หากคุณคลิกที่ birdMainFrame.appScore(32);//
* คะแนนโบนัส} ถ้า (ที่อินสแตนซ์ของ PigLabel) {// หากคลิกหมูป่า
* MainFrame.appScore(11);//คะแนนพิเศษ}
-
-
-
-
* กระทู้สร้างตัวละครหมู
-
-
คลาส PigThread ขยายเธรด {
@แทนที่
โมฆะสาธารณะวิ่ง () {
ในขณะที่ (จริง) {
//สร้างตัวควบคุมป้ายกำกับที่แสดงถึงหมูป่า
PigLabel pig = PigLabel ใหม่ ();
pig.setSize(120, 80);//กำหนดขนาดเริ่มต้นของตัวควบคุม
backgroundPanel.add(pig);//เพิ่มการควบคุมให้กับแผงพื้นหลัง
พยายาม {
// เธรดสุ่มเข้าสู่ช่วงระยะเวลาหนึ่ง
sleep((ยาว) (สุ่ม() * 3000) + 500);
} จับ (InterruptedException e) {
e.printStackTrace();
-
-
-
-
-
* ด้ายที่สร้างตัวละครนก
-
-
คลาส BirdThread ขยายเธรด {
@แทนที่
โมฆะสาธารณะวิ่ง () {
ในขณะที่ (จริง) {
//สร้างตัวควบคุมป้ายกำกับที่แสดงถึงนก
BirdLabel นก = BirdLabel ใหม่ ();
bird.setSize(50, 50);//กำหนดขนาดเริ่มต้นของตัวควบคุม
backgroundPanel.add(bird);//เพิ่มการควบคุมให้กับแผงพื้นหลัง
พยายาม {
// เธรดสุ่มเข้าสู่ช่วงระยะเวลาหนึ่ง
sleep((ยาว) (Math.random() * 3000) + 500);
} จับ (InterruptedException e) {
e.printStackTrace();
-
-
-
-
-
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน