المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: لعبة الأربعة تربح
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى مبرمجي لغة جافا JAVA
mr.beshoy
إخواتى الأعزاء المبرمجين الكرام
فى محاولة منى لتصميم لعبة كونيكت فور ( و هى ان تكون اربع دوائر سواء افقى أو رأسى أو بالقطر) و لكن هناك مشكلة واجهتنى فى هذا الكود
و حاولت أن احلها و لكن ما عرفت طريقة الحل
فأرجو من الأخوة الأفاضل تجريب الكود سوف يرون الخطأ واضحاً
( أنا مستخدم النتبينز فجربوه على النت بينز )


كود


package Game;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Game extends JFrame {

    private JPanel mainPlayer_panel;
    private JPanel playerone_panel;
    public static JButton play_one;
    private JPanel scoreone_panel;
    private JLabel score_one;
    private static JTextField field_one;
    private JPanel playertwo_panel;
    public static JButton play_two;
    private JPanel scoretwo_panel;
    private JLabel score_two;
    private static JTextField field_two;

    public Game() {

        mainPlayer_panel = new JPanel();
        mainPlayer_panel.setPreferredSize(new Dimension(200, 200));
        mainPlayer_panel.setBorder(BorderFactory.createTitledBorder("player"));
        mainPlayer_panel.setBackground(Color.pink);
        mainPlayer_panel.setBounds(900, 100, 300, 500);

        playerone_panel = new JPanel();
        playerone_panel.setPreferredSize(new Dimension(200, 200));
        playerone_panel.setBorder(BorderFactory.createTitledBorder("player one"));
        play_one = new JButton("playe");
        play_one.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                CreateImage.play_oneActionListener();
                repaint();
            }
        });

        scoreone_panel = new JPanel(new FlowLayout());
        score_one = new JLabel("score");
        field_one = new JTextField(10);
        scoreone_panel.add(score_one);
        scoreone_panel.add(field_one);
        playerone_panel.add(play_one);
        playerone_panel.add(scoreone_panel);


        playertwo_panel = new JPanel();
        playertwo_panel.setPreferredSize(new Dimension(200, 200));
        playertwo_panel.setBorder(BorderFactory.createTitledBorder("player one"));
        play_two = new JButton("playe");
        play_two.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                CreateImage.play_twoActionListener();
                repaint();
            }
        });
        scoretwo_panel = new JPanel(new FlowLayout());
        score_two = new JLabel("score");
        field_two = new JTextField(10);
        scoretwo_panel.add(score_two);
        scoretwo_panel.add(field_two);
        playertwo_panel.add(play_two);
        playertwo_panel.add(scoretwo_panel);

        mainPlayer_panel.add(playerone_panel);
        mainPlayer_panel.add(playertwo_panel);
        getContentPane().add(mainPlayer_panel);
        getContentPane().add(new CreateImage());
    }

    public static void main(String[] args) {
        
        JFrame frame = new Game();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setSize(1000, 800);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}


package Game;

كود


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CreateImage extends JPanel {

    private BufferedImage image;
    private Graphics g;
    private ImageIcon icon;
    private JLabel image_label;
    public static int squaresize = 80,  line_x = 40,  line_y = 120;
    public static int oval1_x = line_x + (3 * squaresize),  oval1_y = 120;
    public static int oval2_x = line_x + (3 * squaresize),  oval2_y = 120;
    public static boolean ball1,  ball2;

    public CreateImage() {
        image = new BufferedImage(700, 1000, BufferedImage.TYPE_INT_RGB);
        g = image.getGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, image.getWidth(), image.getHeight());
        MymouseAdabter mouse = new MymouseAdabter();
        addMouseListener(mouse);
        addMouseMotionListener(mouse);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g.drawImage(image, 0, 0, null);
        line_x = 40;
        line_y = 120;
        for (int row = 1; row <= 7; ++row) {
            BasicStroke line = new BasicStroke(5);
            g2.setStroke(line);
            g2.setColor(Color.BLUE);
            g2.draw(new Line2D.Double(line_x, line_y, line_x + (7 * squaresize), line_y));
            line_y += squaresize;
        }
        line_x = 40;
        line_y = 120;
        for (int col = 0; col <= 7; col++) {
            BasicStroke line = new BasicStroke(5);
            g2.setStroke(line);
            g2.setColor(Color.BLUE);
            g2.draw(new Line2D.Double(line_x, line_y, line_x, line_y + (6 * squaresize)));
            line_x += squaresize;
        }
        if (ball1) {
            g.setColor(Color.BLACK);
            g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
        }
        if (ball2) {
            g.setColor(Color.BLUE);
            g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
        }

    }

    public static void play_oneActionListener() {
        ball1 = true;
        ball2 = false;
    }

    public static void play_twoActionListener() {
        ball2 = true;
        ball1 = false;
    }

    private class MymouseAdabter extends MouseAdapter {

        @Override
        public void mouseMoved(MouseEvent e) {
            if (ball1) {

                oval1_x = e.getX();
                if (e.getX() > line_x + (7 * squaresize)) {
                    oval1_x = line_x + (7 * squaresize);
                } else if (e.getX() >= line_x + (5 * squaresize)) {
                    oval1_x = line_x + (5 * squaresize);
                } else if (e.getX() >= line_x + (4 * squaresize)) {
                    oval1_x = line_x + (4 * squaresize);
                }
                 else if (e.getX() >=line_x + (3 * squaresize)) {
                    oval1_x = line_x + (3 * squaresize);
                } else if (e.getX() >= line_x + (2 * squaresize)) {
                    oval1_x = line_x + (2 * squaresize);
                } else if (e.getX() >= line_x + (1 * squaresize)) {
                    oval1_x = line_x + (1 * squaresize);
                } else if (e.getX() >= line_x + (0 * squaresize)) {
                    oval1_x = line_x + (0 * squaresize);
                }
                repaint();
            }
            if (ball2) {
                oval2_x = e.getX();
                if (oval2_x >= line_x + (7 * squaresize)) {
                    oval2_x = line_x + (7 * squaresize);
                    repaint();
                }
            }
        //repaint();
        }
    }
}


المشكلة هى انى لا استطيع التحكم فى مسار الكرة عندما أضغط على زرار اللاعب الاول فمن المفروض انها تتحرك على مسار الشبكة فقط و لكنها تخرج الى خارجها فا أتمنى منك المساعدة
و الجزئية المسئولة عن التحكم فى حركة الكرة على مسار الشبكة هى هذه

