U3F1ZWV6ZTE4Njk5NTM2MjU3MDQwX0ZyZWUxMTc5NzI4NDQzNTgwOQ==

Java Swing :طريقة إنشاء لعبة Tic Tac Toe


السلام عليكم

 هدا المشروع مقدملمن يريد تعلم الجافا بكامل 

مثال التالي يعلمك طريقة إنشاء لعبة 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  :  رابط تحميل الكود  


نبدة بسيط علي الكود هد مقطع من الكود وليس الكود كله

  1. package tic_tac_toe;
  2.  
  3. import java.awt.CardLayout;
  4. import java.awt.Color;
  5. import java.awt.Container;
  6. import java.awt.Font;
  7. import java.awt.GridLayout;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.awt.event.ItemEvent;
  11. import java.awt.event.ItemListener;
  12. import java.awt.event.MouseEvent;
  13. import java.awt.event.MouseListener;
  14. import java.util.Random;
  15. import javax.swing.ImageIcon;
  16. import javax.swing.JButton;
  17. import javax.swing.JComboBox;
  18. import javax.swing.JFrame;
  19. import javax.swing.JLabel;
  20. import javax.swing.JOptionPane;
  21. import javax.swing.JPanel;
  22. import javax.swing.JTextField;
  23. import javax.swing.SwingUtilities;
  24.  
  25. // و بالتالي أصبح إنشاء كائن منه يمثل إنشاء نافذة JFrame يرث من الكلاس TicTacToe هنا جعلنا الكلاس
  26. public class TicTacToe extends JFrame {
  27.  
  28.     // و الأشياء التي سنضعها فيها startPage هنا قمنا بتعريف الـ
  29.     JPanel startPage;
  30.     JButton startPage_singlePlayer;
  31.     JButton startPage_multiPlayer;
  32.     JButton startPage_settings;
  33.     JButton startPage_about;
  34.     JButton startPage_exit;
  35.  
  36.     // و الأشياء التي سنضعها فيها singlePlayerPage هنا قمنا بتعريف الـ
  37.     JPanel singlePlayerPage;
  38.     JLabel singlePlayerPage_label;
  39.     JTextField singlePlayerPage_playerName;
  40.     JButton singlePlayerPage_start;
  41.     JButton singlePlayerPage_back;
  42.  
  43.     // و الأشياء التي سنضعها فيها multiPlayerPage هنا قمنا بتعريف الـ
  44.     JPanel multiPlayerPage;
  45.     JLabel multiPlayerPage_firstLabel;
  46.     JLabel multiPlayerPage_secondLabel;
  47.     JTextField multiPlayerPage_firstPlayerName;
  48.     JTextField multiPlayerPage_secondPlayerName;
  49.     JButton multiPlayerPage_start;
  50.     JButton multiPlayerPage_back;
  51.  
  52.     // و الأشياء التي سنضعها فيها settingsPage هنا قمنا بتعريف الـ
  53.     JPanel settingsPage;
  54.     JLabel settingsPage_selectedBoardLabel;
  55.     JComboBox settingsPage_selectedBoardValue;
  56.     JLabel settingsPage_selectedFontSizeLabel;
  57.     JComboBox settingsPage_selectedFontSizeValue;
  58.     JButton settingsPage_reset;
  59.     JButton settingsPage_back;
  60.  
  61.     // و الأشياء التي سنضعها فيها gamePage هنا قمنا بتعريف الـ
  62.     JPanel gamePage;
  63.     JPanel gamePage_boardPanel;
  64.     JLabel[] gamePage_boardLabels;
  65.     JLabel gamePage_boardBackground;
  66.     JLabel gamePage_firstPlayerName;
  67.     JLabel gamePage_secondPlayerName;
  68.     JLabel gamePage_firstPlayerScore;
  69.     JLabel gamePage_secondPlayerScore;
  70.     JLabel gamePage_currentPlayerIcon;
  71.     JButton gamePage_back;
  72.     JButton gamePage_restart;
  73.  
  74.     // هنا قمنا بتعريف نوع الخط و حجم الخط و الألوان التي سنستخدمها في اللعبة
  75.     Font defaultFont = new Font("Arial", Font.BOLD, 16);
  76.     Color defaultButtonBackgroundColor = Color.lightGray;
  77.     Color defaultButtonTextColor = Color.black;
  78.     Color xForeground = Color.blue;
  79.     Color oForeground = Color.red;
  80.     Color winnerSquaresBackground = Color.yellow;
  81.  
  82.     // سنستخدم هذا المتغير لتحديد ما إذا كان شخص واحد سيلعب اللعبة أو إثنين
  83.     boolean challengeComputer = false;
  84.  
  85.     // سنستخدم هذا المتغير لتحديد دور من في اللعب
  86.     boolean isFirstPlayerTurn = true;
  87.  
  88.     // سنستخدم هذا المتغير لحساب عدد النقرات و بالتالي لتحديد ما إذا كان سيتم إيقاف اللعبة أم لا
  89.     int XOCounter = 0;
  90.  
  91.     // سنستخدم هذا المتغير أيضاً لتحديد ما إذا كان سيتم إيقاف اللعبة بسبب فوز أحد اللاعبين
  92.     boolean isGameEnds = false;
  93.  
  94.     // randomNumber لتوليد أرقام عشوائية عند اللعب ضد الكمبيوتر. و سنخزن الرقم في المتغير random سنستخدم الكائن
  95.     Random random = new Random();
  96.     int randomNumber;
  97.  
  98.  
  99.     // سنستخدم هذه الدالة كلما أردنا تغيير حجم خط جميع الأزرار و النصوص الموجودة في اللعبة دفعة واحدة
  100.     private void setNewFont(Font font) {
  101.  
  102.         startPage_singlePlayer.setFont(font);
  103.         startPage_multiPlayer.setFont(font);
  104.         startPage_settings.setFont(font);
  105.         startPage_about.setFont(font);
  106.         startPage_exit.setFont(font);
  107.         singlePlayerPage_label.setFont(font);
  108.         singlePlayerPage_playerName.setFont(font);
  109.         singlePlayerPage_start.setFont(font);
  110.         singlePlayerPage_back.setFont(font);
  111.         multiPlayerPage_firstLabel.setFont(font);
  112.         multiPlayerPage_secondLabel.setFont(font);
  113.         multiPlayerPage_firstPlayerName.setFont(font);
  114.         multiPlayerPage_secondPlayerName.setFont(font);
  115.         multiPlayerPage_start.setFont(font);
  116.         multiPlayerPage_back.setFont(font);
  117.         settingsPage_selectedBoardLabel.setFont(font);
  118.         settingsPage_selectedBoardValue.setFont(font);
  119.         settingsPage_selectedFontSizeLabel.setFont(font);
  120.         settingsPage_selectedFontSizeValue.setFont(font);
  121.         settingsPage_reset.setFont(font);
  122.         settingsPage_back.setFont(font);
  123.         gamePage_boardPanel.setFont(font);
  124.         gamePage_firstPlayerName.setFont(font);
  125.         gamePage_secondPlayerName.setFont(font);
  126.         gamePage_firstPlayerScore.setFont(font);
  127.         gamePage_secondPlayerScore.setFont(font);
  128.         gamePage_back.setFont(font);
  129.         gamePage_restart.setFont(font);
  130.  
  131.     }
  132.  // سنستخدم هذه الدالة كلما أردنا تغيير ألوان أزرار التطبيق
  133.     private void setThemeColors(Color textColor, Color backgroundColor) {
  134.  
  135.         startPage_singlePlayer.setForeground(textColor);
  136.         startPage_multiPlayer.setForeground(textColor);
  137.         startPage_settings.setForeground(textColor);
  138.         startPage_about.setForeground(textColor);
  139.         startPage_exit.setForeground(textColor);
  140.         startPage_singlePlayer.setBackground(backgroundColor);
  141.         startPage_multiPlayer.setBackground(backgroundColor);
  142.         startPage_settings.setBackground(backgroundColor);
  143.         startPage_about.setBackground(backgroundColor);
  144.         startPage_exit.setBackground(backgroundColor);
  145.  
  146.         singlePlayerPage_label.setForeground(textColor);
  147.         singlePlayerPage_playerName.setForeground(textColor);
  148.         singlePlayerPage_start.setForeground(textColor);
  149.         singlePlayerPage_back.setForeground(textColor);
  150.         singlePlayerPage_start.setBackground(backgroundColor);
  151.         singlePlayerPage_back.setBackground(backgroundColor);
  152.  
  153.         multiPlayerPage_firstLabel.setForeground(textColor);
  154.         multiPlayerPage_firstPlayerName.setForeground(textColor);
  155.         multiPlayerPage_secondLabel.setForeground(textColor);
  156.         multiPlayerPage_secondPlayerName.setForeground(textColor);
  157.         multiPlayerPage_start.setForeground(textColor);
  158.         multiPlayerPage_back.setForeground(textColor);
  159.         multiPlayerPage_start.setBackground(backgroundColor);
  160.         multiPlayerPage_back.setBackground(backgroundColor);
  161.  
  162.         gamePage_firstPlayerName.setForeground(textColor);
  163.         gamePage_secondPlayerName.setForeground(textColor);
  164.         gamePage_firstPlayerScore.setForeground(textColor);
  165.         gamePage_secondPlayerScore.setForeground(textColor);
  166.         gamePage_back.setForeground(textColor);
  167.         gamePage_restart.setForeground(textColor);
  168.         gamePage_restart.setBackground(backgroundColor);
  169.         gamePage_back.setBackground(backgroundColor);
  170.  
  171.         settingsPage_selectedBoardLabel.setForeground(textColor);
  172.         settingsPage_selectedBoardValue.setForeground(textColor);
  173.         settingsPage_selectedFontSizeLabel.setForeground(textColor);
  174.         settingsPage_selectedFontSizeValue.setForeground(textColor);
  175.         settingsPage_reset.setForeground(textColor);
  176.         settingsPage_back.setForeground(textColor);
  177.         settingsPage_reset.setBackground(backgroundColor);
  178.         settingsPage_back.setBackground(backgroundColor);
  179.  
  180.     }
  181. / startPage سنستخدم هذه الدالة لخلق محتوى الصفحة
  182.     private void createStartPage() {
  183.  
  184.         // هنا أنشأنا الحاوية الأساسية و الأشياء التي سنضعها فيها
  185.         startPage = new JPanel(null);
  186.         startPage_singlePlayer = new JButton("Single Player");
  187.         startPage_multiPlayer = new JButton("Multi Player");
  188.         startPage_settings = new JButton("Settings");
  189.         startPage_about = new JButton("About");
  190.         startPage_exit = new JButton("Exit");
  191.  
  192.         // هنا وضعنا كل شيء بداخل الحاوية
  193.         startPage.add(startPage_singlePlayer);
  194.         startPage.add(startPage_multiPlayer);
  195.         startPage.add(startPage_settings);
  196.         startPage.add(startPage_about);
  197.         startPage.add(startPage_exit);
  198.  
  199.         // هنا قمنا بتحديد حجم و موقع كل شيء أضفناه في الحاوية
  200.         startPage_singlePlayer.setBounds(80, 110, 240, 40);
  201.         startPage_multiPlayer.setBounds(80, 170, 240, 40);
  202.         startPage_settings.setBounds(80, 230, 240, 40);
  203.         startPage_about.setBounds(80, 290, 240, 40);
  204.         startPage_exit.setBounds(80, 350, 240, 40);
  205.  
  206.     }
  207.  
  208.  
  209.     // singlePlayerPage سنستخدم هذه الدالة لخلق محتوى الصفحة
  210.     private void createSinglePlayerPage() {
  211.  
  212.         // هنا أنشأنا الحاوية الأساسية و الأشياء التي سنضعها فيها
  213.         singlePlayerPage = new JPanel(null);
  214.         singlePlayerPage_label = new JLabel("Player Name");
  215.         singlePlayerPage_playerName = new JTextField("player");
  216.         singlePlayerPage_start = new JButton("Start");
  217.         singlePlayerPage_back = new JButton("Back");
  218.  
  219.         // هنا وضعنا كل شيء بداخل الحاوية
  220.         singlePlayerPage.add(singlePlayerPage_label);
  221.         singlePlayerPage.add(singlePlayerPage_playerName);
  222.         singlePlayerPage.add(singlePlayerPage_start);
  223.         singlePlayerPage.add(singlePlayerPage_back);
  224.  
  225.         // هنا قمنا بتحديد حجم و موقع كل شيء أضفناه في الحاوية
  226.         singlePlayerPage_label.setBounds(80, 170, 100, 30);
  227.         singlePlayerPage_playerName.setBounds(190, 170, 130, 30);
  228.         singlePlayerPage_start.setBounds(80, 220, 240, 40);
  229.         singlePlayerPage_back.setBounds(80, 280, 240, 40);
  230.  
  231.     }
  232.  
  233.  
  234.     // multiPlayerPage سنستخدم هذه الدالة لخلق محتوى الصفحة
  235.     private void createMultiPlayerPage() {
  236.  
  237.         // هنا أنشأنا الحاوية الأساسية و الأشياء التي سنضعها فيها
  238.         multiPlayerPage = new JPanel(null);
  239.         multiPlayerPage_firstLabel = new JLabel("Player X");
  240.         multiPlayerPage_secondLabel = new JLabel("Player O");
  241.         multiPlayerPage_firstPlayerName = new JTextField("player 1", 8);
  242.         multiPlayerPage_secondPlayerName = new JTextField("player 2", 8);
  243.         multiPlayerPage_start = new JButton("Start");
  244.         multiPlayerPage_back = new JButton("Back");
  245.  
  246.         // هنا وضعنا كل شيء بداخل الحاوية
  247.         multiPlayerPage.add(multiPlayerPage_firstLabel);
  248.         multiPlayerPage.add(multiPlayerPage_secondLabel);
  249.         multiPlayerPage.add(multiPlayerPage_firstPlayerName);
  250.         multiPlayerPage.add(multiPlayerPage_secondPlayerName);
  251.         multiPlayerPage.add(multiPlayerPage_start);
  252.         multiPlayerPage.add(multiPlayerPage_back);
  253.  
  254.         // هنا قمنا بتحديد حجم و موقع كل شيء أضفناه في الحاوية
  255.         multiPlayerPage_firstLabel.setBounds(80, 130, 70, 30);
  256.         multiPlayerPage_firstPlayerName.setBounds(160, 130, 160, 30);
  257.         multiPlayerPage_secondLabel.setBounds(80, 190, 70, 30);
  258.         multiPlayerPage_secondPlayerName.setBounds(160, 190, 160, 30);
  259.         multiPlayerPage_start.setBounds(80, 250, 240, 40);
  260.         multiPlayerPage_back.setBounds(80, 310, 240, 40);
  261.  
  262.     }
  263.  



قم بحفض بنسخ الكود ثم  ضعهة داخل  اي برنامج لكتابة اكواد الجافا ثم قم بحفض  الكلاس باسم     
TicTacToe 




***********************


***********************

تعليقات
تعليق واحد
إرسال تعليق

إرسال تعليق

الاسمبريد إلكترونيرسالة