السلام عليكم
هدا المشروع مقدملمن يريد تعلم الجافا بكامل
مثال التالي يعلمك طريقة إنشاء لعبة ( Tic Tac Toe )6 إحترافية باستخدام إطار الـ
Swing.
طريقة إنشاء لعبة
( Tic Tac Toe ).
يمكن لعب هذه اللعبة مع صديق أو ضد الكمبيوتر نفسه, و يمكن تعديل تصميمها بكل
سهولة من الضبط.
طريقة بنائها من الصفر مع كود كاملا
مميزات اللعبة
- يمكن لعب هذه اللعبة مع صديق أو ضد الكمبيوتر نفسه.
- يمكن تعديل تصميمها بكل سهولة من داخل اللعبة.
ملاحظة: عليك إنشاء مجلد لوضع الصور فيه كما في الصورة التالية.
صورة توضح أننا أضفنا مجلد إسمه
images
و وضعنا فيه أربع صور.
http://www.mediafire.com/folder/4nuwpme6uw81b/images : رابط تحميل الصور
http://www.mediafire.com/file/3u54uxb8p43lkyb/TicTacToe.java/file : رابط تحميل الكود
نبدة بسيط علي الكود هد مقطع من الكود وليس الكود كله
- package tic_tac_toe;
- import java.awt.CardLayout;
- import java.awt.Color;
- import java.awt.Container;
- import java.awt.Font;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.ItemEvent;
- import java.awt.event.ItemListener;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.util.Random;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JComboBox;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- import javax.swing.SwingUtilities;
- // و بالتالي أصبح إنشاء كائن منه يمثل إنشاء نافذة JFrame يرث من الكلاس TicTacToe هنا جعلنا الكلاس
- public class TicTacToe extends JFrame {
- // و الأشياء التي سنضعها فيها startPage هنا قمنا بتعريف الـ
- JPanel startPage;
- JButton startPage_singlePlayer;
- JButton startPage_multiPlayer;
- JButton startPage_settings;
- JButton startPage_about;
- JButton startPage_exit;
- // و الأشياء التي سنضعها فيها singlePlayerPage هنا قمنا بتعريف الـ
- JPanel singlePlayerPage;
- JLabel singlePlayerPage_label;
- JTextField singlePlayerPage_playerName;
- JButton singlePlayerPage_start;
- JButton singlePlayerPage_back;
- // و الأشياء التي سنضعها فيها multiPlayerPage هنا قمنا بتعريف الـ
- JPanel multiPlayerPage;
- JLabel multiPlayerPage_firstLabel;
- JLabel multiPlayerPage_secondLabel;
- JTextField multiPlayerPage_firstPlayerName;
- JTextField multiPlayerPage_secondPlayerName;
- JButton multiPlayerPage_start;
- JButton multiPlayerPage_back;
- // و الأشياء التي سنضعها فيها settingsPage هنا قمنا بتعريف الـ
- JPanel settingsPage;
- JLabel settingsPage_selectedBoardLabel;
- JComboBox settingsPage_selectedBoardValue;
- JLabel settingsPage_selectedFontSizeLabel;
- JComboBox settingsPage_selectedFontSizeValue;
- JButton settingsPage_reset;
- JButton settingsPage_back;
- // و الأشياء التي سنضعها فيها gamePage هنا قمنا بتعريف الـ
- JPanel gamePage;
- JPanel gamePage_boardPanel;
- JLabel[] gamePage_boardLabels;
- JLabel gamePage_boardBackground;
- JLabel gamePage_firstPlayerName;
- JLabel gamePage_secondPlayerName;
- JLabel gamePage_firstPlayerScore;
- JLabel gamePage_secondPlayerScore;
- JLabel gamePage_currentPlayerIcon;
- JButton gamePage_back;
- JButton gamePage_restart;
- // هنا قمنا بتعريف نوع الخط و حجم الخط و الألوان التي سنستخدمها في اللعبة
- Font defaultFont = new Font("Arial", Font.BOLD, 16);
- Color defaultButtonBackgroundColor = Color.lightGray;
- Color defaultButtonTextColor = Color.black;
- Color xForeground = Color.blue;
- Color oForeground = Color.red;
- Color winnerSquaresBackground = Color.yellow;
- // سنستخدم هذا المتغير لتحديد ما إذا كان شخص واحد سيلعب اللعبة أو إثنين
- boolean challengeComputer = false;
- // سنستخدم هذا المتغير لتحديد دور من في اللعب
- boolean isFirstPlayerTurn = true;
- // سنستخدم هذا المتغير لحساب عدد النقرات و بالتالي لتحديد ما إذا كان سيتم إيقاف اللعبة أم لا
- int XOCounter = 0;
- // سنستخدم هذا المتغير أيضاً لتحديد ما إذا كان سيتم إيقاف اللعبة بسبب فوز أحد اللاعبين
- boolean isGameEnds = false;
- // randomNumber لتوليد أرقام عشوائية عند اللعب ضد الكمبيوتر. و سنخزن الرقم في المتغير random سنستخدم الكائن
- Random random = new Random();
- int randomNumber;
- // سنستخدم هذه الدالة كلما أردنا تغيير حجم خط جميع الأزرار و النصوص الموجودة في اللعبة دفعة واحدة
- private void setNewFont(Font font) {
- startPage_singlePlayer.setFont(font);
- startPage_multiPlayer.setFont(font);
- startPage_settings.setFont(font);
- startPage_about.setFont(font);
- startPage_exit.setFont(font);
- singlePlayerPage_label.setFont(font);
- singlePlayerPage_playerName.setFont(font);
- singlePlayerPage_start.setFont(font);
- singlePlayerPage_back.setFont(font);
- multiPlayerPage_firstLabel.setFont(font);
- multiPlayerPage_secondLabel.setFont(font);
- multiPlayerPage_firstPlayerName.setFont(font);
- multiPlayerPage_secondPlayerName.setFont(font);
- multiPlayerPage_start.setFont(font);
- multiPlayerPage_back.setFont(font);
- settingsPage_selectedBoardLabel.setFont(font);
- settingsPage_selectedBoardValue.setFont(font);
- settingsPage_selectedFontSizeLabel.setFont(font);
- settingsPage_selectedFontSizeValue.setFont(font);
- settingsPage_reset.setFont(font);
- settingsPage_back.setFont(font);
- gamePage_boardPanel.setFont(font);
- gamePage_firstPlayerName.setFont(font);
- gamePage_secondPlayerName.setFont(font);
- gamePage_firstPlayerScore.setFont(font);
- gamePage_secondPlayerScore.setFont(font);
- gamePage_back.setFont(font);
- gamePage_restart.setFont(font);
- }
- // سنستخدم هذه الدالة كلما أردنا تغيير ألوان أزرار التطبيق
- private void setThemeColors(Color textColor, Color backgroundColor) {
- startPage_singlePlayer.setForeground(textColor);
- startPage_multiPlayer.setForeground(textColor);
- startPage_settings.setForeground(textColor);
- startPage_about.setForeground(textColor);
- startPage_exit.setForeground(textColor);
- startPage_singlePlayer.setBackground(backgroundColor);
- startPage_multiPlayer.setBackground(backgroundColor);
- startPage_settings.setBackground(backgroundColor);
- startPage_about.setBackground(backgroundColor);
- startPage_exit.setBackground(backgroundColor);
- singlePlayerPage_label.setForeground(textColor);
- singlePlayerPage_playerName.setForeground(textColor);
- singlePlayerPage_start.setForeground(textColor);
- singlePlayerPage_back.setForeground(textColor);
- singlePlayerPage_start.setBackground(backgroundColor);
- singlePlayerPage_back.setBackground(backgroundColor);
- multiPlayerPage_firstLabel.setForeground(textColor);
- multiPlayerPage_firstPlayerName.setForeground(textColor);
- multiPlayerPage_secondLabel.setForeground(textColor);
- multiPlayerPage_secondPlayerName.setForeground(textColor);
- multiPlayerPage_start.setForeground(textColor);
- multiPlayerPage_back.setForeground(textColor);
- multiPlayerPage_start.setBackground(backgroundColor);
- multiPlayerPage_back.setBackground(backgroundColor);
- gamePage_firstPlayerName.setForeground(textColor);
- gamePage_secondPlayerName.setForeground(textColor);
- gamePage_firstPlayerScore.setForeground(textColor);
- gamePage_secondPlayerScore.setForeground(textColor);
- gamePage_back.setForeground(textColor);
- gamePage_restart.setForeground(textColor);
- gamePage_restart.setBackground(backgroundColor);
- gamePage_back.setBackground(backgroundColor);
- settingsPage_selectedBoardLabel.setForeground(textColor);
- settingsPage_selectedBoardValue.setForeground(textColor);
- settingsPage_selectedFontSizeLabel.setForeground(textColor);
- settingsPage_selectedFontSizeValue.setForeground(textColor);
- settingsPage_reset.setForeground(textColor);
- settingsPage_back.setForeground(textColor);
- settingsPage_reset.setBackground(backgroundColor);
- settingsPage_back.setBackground(backgroundColor);
- }
- / startPage سنستخدم هذه الدالة لخلق محتوى الصفحة
- private void createStartPage() {
- // هنا أنشأنا الحاوية الأساسية و الأشياء التي سنضعها فيها
- startPage = new JPanel(null);
- startPage_singlePlayer = new JButton("Single Player");
- startPage_multiPlayer = new JButton("Multi Player");
- startPage_settings = new JButton("Settings");
- startPage_about = new JButton("About");
- startPage_exit = new JButton("Exit");
- // هنا وضعنا كل شيء بداخل الحاوية
- startPage.add(startPage_singlePlayer);
- startPage.add(startPage_multiPlayer);
- startPage.add(startPage_settings);
- startPage.add(startPage_about);
- startPage.add(startPage_exit);
- // هنا قمنا بتحديد حجم و موقع كل شيء أضفناه في الحاوية
- startPage_singlePlayer.setBounds(80, 110, 240, 40);
- startPage_multiPlayer.setBounds(80, 170, 240, 40);
- startPage_settings.setBounds(80, 230, 240, 40);
- startPage_about.setBounds(80, 290, 240, 40);
- startPage_exit.setBounds(80, 350, 240, 40);
- }
- // singlePlayerPage سنستخدم هذه الدالة لخلق محتوى الصفحة
- private void createSinglePlayerPage() {
- // هنا أنشأنا الحاوية الأساسية و الأشياء التي سنضعها فيها
- singlePlayerPage = new JPanel(null);
- singlePlayerPage_label = new JLabel("Player Name");
- singlePlayerPage_playerName = new JTextField("player");
- singlePlayerPage_start = new JButton("Start");
- singlePlayerPage_back = new JButton("Back");
- // هنا وضعنا كل شيء بداخل الحاوية
- singlePlayerPage.add(singlePlayerPage_label);
- singlePlayerPage.add(singlePlayerPage_playerName);
- singlePlayerPage.add(singlePlayerPage_start);
- singlePlayerPage.add(singlePlayerPage_back);
- // هنا قمنا بتحديد حجم و موقع كل شيء أضفناه في الحاوية
- singlePlayerPage_label.setBounds(80, 170, 100, 30);
- singlePlayerPage_playerName.setBounds(190, 170, 130, 30);
- singlePlayerPage_start.setBounds(80, 220, 240, 40);
- singlePlayerPage_back.setBounds(80, 280, 240, 40);
- }
- // multiPlayerPage سنستخدم هذه الدالة لخلق محتوى الصفحة
- private void createMultiPlayerPage() {
- // هنا أنشأنا الحاوية الأساسية و الأشياء التي سنضعها فيها
- multiPlayerPage = new JPanel(null);
- multiPlayerPage_firstLabel = new JLabel("Player X");
- multiPlayerPage_secondLabel = new JLabel("Player O");
- multiPlayerPage_firstPlayerName = new JTextField("player 1", 8);
- multiPlayerPage_secondPlayerName = new JTextField("player 2", 8);
- multiPlayerPage_start = new JButton("Start");
- multiPlayerPage_back = new JButton("Back");
- // هنا وضعنا كل شيء بداخل الحاوية
- multiPlayerPage.add(multiPlayerPage_firstLabel);
- multiPlayerPage.add(multiPlayerPage_secondLabel);
- multiPlayerPage.add(multiPlayerPage_firstPlayerName);
- multiPlayerPage.add(multiPlayerPage_secondPlayerName);
- multiPlayerPage.add(multiPlayerPage_start);
- multiPlayerPage.add(multiPlayerPage_back);
- // هنا قمنا بتحديد حجم و موقع كل شيء أضفناه في الحاوية
- multiPlayerPage_firstLabel.setBounds(80, 130, 70, 30);
- multiPlayerPage_firstPlayerName.setBounds(160, 130, 160, 30);
- multiPlayerPage_secondLabel.setBounds(80, 190, 70, 30);
- multiPlayerPage_secondPlayerName.setBounds(160, 190, 160, 30);
- multiPlayerPage_start.setBounds(80, 250, 240, 40);
- multiPlayerPage_back.setBounds(80, 310, 240, 40);
- }
قم بحفض بنسخ الكود ثم ضعهة داخل اي برنامج لكتابة اكواد الجافا ثم قم بحفض الكلاس باسم
TicTacToe
***********************
***********************
شكرا
ردحذف