private class MymouseAdabter extends MouseAdapter {

@Override
public void mouseMoved(MouseEvent e) {
if (ball1) {

oval1_x = e.getX();
if (e.getX() > line_x + (7 * squaresize)) {
oval1_x = line_x + (7 * squaresize);
} else if (e.getX() >= line_x + (5 * squaresize)) {
oval1_x = line_x + (5 * squaresize);
} else if (e.getX() >= line_x + (4 * squaresize)) {
oval1_x = line_x + (4 * squaresize);
}
else if (e.getX() >=line_x + (3 * squaresize)) {
oval1_x = line_x + (3 * squaresize);
} else if (e.getX() >= line_x + (2 * squaresize)) {
oval1_x = line_x + (2 * squaresize);
} else if (e.getX() >= line_x + (1 * squaresize)) {
oval1_x = line_x + (1 * squaresize);
} else if (e.getX() >= line_x + (0 * squaresize)) {
oval1_x = line_x + (0 * squaresize);
}
repaint();
}
if (ball2) {
oval2_x = e.getX();
if (oval2_x >= line_x + (7 * squaresize)) {
oval2_x = line_x + (7 * squaresize);
repaint();
}


mr.beshoy
يا جماعة محدش ناوى يرد على !!!!!!
علاء الصالحي
أخي ساعدنا قليلاً
أول شيء ضع لنا الشيفرة كمرفق
ثاني شيء أكثر من الكلام عن المشكلة
مثلاُ في أي سطر
ماذا تلاحظ أي شيء قد يسهل علينا مساعدتك

تحياتي
mr.beshoy
شوف حضرتك
هو الموضوع انك لما بتضغط على زرار اللاعب الاول الكرة بتظهر و تتحرك على مدى الشاشة كلها و بتخفى البانل بتاعة اللاعب و المفروض تتحرك على مدار الشبكة فقط
و نفس القصة مع اللاعب التانى
فياريت حد يساعدنى بجد
و حضرتك لو عملت run للكود هتفهم كلامى
اكتر

و الجزء المسئول عن حركة الكرة اهو
كود
private class MymouseAdabter extends MouseAdapter {

        @Override
        public void mouseMoved(MouseEvent e) {
            if (ball1) {

                oval1_x = e.getX();
                if (e.getX() > line_x + (7 * squaresize)) {
                    oval1_x = line_x + (7 * squaresize);
                } else if (e.getX() >= line_x + (5 * squaresize)) {
                    oval1_x = line_x + (5 * squaresize);
                } else if (e.getX() >= line_x + (4 * squaresize)) {
                    oval1_x = line_x + (4 * squaresize);
                }
                 else if (e.getX() >=line_x + (3 * squaresize)) {
                    oval1_x = line_x + (3 * squaresize);
                } else if (e.getX() >= line_x + (2 * squaresize)) {
                    oval1_x = line_x + (2 * squaresize);
                } else if (e.getX() >= line_x + (1 * squaresize)) {
                    oval1_x = line_x + (1 * squaresize);
                } else if (e.getX() >= line_x + (0 * squaresize)) {
                    oval1_x = line_x + (0 * squaresize);
                }
                repaint();
            }
            if (ball2) {
                oval2_x = e.getX();
                if (oval2_x >= line_x + (7 * squaresize)) {
                    oval2_x = line_x + (7 * squaresize);
                    repaint();
                }
            }
       repaint();
        }
    }
jfriend
السلام عليكم

أخي الكريم لقد استطعت بفضل الله حل المشكلة الحل بسيط
فقط كان يحتاج منك القليل من التركيز, تامل بالكود و ستعرف الفرق
سوف الون لك التغييرات باللون الاحمر

كود


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;

import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JOptionPane;

public class CreateImage extends JPanel {

    private BufferedImage image;
    private Graphics g;
    private ImageIcon icon;
    private JLabel image_label;
    public static int squaresize = 80,  line_x = 40,  line_y = 120;
    public static int oval1_x = line_x + (3 * squaresize),  oval1_y = 120;
    public static int oval2_x = line_x + (3 * squaresize),  oval2_y = 120;
    public static boolean ball1,  ball2;
        int u=0;
  
    public CreateImage() {
    
        image = new BufferedImage(700, 1000, BufferedImage.TYPE_INT_RGB);
        g = image.getGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, image.getWidth(), image.getHeight());
        MymouseAdabter mouse = new MymouseAdabter();
        addMouseListener(mouse);
        addMouseMotionListener(mouse);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g.drawImage(image, 0, 0, null);
        line_x = 40;
        line_y = 120;
        for (int row = 1; row <= 7; ++row) {
            BasicStroke line = new BasicStroke(5);
            g2.setStroke(line);
            g2.setColor(Color.BLUE);
            g2.draw(new Line2D.Double(line_x, line_y, line_x + (7 * squaresize), line_y));
            line_y += squaresize;
        }
        line_x = 40;
        line_y = 120;
        for (int col = 0; col <= 7; col++) {
            BasicStroke line = new BasicStroke(5);
            g2.setStroke(line);
            g2.setColor(Color.BLUE);
            g2.draw(new Line2D.Double(line_x, line_y, line_x, line_y + (6 * squaresize)));
            line_x += squaresize;
        }
        
        line_x = 40;
        line_y = 120;

        if (ball1) {
            g.setColor(Color.BLACK);
            g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
        }
        if (ball2) {
            g.setColor(Color.BLUE);
            g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
        }


    }

    public static void play_oneActionListener() {
        ball1 = true;
        ball2 = false;
    }

    public static void play_twoActionListener() {
        ball2 = true;
        ball1 = false;
    }

    private class MymouseAdabter extends MouseAdapter {

        @Override
        public void mouseMoved(MouseEvent e) {
  
      // JOptionPane.showMessageDialog(null,"line_x= "+line_x);
          
if(ball1||ball2){

            int uu=line_x + (7 * squaresize);
            oval1_x = e.getX();
                if (e.getX() > line_x + (7 * squaresize)) {
                    oval1_x = line_x + (6 * squaresize);
                }
                
                 else if (e.getX() >= line_x + (6 * squaresize)) {
                    oval1_x = line_x + (6 * squaresize);
                }

                else if (e.getX() >= line_x + (5 * squaresize)) {
                    oval1_x = line_x + (5 * squaresize);
                }

                else if (e.getX() >= line_x + (4 * squaresize)) {
                     oval1_x = line_x + (4 * squaresize);
                }
                
                else if (e.getX() >=line_x + (3 * squaresize)) {
                    oval1_x = line_x + (3 * squaresize);
                }
                
                else if (e.getX() >= line_x + (2 * squaresize)) {
                    oval1_x = line_x + (2 * squaresize);
                }

                else if (e.getX() >= line_x + (1 * squaresize)) {
                  oval1_x = line_x + (1 * squaresize);
                }

                else if (e.getX() >= line_x + (0 * squaresize)) {
                   oval1_x = line_x + (0 * squaresize);
                }
    
                else if (e.getX() < line_x ) {
                   oval1_x = line_x + (0 * squaresize);
                }
      
       /* ----------------------------------------*/
      
                if (e.getY() > line_y + (6 * squaresize)) {
                    oval1_y = line_y + (6 * squaresize);
                }
                
                 else if (e.getY() >= line_y + (5 * squaresize)) {
                    oval1_y = line_y + (6 * squaresize);
                }

               else if (e.getY() >= line_y + (4 * squaresize)) {
                    oval1_y = line_y + (5 * squaresize);
                }
               else if (e.getY() >= line_y + (3 * squaresize)) {
                    oval1_y = line_y + (4 * squaresize);
                }
               else if (e.getY() >= line_y + (2 * squaresize)) {
                    oval1_y = line_y + (3 * squaresize);
                }
               else if (e.getY() >= line_y + (1 * squaresize)) {
                    oval1_y = line_y + (2 * squaresize);
                }

              else if (e.getY() >= line_y + (0 * squaresize)) {
                    oval1_y = line_y + (1 * squaresize);
                }


                else if (e.getY() < line_y ) {
                   oval1_y = line_y + (1 * squaresize);
                }



                repaint();
}  

        //repaint();
        }
    }
}

لا تنساني من الدعاء

تحية طيبة



علاء الصالحي
حاولت أن أحل المشكلة لديك
لكن لم أستطع ذلك
الأكيد لدي أن المشكلة ليست في الكود الذي أشرت إليه
ربما تكون في مواضيع التخطيط Layout
لكنها ليست في المنطقة التي أشرت إليها
كنت أتمنى مساعدتك

تحياتي
jfriend
إقتباس
حاولت أن أحل المشكلة لديك
لكن لم أستطع ذلك
الأكيد لدي أن المشكلة ليست في الكود الذي أشرت إليه
ربما تكون في مواضيع التخطيط Layout
لكنها ليست في المنطقة التي أشرت إليها
كنت أتمنى مساعدتك


اخي انت تقصد بالمشكلة هنا اختفاء GUI components
صحيح؟
فعلا و انا لم استطع حلها انا اقصد انني حللت المشكله مسار الكرة و ضعها داخل الشبكة
بناء على حركة المؤشر و منعها الخروج من الشبكة
بتهيألي هيا مشكلته الرئيسية
علاء الصالحي
مممممممممم
لا أعرف إن كان هذا ما يريده الأخ
لكني لا أظن ذلك
هل جربتي هذه اللعبة من قبل أخت jfriend blink.gif
جربيها فهي ممتعة tongue.gif
المهم في اللعبة هوه العمود الذي تريد إسقاط القطعة فيه
وهو سيستمر في السقوط حتى أول خانة غير ممتلئة
تستمر اللعبة إلى أن يقوم أحدهم بجمع أربع قطع على التوالي
سواءاً أفقياً أو رأسياً
وليس أن تضع القطعة فيه وضعاً في مكانه

تحياتي
jfriend
السلام عليكم

إقتباس
هل جربتي هذه اللعبة من قبل أخت jfriend

صراحة لم اجربها و اول مرة اسمع فيها و لكني اشتغلت فيها على حسب
ما فهمت من شرح الاخ و من خلال الكود

إقتباس
المهم في اللعبة هوه العمود الذي تريد إسقاط القطعة فيه
وهو سيستمر في السقوط حتى أول خانة غير ممتلئة
تستمر اللعبة إلى أن يقوم أحدهم بجمع أربع قطع على التوالي
سواءاً أفقياً أو رأسياً
وليس أن تضع القطعة فيه وضعاً في مكانه

و مع ذلك لم افهمها جيدا
mr.beshoy
شكرا جزيلاً أخ alaadia و أخت Jfriend
المشكلة لم تحل بالضبط مازالت قائمة كما هى
و لكن جارى البحث لحلها و شكرا لتعبكم و اتمنى ايضا أن تضعوا حل إذ توصلتم له
و انا إذا عرفت الحل ساضعه هنا

شكرا
بيشوى عاطف
jfriend
هل تقصد مازلت خارج الشبكة؟
انظر الصورة المرفقة ففيها صورة الكرة داخل الشبكة
لا اعلم ما هي المشكلة لديك
علاء الصالحي
احم احم
يجب أن تلعبي اللعبة jfriend
لأنه لا معنى لأن تريد هذا الشكل بالمرة
ما لم يكن لزوم الحركة
ابحثي عن نسخة الكترونية منها
بالتأكيد ستجدي الكثير

بالنسبة لك أخي mr.beshoy
هل لديكم مانع لو قمت بتصميم الواجهات من جديد

تحياتي
jfriend
السلام عليكم

فعلا كان يجب على بداية الاطلاع على اللعبة
لانني قد صعبت على نفسي و على الاخ beshoy الامر
فبعد ان جربت اللعبة -وللاسف غلبت بكل سهولة- وجدت ان الحل
سهل جدا كل المطلوب بعد ان ترسم الشبكة الزرقاء ان تجعل قيم
المتغيرات التالية كالتالي
line_x=40;
line_y=120;

فقط لالالالا غير

تحياتي
mr.beshoy
لا مانع اخ علاء من تغير الوجهات
سوف نستفيد أكتر و اكتر

وشكرا
jfriend
السلام عليكم

الأخ الكريم beshoy كنت اقصد بردي السابق ان تصوري الخطأ للعبة جعلني اتصور مشكلتك
خطأ ايضا
بمعنى انني لم افهم المشكلة جيدا و الان اليك الكود بعد التعديل اي بعد ما فهمت اللعبة

-انا متأكدة انه الكود الان اصبحت بالشكل المطلوب
مش تبعت و تحكيلي ما غيرتيش حاجة sleep.gif laugh.gif -

استعد الان الى المرحلة الثانية و الاصعب
mouseClicked

كود
[size="2"][color="#000000"]import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CreateImage extends JPanel {

private BufferedImage image;
private Graphics g;
private ImageIcon icon;
private JLabel image_label;
public static int squaresize = 80, line_x = 40, line_y = 120;
public static int oval1_x = line_x + (3 * squaresize), oval1_y = 120;
public static int oval2_x = line_x + (3 * squaresize), oval2_y = 120;
public static boolean ball1, ball2;

public CreateImage() {
image = new BufferedImage(700, 1000, BufferedImage.TYPE_INT_RGB);
g = image.getGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, image.getWidth(), image.getHeight());
MymouseAdabter mouse = new MymouseAdabter();
addMouseListener(mouse);
addMouseMotionListener(mouse);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g.drawImage(image, 0, 0, null);
line_x = 40;
line_y = 120;
for (int row = 1; row <= 7; ++row) {
BasicStroke line = new BasicStroke(5);
g2.setStroke(line);
g2.setColor(Color.BLUE);
g2.draw(new Line2D.Double(line_x, line_y, line_x + (7 * squaresize), line_y));
line_y += squaresize;
}
line_x = 40;
line_y = 120;
for (int col = 0; col <= 7; col++) {
BasicStroke line = new BasicStroke(5);
g2.setStroke(line);
g2.setColor(Color.BLUE);
g2.draw(new Line2D.Double(line_x, line_y, line_x, line_y + (6 * squaresize)));
line_x += squaresize;
}
line_x=40;
line_y=120;

if (ball1) {
g.setColor(Color.BLACK);
g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
}
if (ball2) {
g.setColor(Color.BLUE);
g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
}

}

public static void play_oneActionListener() {
ball1 = true;
ball2 = false;
}

public static void play_twoActionListener() {
ball2 = true;
ball1 = false;
}

private class MymouseAdabter extends MouseAdapter {

@Override
public void mouseMoved(MouseEvent e) {
if (ball1||ball2) {

oval1_x = e.getX();

int uu=line_x + (7 * squaresize);
oval1_x = e.getX();


if (e.getX() > line_x + (7 * squaresize)) {
oval1_x = line_x + (6 * squaresize);
}

else if (e.getX() >= line_x + (6 * squaresize)) {
oval1_x = line_x + (6 * squaresize);
}

else if (e.getX() >= line_x + (5 * squaresize)) {
oval1_x = line_x + (5 * squaresize);
}

else if (e.getX() >= line_x + (4 * squaresize)) {
oval1_x = line_x + (4 * squaresize);
}

else if (e.getX() >=line_x + (3 * squaresize)) {
oval1_x = line_x + (3 * squaresize);
}

else if (e.getX() >= line_x + (2 * squaresize)) {
oval1_x = line_x + (2 * squaresize);
}

else if (e.getX() >= line_x + (1 * squaresize)) {
oval1_x = line_x + (1 * squaresize);
}

else if (e.getX() >= line_x + (0 * squaresize)) {
oval1_x = line_x + (0 * squaresize);
}

else if (e.getX() < line_x ) {
oval1_x = line_x + (0 * squaresize);
}
repaint();


}
//repaint();
}
}
}
[/color][/size]



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

بالتوفيق ان شاء الله
mr.beshoy
أعتذر عن انقطاعى عن هذه المشكلة لأنى كنت فى سفر
المهم نكمل مع بعض

بصى اخت Jfriend
اولا السطرين دول
كود
int uu=line_x + (7 * squaresize);
oval1_x = e.getX();


مش لازم منهم اصلا مش عارف ايه هدفك انك تضعيهم

المشكلة الكبرى انكى بعد ما تضغطين على الزرار
تختفى البانل التى عليها مكونات اللعب الاول و الثانى

رجاء المساعدة

و شكرا جدا

منتظر ردودكم
jfriend
السلام عليكم

إقتباس
بصى اخت Jfriend
اولا السطرين دول
مش لازم منهم اصلا مش عارف ايه هدفك انك تضعيهم

صحيح هاتين الجملتين فقط كنت قد وضعتهم سابقا من أجل
جمل الdebug
حتى استطيع ان أحدد اين المشكلة يبدو انني قد ازلت
جمل الdebug و لم انتبه الى ازالت هاتين الجملتين
بإمكانك حذفهم لا توجد مشكلة

إقتباس
المشكلة الكبرى انكى بعد ما تضغطين على الزرار
تختفى البانل التى عليها مكونات اللعب الاول و الثانى

ان شاء الله سوف احاول ان أساعدك في حل المشكلة
و لكن أمهلني بعض الوقت لاني مشغولة هذه الفصل
mr.beshoy
شكرا اخت Jfriend لمساعدتك
و اتمنى ان تساعدينى فى هذه الجزئية
و لو توصلت لحل سأضعه هنا


علاء الصالحي
كود
package TheFourthwin;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Game extends JFrame {

    private JPanel mainPlayer_panel;
    private JPanel playerone_panel;
    public static JButton play_one;
    private JPanel scoreone_panel;
    private JLabel score_one;
    private static JTextField field_one;
    private JPanel playertwo_panel;
    public static JButton play_two;
    private JPanel scoretwo_panel;
    private JLabel score_two;
    private static JTextField field_two;

    public Game() {
        Container c=getContentPane();
        c.setLayout(null);//
        mainPlayer_panel = new JPanel();
        mainPlayer_panel.setPreferredSize(new Dimension(200, 200));
        mainPlayer_panel.setBorder(BorderFactory.createTitledBorder("player"));
        mainPlayer_panel.setBackground(Color.pink);
        mainPlayer_panel.setBounds(700, 100, 300, 500);

        playerone_panel = new JPanel();
        playerone_panel.setPreferredSize(new Dimension(200, 200));
        playerone_panel.setBorder(BorderFactory.createTitledBorder("player one"));
        play_one = new JButton("playe");
        play_one.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                CreateImage.play_oneActionListener();
                repaint();
            }
        });

        scoreone_panel = new JPanel(new FlowLayout());
        score_one = new JLabel("score");
        field_one = new JTextField(10);
        scoreone_panel.add(score_one);
        scoreone_panel.add(field_one);
        playerone_panel.add(play_one);
        playerone_panel.add(scoreone_panel);

        playertwo_panel = new JPanel();
        playertwo_panel.setPreferredSize(new Dimension(200, 200));
        playertwo_panel.setBorder(BorderFactory.createTitledBorder("player one"));
        play_two = new JButton("playe");
        play_two.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                CreateImage.play_twoActionListener();
                repaint();
            }
        });
        scoretwo_panel = new JPanel(new FlowLayout());
        score_two = new JLabel("score");
        field_two = new JTextField(10);
        scoretwo_panel.add(score_two);
        scoretwo_panel.add(field_two);
        playertwo_panel.add(play_two);
        playertwo_panel.add(scoretwo_panel);

        mainPlayer_panel.add(playerone_panel);
        mainPlayer_panel.add(playertwo_panel);
        c.add(mainPlayer_panel);
        JPanel some=new CreateImage();
        some.setBounds(0, 0, 700, 800);//
        c.add(some);
    }

    public static void main(String[] args) {
        
        JFrame frame = new Game();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setSize(1000, 800);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

ويعلم الله أني عانيت الأمرين في إصلاحه
كما توقعت المشكلة مشكلة Layout
وضعت لك علامة // عند كل جملة أضفتها
بالمناسبة ما فائده هذه الجمل
كود
frame.pack();
frame.setLocationRelativeTo(null);


تحياتي
mr.beshoy
شكراً جداً جداً مستر علاء
بس لى سوال واحد انا مغيرتش اى حاجة فى الكود غير انى خليت اول سطرين حضرتك ضفتهم
كود
Container c = getContentPane();
        c.setLayout(null);


و الجزء ده
كود
JPanel some = new CreateImage();
        some.setBounds(0, 0, 700, 800);
        getContentPane().add(some);


لكن لما بحذف اول سطرين الدنيا بتتلغبط تانى ايه السبب ممكن افهم

و شكرا جدا



علاء الصالحي
السبب أنه يجب يكون للنافذة Frame منظم Layout لترتيب المكونات component
في حال كان المنظم null يعني غير موجود
يجب عليك أن تحدد مكان كل مكون بنفسك

تحياتي
mr.beshoy
هل تقصد ب (في حال كان المنظم null يعني غير موجود)

مثل هذه الكود
كود
c.setlayout(null);


اسف جدا على اسئلتى الغبية بس هتعبكم اكتر بعد كده بجد ههههه

و اسف على الازعاج لكن بجد ان ابستفيد مكنكم جدا

علاء الصالحي
اه بالضبط laugh.gif

تحياتي
mr.beshoy
سلام للجميع

إخواتى الإعزاء

أنى فى مرحلة الmouseClicked()

تكملة على الكود السابق

كملت حتة الكود هذه


كود
private class MymouseAdabter extends MouseAdapter {

        @Override
        public void mouseMoved(MouseEvent e) {
            if (ball1 || ball2) {
                oval_x = e.getX();

                if (e.getX() > line_x + (7 * squaresize)) {
                    oval_x = line_x + (6 * squaresize);
                } else if (e.getX() >= line_x + (6 * squaresize)) {
                    oval_x = line_x + (6 * squaresize);
                } else if (e.getX() >= line_x + (5 * squaresize)) {
                    oval_x = line_x + (5 * squaresize);
                } else if (e.getX() >= line_x + (4 * squaresize)) {
                    oval_x = line_x + (4 * squaresize);
                } else if (e.getX() >= line_x + (3 * squaresize)) {
                    oval_x = line_x + (3 * squaresize);
                } else if (e.getX() >= line_x + (2 * squaresize)) {
                    oval_x = line_x + (2 * squaresize);
                } else if (e.getX() >= line_x + (1 * squaresize)) {
                    oval_x = line_x + (1 * squaresize);
                } else if (e.getX() >= line_x + (0 * squaresize)) {
                    oval_x = line_x + (0 * squaresize);
                } else if (e.getX() < line_x) {
                    oval_x = line_x + (0 * squaresize);
                }


            }
            repaint();
        }

      
        @Override
        public void mouseClicked(MouseEvent e) {
            if (ball1||ball2) {
                oval_y = e.getY();
                if (e.getY() >= line_y+(oval_y * 6)) {
                    oval_y = line_y+(oval_y * 6);
                } else if (e.getY() < line_y+(oval_y * 5)) {
                    oval_y = line_y+(oval_y * 5);
                } else if (e.getY() <line_y+(oval_y * 4)) {
                    oval_y = line_y+(oval_y * 4);
                } else if (e.getY() < line_y+(oval_y * 3)) {
                    oval_y = 120+(oval_y * 3);
                } else if (e.getY() < (oval_y * 2)) {
                    oval_y = 120+(oval_y * 2);
                } else if (e.getY() < 120+(oval_y * 1)) {
                    oval_y = 120+(oval_y * 1);
                }
                
            }
            repaint();
        }
    }
    }


