الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لعبة الأربعة تربح

بدأه mr.beshoy في 28 أغسطس 2008 · 49 رد · 5,010 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

أولاً هكذا خطأ

يجب أن يكون لديك مصفوفة تحتوي على هل الخانة ممتلئة أو فاضية

ثانياً يجب عليك أن ترسم لكل خانة إن كانت ممتلئة كرة

قم بعمل هذا وسنرى ما المشكلة بعد ذلك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#27

ايوة بس انا المفروض فى الاول اوضح حدود نزول الكرة هيكون لغاية فين

زى ما عملنا فى الmousemoved() حددنا حدود المسار الى هتتحرك فيه الكرة على محور x

و ايضا لازم نحدد حدود المسار الى هتقف عنده الكرة على محور y

#28

السلام عليكم

انا مستغربة كيف حضرتك كاتب هنا

 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();


		}

هنا في هذا الكود فقط حددنا المكان النهائي الذي

ستستقر فيه الكرة

طبعا قبل هيك احنا محتاجين نرسم الكرة و هي تسقط حتى تستقر

تمام هيك؟؟

#29

السلام عليكم

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

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

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

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

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

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

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

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

حياكم الله

#30
اقتباس
هاي الجمله معناها

هل e.getY()< (e.getY()*5)+120

من الطبيعي انه المعادلة في كل الأوقات متحققة

يعني حتظلها دائما تحقق جواب الشرط تبع هاي المعادلة

واضح قصدي؟؟

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

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

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

بتجعلى ال

oval1_y = line_y + (6 * squaresize);

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

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

و هكذا

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

#31

السلام عليكم

ركز كويس في المعادلة

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: :huh:

أشك :(

#32

jfriend اعرضي الكود الخاص بالدالة ككل

حتى أرى أين المشكلة

هل هناك مشاكل بالنسبة لك أخ mr.beshoy

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#33

السلام عليكم

اقتباس
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) {}
	  } */	 

	}
	}
}
#34

فعلاً هناك مشكلة في عملية الرسم المتعدد

لأن الخيط الرئيسي راح يتعطل ويتبهدل

أصلاً استخدام sleep في الخيط الرئيسي مشكلة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#35

سلام للجميع

شكرا مستر علاء

و اخت 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();
			}
		}
	}

و الان هنتقل لمرحلة ان احاول ملئ الصف و العمود بالدوائر

و إذ واجهت مشكلة ساستعين بكم

و شكرا

#36

أخ mr.beshoy

بالتأكيد هذه الشيفرة فيها شيء خطأ

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

لماذا لم تظهر مشكلة لديك

لأن السطر التالي يعمل بشكل جيد

 oval_x = e.getX();

لهذا تلاحظ أن البيضاوي يمشي مع حركة الفأرة تماماً

مع أنه مفروض لا يتحرك إلى إذا دخلنا مربع جديد

سأقوم بتصليح الشيفرة ووضعها

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#37

هى مش تمام للدرجة يعنى

بس انا هدفى نبسط الكود الكبير لجزئية أقل

و منتظر ردك

شكرا

#38

أخ mr.beshoy

:mad: سؤال ما فائدة هدا الكود

	  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();

استعمالك اهذه الجملة يعني اينما تحرك المؤشر ارسم كرة و هل هذا هو المطلوب؟؟؟؟!!!

رجعتنا لنقطة البداية :S

نحن مهمتنا ان نحدد المربع الذي ضغط عليه المستخدم و نرسم بداخله كرة

تم تعديل هذه المشاركة بواسطة jfriend في 26 سبتمبر 2008 في 17:48

#39

هذا ما أتكلم عنه jfriend

واضح أن المنطق هنا معدوم تماماً

التبسيط أخي ما كنت كتبه أول مرة

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

بمعنى لو أردت زيادة حجم الرقعة فلن تحتاج إلى تغيير الكثير

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#40

سلام يا شباب

أخت 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]

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

اعتقد ان هناك طريقة اخرى لتبسيط الكود

و لكن مش مشكلة هنكمل و ادينا بنكتشف

#41

أخ mr.bashory

جرب تشيل الجملة هذه من الشيفرة

oval_x = e.getX();

لاحظ أنه مفروض البيضاوي ما يمشيش مع الفارة

وإنما ينط نط

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

لكن تلاحظ أن البيضاوي يتبع الفأرة في حركتها بالملي

تحياتي

تم تعديل هذه المشاركة بواسطة alaadiaa في 27 سبتمبر 2008 في 00:27

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#42
اقتباس
اعتقد ان هناك طريقة اخرى لتبسيط الكود

و لكن مش مشكلة هنكمل و ادينا بنكتشف

أوكي أخي لو كنت ترغب بعمل الميثودات

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.  

تم تعديل هذه المشاركة بواسطة jfriend في 28 سبتمبر 2008 في 17:25

#43

السلام عليكم

لقد عرفت المشكلة في الكود خاصتك أخي

يجب أن تجعل قيمة line_x , line_y إلى قيمتها الأصلية بعد رسم الشبكة

لا تنسى أن تحذف الجملة التي أشرت لها مسبقاً

عموماً أنا أنهيت موضوع الرسم تماماً

لكني لم أحب أن أطرحه لكم لأترك لكم فرصة التفكير

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#44

السلام عليكم

اقتباس
لقد عرفت المشكلة في الكود خاصتك أخي

يجب أن تجعل قيمة line_x , line_y إلى قيمتها الأصلية بعد رسم الشبكة

أخ علاء عن أي مشكلة تتحدث؟ هل عن المشكلة الأولى و هي

خروج الكرة عن حدود الشبكة في الأعلى عندما يتم اختيار الاعب؟؟

#45

أقصد لا بد أنك لاحظتي

أن الكرة تلحق الفارة مباشرة

يفترض أن تمشي الكرة مربعاً مربعاً وليس تبعاً للفارة مباشرة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#46

السلام عليكم

انهيت برمجة اللعبة كلعبة عادية بدون ذكاء صناعي

ماذا حصل معكم؟؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#47

سلام

صدقنى انا دلوقتى مشغول شوية فى طلبات الكلية

فى لعبة ناويين نعملها مع بعض لمادة السوفتوير little bompers or snake game))

و مشروع ادارة مكتبة لمادة ال system analysis

و تقريبا مشروع c#

صغير كده

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

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

وشكرا لاهتمامك اخ علاء

#48

ركز في الجامعة وإن شاء الله خير

وما يهمكاش في المشاريع التانية

إن شاء الله مش هنقصر معاك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#49

حضرتك شايف اهتمم بال projects بتاعة الكلية دلوقتى و اركن اللعبة لحد م يخلص الترم افضل ؟؟؟؟؟

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

#50

بالضبط

وبعدين ممكن بعد ما تخلص شغل الكلية تشتغل فيهم

ممكن كمان في الصيفي تشتغل فيهم وكده يعني

أهم حاجة تهتم بدرساتك دلوقت

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة