يصف المثال الموجود في هذه المقالة كود لعبة الصيد والرماية المطبق في Java استنادًا إلى Swing. شاركها مع الجميع لتكون مرجعا لك.
رمز التنفيذ المحدد هو كما يلي:
انسخ رمز الكود كما يلي:
لعبة الحزمة؛
استيراد java.awt.Graphics؛
import java.awt.Image;
import javax.swing.JPanel;
الطبقة العامة BackupPanel تمتد JPanel {
serialVersionUID النهائي الطويل الخاص الثابت = 1L؛
صورة صورة خاصة؛// صورة الخلفية
لوحة الخلفية العامة () {
setOpaque(false);
setLayout(null);
}
مجموعة الفراغ العام (صورة الصورة) {
this.image = image;
}
/**
* رسم الخلفية
*/
محمي باطل الطلاءComponent(الرسومات ز) {
إذا (الصورة! = فارغة) {
// عرض الصورة
int width = getWidth();
// ارتفاع الصورة
int height = getHeight();
// ارسم الصورة
g.drawImage(image, 0, 0, width, height, this);
}
super.paintComponent(g);
}
}
انسخ رمز الكود كما يلي:
لعبة الحزمة؛
import java.awt.Container;
import java.awt.event.*;
استيراد javax.swing.*;
الطبقة العامة BirdLabel تمتد JLabel تنفذ Runnable {
serialVersionUID النهائي الطويل الخاص الثابت = 1L؛
// قم بإنشاء وقت نوم الخيط بشكل عشوائي، أي التحكم في سرعة حركة الطائر
Private int SleepTime = (int) (Math.random() * 300) + 5;
كثافة العمليات الخاصة ص = 100؛
مؤشر ترابط خاص؛ // استخدم مؤشر الترابط كمتغير للعضو
والد الحاوية الخاصة؛
درجة int الخاصة = 15;// النتيجة المقابلة لهذا النوع من الأدوار
/**
* طريقة البناء
*/
تسمية الطيور العامة () {
ممتاز()؛
// إنشاء كائن رمز الطيور
ImageIcon icon = new ImageIcon(getClass().getResource("bird.gif"));
setIcon(icon);// قم بتعيين رمز التحكم
addMouseListener(new MouseAction());//أضف مستمع حدث الماوس
// أضف مستمع حدث التحكم
addComponentListener(new ComponentAction());
thread = new Thread(this);// إنشاء كائن مؤشر ترابط
}
/**
* مراقبة حدث المستمع للتحكم
*/
الطبقة النهائية الخاصة ComponentAction تمتد ComponentAdapter {
مكون الفراغ العام (النهائي ComponentEvent e) {
thread.start();// بداية الموضوع
}
}
/**
* مستمع حدث الماوس للتحكم
*/
الطبقة النهائية الخاصة MouseAction تمتد MouseAdapter {
public void mousePressed(final MouseEvent e) {
if (!MainFrame.readyAmmo())// إذا لم تكن الرصاصة جاهزة
return;//لا تفعل شيئًا
MainFrame.useAmmo(); // تستهلك الرصاص
appScore(); // نقاط المكافأة
تدمير ()؛ // تدمير هذا المكون
}
}
تشغيل الفراغ العام () {
الأصل = فارغ؛
عرض كثافة العمليات = 0؛
يحاول {
بينما (العرض <= 0 || الأصل == فارغ) {
إذا (الوالد == فارغ) {
Parent = getParent(); // الحصول على الحاوية الأصلية
} آخر {
width =parent.getWidth(); // احصل على عرض الحاوية الأصلية
}
Thread.sleep(10);
}
for (int i = width; i > 0 &&parent != null; i -= 8) {
setLocation(i, y);// انقل موضع هذا المكون من اليمين إلى اليسار
Thread.sleep(sleepTime);//النوم لفترة من الوقت
}
} قبض على (InterruptedException e) {
printStackTrace();
}
إذا (الوالد! = فارغ) {
MainFrame.appScore(-score * 10); // التدمير الطبيعي سيخصم النقاط
}
Destroy();// بعد اكتمال النقل، قم بتدمير هذا المكون
}
/**
* طريقة إزالة هذا المكون من الحاوية
*/
تدمير الفراغ العام () {
إذا (الوالد == فارغ)
يعود؛
parent.remove(this);// قم بإزالة هذا الملف من الحاوية الأصلية
Parent.repaint();
Parent = null; // إنهاء حلقة الخيط من خلال هذا البيان
}
/**
* طرق إضافة النقاط
*/
التطبيق الفارغ الخاص () {
System.out.println("ضرب الطائر");
MainFrame.appScore(15);
}
}
انسخ رمز الكود كما يلي:
لعبة الحزمة؛
import java.awt.Container;
import java.awt.event.*;
استيراد javax.swing.*;
الطبقة العامة PigLabel تمتد JLabel تنفذ Runnable {
serialVersionUID النهائي الطويل الخاص الثابت = 1L؛
// قم بإنشاء وقت النوم بشكل عشوائي، وهو سرعة تحرك الخنزير البري
Private int SleepTime = (int) (Math.random() * 300) + 30;
Private int y = 260;//الإحداثيات الرأسية لعنصر التحكم
درجة int الخاصة = 10;// النتيجة المقابلة لهذا الحرف
موضوع موضوع خاص؛ // كائن موضوع مدمج
Private Containerparent;//كائن الحاوية الأصل لعنصر التحكم
/**
* طريقة البناء
*/
عامة PigLabel () {
ممتاز()؛
ImageIcon icon = new ImageIcon(getClass().getResource("pig.gif"));// تحميل صور الخنازير البرية
setIcon(icon);// قم بتعيين أيقونة هذا المكون
// أضف محول حدث الماوس
addMouseListener(new MouseAdapter() {
// كيفية التعامل مع الضغط على زر الفأرة
public void mousePressed(final MouseEvent e) {
إذا (!MainFrame.readyAmmo())
يعود؛
MainFrame.useAmmo(); // تستهلك الرصاص
appScore(); // إضافة نقاط إلى اللعبة
تدمير ()؛ // تدمير هذا المكون
}
});
// أضف محول حدث المكون
addComponentListener(new ComponentAdapter() {
// عند تغيير حجم المكون
مكون الفراغ العام (النهائي ComponentEvent e) {
thread.start();// ابدأ الموضوع
}
});
// تهيئة كائن مؤشر الترابط
الموضوع = موضوع جديد (هذا)؛
}
تشغيل الفراغ العام () {
الأصل = فارغ؛
عرض كثافة العمليات = 0؛
بينما (العرض <= 0 || الأصل == فارغ) {// احصل على عرض الحاوية الأصلية
إذا (الوالد == فارغ)
الأصل = getParent();
آخر
width =parent.getWidth();
}
// انقل هذا المكون من اليسار إلى اليمين
for (int i = 0; i < width &&parent != null; i += 8) {
setLocation(i, y);
يحاول {
Thread.sleep(sleepTime);//النوم لفترة من الوقت
} قبض على (InterruptedException e) {
printStackTrace();
}
}
إذا (الوالد! = فارغ) {
MainFrame.appScore(-score * 10); // التدمير الطبيعي سيخصم النقاط
}
تدمير()؛
}
/**
* طريقة إزالة هذا المكون من الحاوية
*/
تدمير الفراغ العام () {
إذا (الوالد == فارغ)
يعود؛
Parent.remove(this);
Parent.repaint();
Parent = null; // إنهاء حلقة الخيط من خلال هذا البيان
}
/**
* طرق إضافة النقاط
*/
التطبيق الفارغ الخاص () {
System.out.println("تم ضرب الخنزير البري");
MainFrame.appScore(10);
}
}
انسخ رمز الكود كما يلي:
لعبة الحزمة؛
import static java.lang.Math.random;
import java.awt.*;
import java.awt.event.*;
استيراد javax.swing.*;
الطبقة العامة MainFrame تمتد JFrame {
serialVersionUID النهائي الطويل الخاص الثابت = 1L؛
النتيجة الطويلة الثابتة الخاصة = 0؛
عدد صحيح خاص ثابت ammoNum = 5;// عدد الرصاصات
JLabel ثابت خاص ScoreLabel؛// النتيجة
خلفية لوحة الخلفية الخاصة؛
JLabel ammoLabel ثابت خاص ؛
لوحة معلومات JPanel ثابتة خاصة؛
/**
* طريقة البناء
*/
الإطار الرئيسي العام () {
ممتاز()؛
setResizable(false);// ضبط حجم النموذج
setTitle("لعبة الصيد");
infoPane = (JPanel) getGlassPane(); // احصل على اللوحة الزجاجية
JLabel label = new JLabel("تحميل الرموز النقطية...");// إنشاء مكون تسمية موجه
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setFont(new Font("楷体", Font.BOLD, 32));
label.setForeground(Color.RED);
infoPane.setLayout(new BorderLayout());
infoPane.add(label);// أضف مكون التسمية السريع إلى اللوحة الزجاجية
setAlwaysOnTop(true);// يبقى النموذج في المستوى الأعلى
setBounds(100, 100, 573, 411);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
خلفية لوحة = خلفية جديدة () ؛ / / إنشاء لوحة بخلفية
الخلفيةPanel.setImage(ImageIcon الجديد(getClass().getResource(
"background.jpg")).getImage());// قم بتعيين صورة الخلفية
getContentPane().add(backgroundPanel, BorderLayout.CENTER);
// أضف محول حدث الماوس
addMouseListener(new FrameMouseListener());
ScoreLabel = new JLabel(); // مكون التسمية الذي يعرض النتائج
ScoreLabel.setHorizontalAlignment(SwingConstants.CENTER);
ScoreLabel.setForeground(Color.ORANGE);
ScoreLabel.setText("النتيجة:");
ScoreLabel.setBounds(25, 15, 120, 18);
الخلفيةPanel.add(scoreLabel);
ammoLabel = new JLabel(); // عرض العدد التلقائي لمكونات التسمية
ammoLabel.setForeground(Color.ORANGE);
ammoLabel.setHorizontalAlignment(SwingConstants.RIGHT);
ammoLabel.setText("عدد الرصاصات:" + ammoNum);
ammoLabel.setBounds(422, 15, 93, 18);
خلفيةPanel.add(ammoLabel);
}
/**
* طريقة النقاط الإضافية
*/
التطبيق العام الفارغ الثابت المتزامن (int num) {
النتيجة += الأسطوانات؛
ScoreLabel.setText("النتيجة: " + النتيجة);
}
/**
* كيفية استهلاك الرصاص
*/
استخدام الفراغ الثابت المتزامن العام Ammo () {
متزامن (عدد الذخيرة) {
ammoNum--;// تقليل عدد الرصاصات
ammoLabel.setText("عدد الرصاصات:" + ammoNum);
إذا (ammoNum <= 0) {// تحديد ما إذا كانت الرصاصة أقل من 0
موضوع جديد (جديد قابل للتشغيل () {
تشغيل الفراغ العام () {
// عرض لوحة المعلومات السريعة
infoPane.setVisible(true);
يحاول {
// 1 ثانية لتحميل الرصاص
Thread.sleep(1000);
} قبض على (InterruptedException e) {
printStackTrace();
}
ammoNum = 5;// استعادة عدد الرصاصات
// تعديل نص تسمية كمية التعداد النقطي
ammoLabel.setText("عدد الرصاصات:" + ammoNum);
infoPane.setVisible(false);// إخفاء لوحة معلومات المطالبة
}
}).يبدأ()؛
}
}
}
/**
* تحديد ما إذا كانت الرصاصات كافية
*
*/
العامة المنطقية الثابتة المتزامنة ReadyAmmo() {
متزامن (عدد الذخيرة) {
إرجاع رقم الذخيرة > 0؛
}
}
public static void main(String args[]) {
EventQueue.invocLater(new Runnable() {
تشغيل الفراغ العام () {
يحاول {
إطار الإطار الرئيسي = إطار رئيسي جديد () ؛
frame.setVisible(true);
fram.start();
} قبض (الاستثناء ه) {
printStackTrace();
}
}
});
}
/**
* كيف تبدأ اللعبة
*/
بداية الفراغ العام () {
new PigThread().start();
new BirdThread().start();
}
/**
* مستمع حدث الماوس للنموذج
*
*/
الطبقة النهائية الخاصة FrameMouseListener تمتد MouseAdapter {
public void mousePressed(final MouseEvent e) {
المكون في = الخلفيةPanel.getComponentAt(e.getPoint());
إذا (على سبيل المثال من ScreenPanel) {// إذا قمت بالنقر فوق اللوحة، فسيتم خصم الرموز النقطية أيضًا
MainFrame.useAmmo(); // تستهلك الرصاص
}
/*
* إذا (في مثيل BirdLabel) {// إذا قمت بالنقر فوق BirdMainFrame.appScore(32);//
* نقاط المكافأة} إذا (في مثيل PigLabel) {// إذا تم النقر على الخنزير البري
* MainFrame.appScore(11);//نقاط إضافية}
*/
}
}
/**
* الموضوع الذي يولد أحرف خنزير
*
*/
فئة PigThread تمتد الموضوع {
@تجاوز
تشغيل الفراغ العام () {
بينما (صحيح) {
// أنشئ عنصر تحكم تسمية يمثل الخنزير البري
PigLabel pig = new PigLabel();
pig.setSize(120, 80);// قم بتعيين الحجم الأولي لعنصر التحكم
الخلفيةPanel.add(pig);//أضف عناصر تحكم إلى لوحة الخلفية
يحاول {
// ينام الخيط بشكل عشوائي لفترة من الوقت
نوم((طويل) (عشوائي() * 3000) + 500);
} قبض على (InterruptedException e) {
printStackTrace();
}
}
}
}
/**
* الخيط الذي يولد شخصية الطائر
*
*/
فئة BirdThread تمتد الموضوع {
@تجاوز
تشغيل الفراغ العام () {
بينما (صحيح) {
// أنشئ عنصر تحكم تسمية يمثل الطائر
BirdLabel Bird = new BirdLabel();
Bird.setSize(50, 50);// قم بتعيين الحجم الأولي لعنصر التحكم
الخلفيةPanel.add(bird);// أضف عناصر تحكم إلى لوحة الخلفية
يحاول {
// ينام الخيط بشكل عشوائي لفترة من الوقت
نوم((طويل) (Math.random() * 3000) + 500);
} قبض على (InterruptedException e) {
printStackTrace();
}
}
}
}
}
آمل أن تكون هذه المقالة مفيدة لبرمجة جافا للجميع.