المشكلة فى الmouseclicked()

أن الكرة المفروض تنزل عند آخر صف و تقف و متكملش ده الطبيعى

لكن المشكلة انها لما تنزلها لآخر صف
و تضغط تانى بالماوس تحت آخر صف فى الشبكة تروح تنزل بردو
ايه السبب ؟ رغم انى قايل

كود
if (e.getY() >= line_y+(oval_y * 6)) {
                    oval_y = line_y+(oval_y * 6);


شكراً مقدماً
علاء الصالحي
أولاً هكذا خطأ
يجب أن يكون لديك مصفوفة تحتوي على هل الخانة ممتلئة أو فاضية
ثانياً يجب عليك أن ترسم لكل خانة إن كانت ممتلئة كرة
قم بعمل هذا وسنرى ما المشكلة بعد ذلك

تحياتي
mr.beshoy
ايوة بس انا المفروض فى الاول اوضح حدود نزول الكرة هيكون لغاية فين
زى ما عملنا فى الmousemoved() حددنا حدود المسار الى هتتحرك فيه الكرة على محور x
و ايضا لازم نحدد حدود المسار الى هتقف عنده الكرة على محور y

jfriend
السلام عليكم

انا مستغربة كيف حضرتك كاتب هنا
كود
oval_y = e.getY();

و بعدين كاتب
إقتباس
e.getY() < line_y+(oval_y * 5)

هاي الجمله معناها
هل e.getY()< (e.getY()*5)+120
من الطبيعي انه المعادلة في كل الأوقات متحققة
يعني حتظلها دائما تحقق جواب الشرط تبع هاي المعادلة

واضح قصدي؟؟

لو حضرتك ركزت في الأكواد اللي قدمتها قبل ما افهم اللعبة
كان حليت مشكلة تحديد حدود الكرة في الميثود
mouseClicked
بكل سهولة
فعلى شان تحدد حدود الكرة اليك الكود التالي



كود


             public void mouseClicked(MouseEvent e) {
            if (ball1||ball2) {
               if (e.getY() > line_y + (6 * squaresize)) {
                    oval1_y = line_y + (6 * squaresize);
                }
                
                 else if (e.getY() >= line_y + (5 * squaresize)) {
                    oval1_y = line_y + (6 * squaresize);
                }

               else if (e.getY() >= line_y + (4 * squaresize)) {
                    oval1_y = line_y + (5 * squaresize);
                }
               else if (e.getY() >= line_y + (3 * squaresize)) {
                    oval1_y = line_y + (4 * squaresize);
                }
               else if (e.getY() >= line_y + (2 * squaresize)) {
                    oval1_y = line_y + (3 * squaresize);
                }
               else if (e.getY() >= line_y + (1 * squaresize)) {
                    oval1_y = line_y + (2 * squaresize);
                }

              else if (e.getY() >= line_y + (0 * squaresize)) {
                    oval1_y = line_y + (1 * squaresize);
                }


                else if (e.getY() < line_y ) {
                   oval1_y = line_y + (1 * squaresize);
                }

            }
            repaint();


        }




هنا في هذا الكود فقط حددنا المكان النهائي الذي
ستستقر فيه الكرة
طبعا قبل هيك احنا محتاجين نرسم الكرة و هي تسقط حتى تستقر
تمام هيك؟؟






jfriend
السلام عليكم

لا أدري إذ كان أحدكم قد بدأ بعمل الanimation

لحركة سقوط الكرة بالنسبالي انا بدأت فيها و لكن واجهت مشكلة

انه عند استدعاء الrepaint()

أكثر من مرة في لوب حيث اضع تايمر بعد استدعاء اعادة الرسم

الذي يحدث انه بعد ان يمضي مجموع التايمر في كل اللفات فانه

في النهاية يستدعي الrepaint()

اتمنى أن أسمع رأي الاخوة ممن لديهم خبرة في المالتيميديا

انا سوف احاول حلها و ان شاء الله لو توصلت الى حل ساضعه

حياكم الله

mr.beshoy
إقتباس
هاي الجمله معناها
هل e.getY()< (e.getY()*5)+120
من الطبيعي انه المعادلة في كل الأوقات متحققة
يعني حتظلها دائما تحقق جواب الشرط تبع هاي المعادلة

واضح قصدي؟؟


مش فاهمك كويس فى الجزئية دى

السوال التانى : ليه لما بيكون
كود

if (e.getY() > line_y + (6 * squaresize))

بتجعلى ال
كود
oval1_y = line_y + (6 * squaresize);


ولما بيكون 5 تجعليها 6
و لما بيكون 4 تجعليها 5
و هكذا

ياريت التوضيح لانى مش فاهمها بجد


jfriend
السلام عليكم

ركز كويس في المعادلة
e.getY()< (e.getY()*5)+120
يعني e.getY() دائما سوف تكون اصغر من خمس أضعافها مضافا لها الرقم 120
فبالتالي سوف يكون هذا الشرط متحقق دائما و باقي الشروط غير متحققه

السوال التانى : ليه لما بيكون
if (e.getY() > line_y + (6 * squaresize))
بتجعلى ال
oval1_y = line_y + (6 * squaresize);

أوكي,
كود
               else if (e.getY() >= line_y + (4 * squaresize)) {
                    oval1_y = line_y + (5 * squaresize);
                }

الآن ما معنى
e.getY() >= line_y + (4 * squaresize)
يعني ان المؤشر في المربع الخامس
و ذلك لاننا قلنا هل هي أكبر من من أربع أضعاف طول ضلع المربع بعني في المربع الخامس واضح؟؟
فبالتالي سوف يتم رسم الكرة في المربع الخامس و بما انك في دالة الrepaint()
كنت ترسم الدائرة من
oval1_y - squaresize
فبتالي لكي ترسم المربع من الزاوية اليسرى العلوية للمربع
نقوم بجعل قيمة oval1_y بحيث تقع على الزاوية السفلية للمربع
فعند الرسم يتم طرح طول المربع من oval1_y
فتكون نقطة البداية لرسم الكرة هي اعلى المربع
واضح؟؟؟؟؟ blink.gif huh.gif
أشك sad.gif



علاء الصالحي
jfriend اعرضي الكود الخاص بالدالة ككل
حتى أرى أين المشكلة
هل هناك مشاكل بالنسبة لك أخ mr.beshoy

تحياتي
jfriend
السلام عليكم

إقتباس
jfriend اعرضي الكود الخاص بالدالة ككل
حتى أرى أين المشكلة

شكرأ أخ علاء الحمد لله المشكلة انحلت.
المشكلة كانت عندما أردت تحريك الكرة الى المربع الذي يوجد به المؤشر لتمر بكل المربعات السابقة له
قمت برسم الكرة مرة باللون الأسود ثم مرة باالون الأبيض بحيث تتغير احداثيات
الكرة وفق عداد معين و طبعا بين كل رسمة للكرة هناك delay
حتى تبدو و كأنها تتحرك
كما هو واضح فأنا في حاجة الى استدعاء الميثود repaint()
بشكل مستمر بناءا على التغيير في احداثيات الكرة
فالمشكلة ظهرت ان الrepaint لا تنفذ في كل مرة التي يستمر استدعاءها
في اللوب فقط يتم استدعاء أخر وحدة في اللوب فلا تظهر الحركة

و لكن عندما بحثت في الانترنت وجدت ان هذه المشكلة ظهرت لدى كثير من المبرمجين
و قد ذكر ان الاستدعاء المستمر للrepaint
يندمج مع بعضه فلا تنفذ الا أخر واحدة لذا ذكرو لكي يتم حل هذه المشكلة
لابد من عمل Thread
لا أقصد Thread.sleep();
-حتى هذه الميثود لم تجدي-
بل تقوم بعمل Thread
تقوم باستدعاء الrepaint في جملة الرن التابعة له
فعلا زبطت هذه الطريقة

و هذا الكود بعد التعديل
كود


import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.*;

public class CreateImage extends JPanel {

    private BufferedImage image;
    private Graphics g;
    private ImageIcon icon;
    private JLabel image_label;
    public static int squaresize = 80,  line_x = 40,  line_y = 120;
    public static int oval1_x = line_x + (3 * squaresize),  oval1_y = 120;
    public static int oval2_x = line_x + (3 * squaresize),  oval2_y = 120;
    public static boolean ball1,  ball2;
int flag=0;
int ov=0;
    public CreateImage() {
        image = new BufferedImage(700, 1000, BufferedImage.TYPE_INT_RGB);
        g = image.getGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, image.getWidth(), image.getHeight());
        MymouseAdabter mouse = new MymouseAdabter();
        addMouseListener(mouse);
        addMouseMotionListener(mouse);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g.drawImage(image, 0, 0, null);
        line_x = 40;
        line_y = 120;
        for (int row = 1; row <= 7; ++row) {
            BasicStroke line = new BasicStroke(5);
            g2.setStroke(line);
            g2.setColor(Color.BLUE);
            g2.draw(new Line2D.Double(line_x, line_y, line_x + (7 * squaresize), line_y));
            line_y += squaresize;
        }
        line_x = 40;
        line_y = 120;
        for (int col = 0; col <= 7; col++) {
            BasicStroke line = new BasicStroke(5);
            g2.setStroke(line);
            g2.setColor(Color.BLUE);
            g2.draw(new Line2D.Double(line_x, line_y, line_x, line_y + (6 * squaresize)));
            line_x += squaresize;
        }
        line_x=40;
        line_y=120;
        
        if (ball1) {
            g.setColor(Color.BLACK);
            g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
        }
        if (ball2) {
            g.setColor(Color.BLUE);
            g.fillOval(oval1_x, oval1_y - squaresize, squaresize, squaresize);
        }
        
      

    }

    public static void play_oneActionListener() {
        ball1 = true;
        ball2 = false;
    }

    public static void play_twoActionListener() {
        ball2 = true;
        ball1 = false;
    }
public void paint2(){
repaint();
}
    private class MymouseAdabter extends MouseAdapter implements Runnable{
      Thread circleThread = null;

        @Override
        public void mouseMoved(MouseEvent e) {
            if (ball1||ball2) {

                oval1_x = e.getX();

            int uu=line_x + (7 * squaresize);
            oval1_x = e.getX();
             // JOptionPane.showMessageDialog(null,"e.getX()= "+e.getX()+"\n"+"uu= "+uu+"\n"+"line_x= "+line_x);

                if (e.getX() > line_x + (7 * squaresize)) {
                    oval1_x = line_x + (6 * squaresize);
                }
                
                 else if (e.getX() >= line_x + (6 * squaresize)) {
                    oval1_x = line_x + (6 * squaresize);
                }

                else if (e.getX() >= line_x + (5 * squaresize)) {
                    oval1_x = line_x + (5 * squaresize);
                }

                else if (e.getX() >= line_x + (4 * squaresize)) {
                     oval1_x = line_x + (4 * squaresize);
                }
                
                else if (e.getX() >=line_x + (3 * squaresize)) {
                    oval1_x = line_x + (3 * squaresize);
                }
                
                else if (e.getX() >= line_x + (2 * squaresize)) {
                    oval1_x = line_x + (2 * squaresize);
                }

                else if (e.getX() >= line_x + (1 * squaresize)) {
                  oval1_x = line_x + (1 * squaresize);
                }

                else if (e.getX() >= line_x + (0 * squaresize)) {
                   oval1_x = line_x + (0 * squaresize);
                }
    
                else if (e.getX() < line_x ) {
                   oval1_x = line_x + (0 * squaresize);
                }
                repaint();
          
  
            }
        //repaint();
        }
      
      
             public void mouseClicked(MouseEvent e) {
            if (ball1||ball2) {
               if (e.getY() > line_y + (6 * squaresize)) {
                    oval1_y = line_y + (6 * squaresize);
                }
                
                 else if (e.getY() >= line_y + (5 * squaresize)) {
                    oval1_y = line_y + (6 * squaresize);
                }

               else if (e.getY() >= line_y + (4 * squaresize)) {
                    oval1_y = line_y + (5 * squaresize);
                }
               else if (e.getY() >= line_y + (3 * squaresize)) {
                    oval1_y = line_y + (4 * squaresize);
                }
               else if (e.getY() >= line_y + (2 * squaresize)) {
                    oval1_y = line_y + (3 * squaresize);
                }
               else if (e.getY() >= line_y + (1 * squaresize)) {
                    oval1_y = line_y + (2 * squaresize);
                }

              else if (e.getY() >= line_y + (0 * squaresize)) {
                    oval1_y = line_y + (1 * squaresize);
                }


                else if (e.getY() < line_y ) {
                   oval1_y = line_y + (1 * squaresize);
                }
           ov=oval1_y;
           circleThread = new Thread(this);
           circleThread.start();
            }
        }

      public void run() {
//   JOptionPane.showMessageDialog(null,"ov= "+ov);
       for(int y=120;y<=ov;y+=30){
          oval1_y=y;
    repaint();  
               try {
                  Thread.sleep(100);
               }
               catch (InterruptedException evt) {}
   if(y+30>ov){
    oval1_y=ov;
    repaint();
   }

      }
   /*       for(int y=line_y + (1 * squaresize);y<=ov;y+=squaresize){
          oval1_y=y;
    repaint();  
               try {
                  Thread.sleep(100);
               }
               catch (InterruptedException evt) {}
      } */    
        
    }
    }
}





علاء الصالحي
فعلاً هناك مشكلة في عملية الرسم المتعدد
لأن الخيط الرئيسي راح يتعطل ويتبهدل
أصلاً استخدام sleep في الخيط الرئيسي مشكلة

تحياتي
mr.beshoy
سلام للجميع

شكرا مستر علاء
و اخت jfriend
لمعاونتكم لى و أقدر تعبكم جدا جدا .

اود ان اعرض راى اخر

بدل ما كنا كل مرة نقول
if(e.gety()>120+(3*squersize)
so
ovaly=120+(4*squaresize)
وهكذا إلى ان ننهى الشبكة
سواء فى الmousemoved pr mouseclicked
عرفت طريقة اخرى دلنى عليها احد الزملاء
و هى
كود
    private class MymouseAdabter extends MouseAdapter {

        private int[] square_num = new int[6];

        @Override
        public void mouseMoved(MouseEvent e) {
            if (ball1 || ball2) {
                for (int n = 0; n < square_num.length; ++n) {
                    square_num[n] = 120 + 6 * squaresize;
                }

                oval_x = e.getX();

                if (e.getX() > line_x + (7 * squaresize)) {
                    oval_x = line_x + (6 * squaresize);
                }

            }
            repaint();
        }

        @Override
        public void mouseClicked(MouseEvent e) {

            if (ball1 || ball2) {

                for (int n = 0; n < square_num.length; ++n) {
                    square_num[n] = 120 + 7 * squaresize;
                // square_num[n] -= 6 * squaresize - squaresize;
                }
                oval_y = e.getY();
                if (e.getY() > line_y + (6 * squaresize)) {
                    oval_y = line_y + (6 * squaresize);
                }
                repaint();
            }
        }
    }


و الان هنتقل لمرحلة ان احاول ملئ الصف و العمود بالدوائر
و إذ واجهت مشكلة ساستعين بكم

و شكرا
علاء الصالحي
أخ mr.beshoy
بالتأكيد هذه الشيفرة فيها شيء خطأ
لأنها منافية لأبسط قواعد المنطق
لماذا لم تظهر مشكلة لديك
لأن السطر التالي يعمل بشكل جيد
كود
oval_x = e.getX();

لهذا تلاحظ أن البيضاوي يمشي مع حركة الفأرة تماماً
مع أنه مفروض لا يتحرك إلى إذا دخلنا مربع جديد
سأقوم بتصليح الشيفرة ووضعها

تحياتي
mr.beshoy
هى مش تمام للدرجة يعنى
بس انا هدفى نبسط الكود الكبير لجزئية أقل

و منتظر ردك

شكرا
jfriend
أخ mr.beshoy

029.gif سؤال ما فائدة هدا الكود
كود
      for (int n = 0; n < square_num.length; ++n) {  
                 square_num[n] = 120 + 7 * squaresize;    
          }

و اذا كان غرضك من هذا هو تحديد المربع الذي ضغط عليه المؤشر كيف سيتم
تحديد المربع و كل القيم في المعادلة
square_num[n] = 120 + 6 * squaresize;
هي ثوابث يعني سوف تكون قيمة
square_num[n]
في كل لفة من لفات اللوب تساوي
120+(6*80)
يعني قيمة square_num[n] ثابتة دائما
أصلا ما فائدة square_num[n]
طالما انك لم تستعمله


كود
oval_x = e.getX();

استعمالك اهذه الجملة يعني اينما تحرك المؤشر ارسم كرة و هل هذا هو المطلوب؟؟؟؟!!!
رجعتنا لنقطة البداية confused_smile.gif
نحن مهمتنا ان نحدد المربع الذي ضغط عليه المستخدم و نرسم بداخله كرة
علاء الصالحي
هذا ما أتكلم عنه jfriend
واضح أن المنطق هنا معدوم تماماً
التبسيط أخي ما كنت كتبه أول مرة
لكن الاحترافية في ما تريد أن تقوم به
بمعنى لو أردت زيادة حجم الرقعة فلن تحتاج إلى تغيير الكثير

تحياتي
mr.beshoy
سلام يا شباب
أخت jfriend

إقتباس
و اذا كان غرضك من هذا هو تحديد المربع الذي ضغط عليه المؤشر كيف سيتم
تحديد المربع و كل القيم في المعادلة
square_num[n] = 120 + 6 * squaresize;
هي ثوابث يعني سوف تكون قيمة
square_num[n]
في كل لفة من لفات اللوب تساوي
120+(6*80)
يعني قيمة square_num[n] ثابتة دائما
أصلا ما فائدة square_num[n]
طالما انك لم تستعمله



ثوابت ازاى ما الn كل مرة بتقل
و بعدين احنا ممكن نكتب السطر ده
كود
square_num[n] - =  squaresize;


فبالتالى هتقل قيمة square_num[n]

بالنسبة لاخ علاء

اعتقد ان هناك طريقة اخرى لتبسيط الكود
و لكن مش مشكلة هنكمل و ادينا بنكتشف
علاء الصالحي
أخ mr.bashory
جرب تشيل الجملة هذه من الشيفرة
كود
oval_x = e.getX();

لاحظ أنه مفروض البيضاوي ما يمشيش مع الفارة
وإنما ينط نط
أقصد أنه عندما تتجاوز منطقة إلى منطقة بالفأرة سينتقل معك
لكن تلاحظ أن البيضاوي يتبع الفأرة في حركتها بالملي

تحياتي
jfriend
إقتباس
اعتقد ان هناك طريقة اخرى لتبسيط الكود
و لكن مش مشكلة هنكمل و ادينا بنكتشف

أوكي أخي لو كنت ترغب بعمل الميثودات
mouseMoved, mouseClicked
بطريقة أبسط اليك الطريقة التالية:

انسخ الكود
  1. public void mouseMoved(MouseEvent e) {
  2. if (ball1||ball2) {
  3. for(int n=6;n>=0;n--){
  4. if (e.getX() >= line_x + (n * squaresize)) {
  5. oval1_x = line_x + (n * squaresize);
  6. break;
  7. }
  8. }
  9. if (e.getX() > line_x + (7 * squaresize)) {
  10. oval1_x = line_x + (6 * squaresize);
  11. }
  12.  
  13. else if (e.getX() < line_x ) {
  14. oval1_x = line_x + (0 * squaresize);
  15. }
  16. repaint();
  17. }
  18. }
  19.  
  20. public void mouseClicked(MouseEvent e) {
  21. if (ball1||ball2) {
  22. for(int n=6;n>=1;n--){
  23. if (e.getY() >= line_y + ((n-1) * squaresize)) {
  24. oval1_y = line_y + (n * squaresize);
  25. break;
  26. }
  27. }
  28.  
  29. if (e.getY() > line_y + (6 * squaresize)) {
  30. oval1_y = line_y + (6 * squaresize);
  31. }
  32.  
  33. else if (e.getY() < line_y ) {
  34. oval1_y = line_y + (1 * squaresize);
  35. }
  36. repaint();
  37. }
  38. }
  39.  
  40.