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

إليكم لعبة Tetris من برمجتي

مغلقاستطلاع
بدأه حسام الملحم في 20 ديسمبر 2005 · 10 رد · 5,795 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام

ما رأيك في الشفرة وليس البرنامج؟

5 مشارك في التصويت

?? ???? ?? ?????? ???? ?????????

?????? ???? ??????.2 صوت · 40%
?????? ???? ?????? ????? ?????. ??? ????? ?????? ????? ????? ???????.1 صوت · 20%
?????? ????? ???? ???? ?????? ????? ??? ?????? (?????) ??? ?????? ?????? ??????. ?????? ??? ???????? ??? ????? ????!0 صوت · 0%
?????? ????? ???? ?????? ?????? ????? ??? ???? ??? ?????? ??? ????? ?? ?????. ???? ???? ?????? ?? ??????!0 صوت · 0%
?????? ????? ???? ?????? ?????? ?????? ?? ???? ?????? ???? ?????2 صوت · 40%
#1 صاحب الموضوع

السلام عليكم،

إليكم الإصدار الأول من لعبة Tetris الشهيرة. برمجة حسام الملحم،

ضع صوتك بعد قراءتك للموضوع وتجربة البرنامج وقراءة الشفرة.

مهمتك أن تضع القطع لتشكل أسطر كاملة، كلما أكملت سطرا يختفي، إذا امتلأت الصفحة بالقطع تنتهي اللعبة..

19_12_05_04_19_15_1135037955tetris.GIF

بدأت الفكرة منذ أن كنت صغيرا، وبدأت في تنفيذها قبل أسبوع عندما قام محمد منصور بطرح موضوعه عن لعبته

مميزات البرنامج:

1-تعمل على كافة أنظمة التشغيل.

2-تعمل على جميع المتصفحات. (تستطيع تشغيلها كApplet).

3- الشفرة جميلة والله أعلم..

سلبيات:

1- اللعبة تعمل بدون حساب للدرجات.

2- ربما أمور أخرى. ربما في الإصدارات المقبلة، حتى نصل إلى الإصدار المستقر!

3- تحتاج إلى جافا 5 (من لديه إصدار جافا قديم فلن تعمل اللعبة) (حمل آخر إصدار من جافا)

شرح للشفرة بشكل عام: (قبل أن تضع صوتك)

الحزمة hussam.tetris تحوي منطق البرنامج:

1- TetrisShape عبارة عن فئة تمثل شكل من أشكال القطع المعروفة، هذه الفئة abstract وتضع خطوطا عريضة في كيفية تصميم شكل يعمل بشكل جيد: تحوي الأوامر الأساسية مثل move وتعني حرك،، و rotate وتعني أدر. و paint والتي وظيفتها رسم القطعة الخاصة.

2- الفئة Block وهي تمثل مربعا واحدا، فكما تعلم، القطع التي تتحكم فيها مؤلفة من مربعات. هذه الفئة ترث من TetrisShapeالأم.

3- الفئة Lego وهي تمثل مجموعة من Blocks لتشكل القطع المعروفة. هذه الفئة ترث من TetrisShape الأم.

4- الفئات Bar, LShape, SShape, ZShape, TShape, Box تمثل الأشكال التي نحركها وكلها ترث من الفئة Lego التي ترث من TetrisShape الأم.

5- TetrisScape وهذه تمثل رقعة الملعب التي نلعب عليها،، مهمتها حفظ القطع التي في الملعب، وبهذا نستطيع السؤال عن القطع الموجودة وأماكنها في الملعب. ونستطيع أيضا معرفة ماذا يوجد في أي نقطة من الملعب. كما أنها تضع أطوال الملعب الأساسية.

6- TetrisManager وهذه الفئة مسؤولة عن التحكم في القطع على الرقعة، هذه الفئة مسؤولة عن تجهيز القطع، إرسال القطع قطعة قطعة،، تحريك القطع إلى أسفل، واستقبال الإشارات اللازمة لتحريك القطعة المنشودة إلى اليمين أو اليسار. ومسؤولة أيضا عن ابتداء اللعبة وانتهائها.

7- TetrisShapeListener وهذه فئة مساعدة بسيطة تمكن مستقبلي الأحداث من معرفة ما يدور في المحرك الذي في البنود السابقة. هذه الفئة ستسقبل خبرا أن قطعة معينة قد تحركت مثلا!

8- TetrisException وهذه تبين وقوع خطأ ما ، مثلا يرمى هذا الخطأ إذا تحركت القطعة إلى خارج الملعب!

الحزمة hussam.tetris.gui وتحوي الواجهة الرسومية:

1- TetrisPanel عبارة عن JPanel وهو البرنامج الرئيسي، يستقبل الخيارات من المستخدم ويحولها إلى TetrisManager التي في الأعلى. وطبعا تستخدم TetrisScape لرسم الملعب والقطع.

2- TetrisApplet عبارة عن JApplet ووظيفته جعل البرنامج يعمل على المتصفح.

تحتاج إلى جافا 5، حملها من صفحة صن. www.java.com إذا لم يكن عندك بالأساس.

حمل بالضبط JRE 1.5 وحجمه تقريبا 15 ميجا، وهذا يعتبر مشغل برامج الجافا.

آسف على الإطالة، أرجو التصويت إذا قرأت الشفرة!

هذا هو البرنامج والشفرة:

Tetris.zip

HussamTetrisVersion1Source.zip

تم تعديل هذه المشاركة بواسطة أبومازن في 20 ديسمبر 2005 في 05:52

#2

بما انها على java 5 فلا تتوقع ردود كثيرة :( و انا من اولهم

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#3

سوف اصوت على " الشفرة ليست مفهومة." لانها على جافا 5 فهي ليست مفهومة بالنسبة لي :(

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#4

قبل التصويت

و بعد القرائة السريعة ،

1- فيه اصناف و اشياء اول مره اشوفها

مثل : enum، synchronized، Cloneable

ثانيا

	public Lego(TetrisScape s,List<? extends TetrisShape> parts){
  super(s, new Point(0,0));
  this.parts=new Vector<TetrisShape>(parts);
	}

List<? extends TetrisShape> parts

فهمت من هذه الجمله بأن

parts :عبارة عن قائمة من "أي شيء" موروث من الصنف TetrisShape.

هل فهمي صحيح ؟

11_03_06_12_48_57_1142110137Image(_66).jpg

#5

أطلب من هذا التصويت مراجعة الشفرة من خبراء البرمجة بشكل عام، وليس بالضرورة أن تعرف لغة جافا، يعني لو كنت مبرمج سي شارب، أو ديلفي أو VB، أيا كنت، ليس المطلوب أن ترى البرنامج يعمل، كل ما في الأمر أن تحاول قراءة الشفرة بشكل عام، هل تصميم الشفرة مفهوم؟ حتى لو لم تعرف عمل أمر معين مثل enum أو أي شيء آخر،، كل ما في الأمر أن تحاول أن تنظر إلى تصميم الشفرة بشكل عام ولا يهم أن تفهم جافا عامة، أو جافا 5 بالأخص. خبرتك البرمجية تكفي.

سؤال ALT، انظر إلى هذا الشرح البسيط، أقترح عليك البحث في هذا المنتدى أو منتدى C# بالكلمة Generics، وسوف تجد مواضيعا تعالج هذا الموضوع.

ملاحظة التصويت ليس له علاقة بفهم هذا الموضوع بالذات، ولكنه فقط تصويت لدرجة تنظيم الشفرة فقط.

هذا يعني أن لدينا قائمة تحوي قطع تترس،، القائمة قد تحوي مربعات وأشكال مختلفة وأعمدة وغيرها.
List<TetrisShape> shapes=new Vector<TetrisShape>();
shapes.add(new Bar(scape));
shapes.add(new Box(scape));
shapes.add(new TShape(scape));
لاحظ أننا نستطيع إضافة أي TetrisShape.
shapse.add(new Object()); // Error, because object is not TetrisShape

هذه تعني أن هذه القائمة تحوي فقط مربعات:
List<Box> boxes=new Vector<Box>;
boxes.add(new Box(scape));
boxes.add(new Bar(scape));//error 
boxes.add(new String());//error because this cannot except String

هذه تعني أن هذه القائمة تحوي شيئا خاصا لكننا بصراحة لا نعرفه، قد تكون قائمة مربعات أو قائمة كلمات، لا ندري:

List<?> someList = new Vector<Box>();
someList.add(new String()); //Error because this list can be list of Rectangle
someList.add(new Box(scape)); //Error because we dont know what this list is, it can be a list of Bar!
someList=new Vector<TetrisShape>();
someList.add(new Bar(scape));//Error we dont know
//notice that someList is a List of something!

هذا شيء آخر أيضا:

List<? extends TetrisShape> shapes = new Vector<Bar>();
shapes = new Vector<Box>();
shapes.add(new Bar(scape)); //Error, because this can be a list of Box
TetrisShape s = shapes.get(0); //correct because this is a list of something that extends TetrisShape.

أف... يفترض أن نشرح هذا في موضوع مستقل!!

الشرح قد يطول!.. ولا أعتقد أن هذا مكانه في هذا الموضوع.

للإجابة المباشرة:

public Lego(TetrisScape s,List<? extends TetrisShape> parts){
 super(s, new Point(0,0));
 this.parts=new Vector<TetrisShape>(parts);
}

List<? extends TetrisShape> parts; //هذه تعني أن هذه القائمة قد تكون قائمة من مربعات أو قائمة أعمدة أو قائمة TetrisShape بشكل عام. المهم أنها قائمة من شيء يرث من TetrisShape. 
List <TetrisShape> parts; //تعني أن هذه القائمة تحوي TetrisShape وأي شيء يرث منها.

تم تعديل هذه المشاركة بواسطة أبومازن في 21 ديسمبر 2005 في 21:47

#6

تستطيع وضعها ك Applet في صفحتك: أظنك تستطيع ذلك بهذه الشفرة:

<applet  CODE = hussam.tetris.TetrisApplet.class JAVA_CODEBASE = "Tools/Games/" ARCHIVE = "Tetris.Jar" WIDTH = "100" HEIGHT = "250" ALT = "There should be an applet here, your browser does not support Java!"></xmp>
    <PARAM NAME = CODE VALUE = hussam.tetris.TetrisApplet.class >
    <PARAM NAME = CODEBASE VALUE = "yoursubforlder/" >
    <PARAM NAME = ARCHIVE VALUE = "Tetris.Jar" >
    <param name="type" value="application/x-java-applet;version=1.5">
    <param name="scriptable" value="false">


</applet>

والله أعلم... استخدم HTML Converter ليقوم بما يلزم!

بالتوفيق!

تم تعديل هذه المشاركة بواسطة أبومازن في 21 ديسمبر 2005 في 22:02

#7

لم انتبه لهذا الموضوع الا اليوم .

للاسف ما عندي مشغل برامج الجافا .. : (

لكن انصدمت لما عرفت هذا الموضوع ... لاني كنت متوقع الموضوع صعب .. بل صعب جدا .

ابو مازن

هناك تترس الالوان ..اذا تعرفها ..

اعتقد برمجتها اسهل من لعبتك هذه ..

... ماهي الفكرة الاساسية لهذه اللعبة .. او اي لعبة من عائلة tetris... .(اقصد فكرتها البرمجية .. التي تعتبر لب اللعبة ) ,

وايضا سؤال جانبي .... ليش ما تستخدم opengl مع الجافا ... العاب الجوالات الان اغلبها ثري دي .. وسوقها ماشي ..

http://www.google.com.sa/search?hl=ar&q=opengl+java&meta=

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

أخي أبو مازن،

أثناء اللعب بهذه اللعبة يحدث أمر غريب بشكل مفاجئ ودون سبب، هو أن برنامج اللعبة يغلق لوحده أثناء اللعب ومن دون أسباب واضحة

حاولت معرفة السبب عن طريق إعادة تشغيل اللعبة أكثر من مرة، ولكنها في لحظة غير محددة أثناء اللعب تنطفئ، وتنشئ ملف error log كالملف المرفق، بجانب ملف اللعبة.

إن شاء الله سوف أضع رأي المتواضع على البرنامج قريباً عندما يتوفر لدي بعض الوقت.

hs_err_pid2896.log.txt

تم تعديل هذه المشاركة بواسطة MMSs في 26 ديسمبر 2005 في 02:35

#9

أخي MMSs،، بحثت عن المشكلة ووجدت أنه خطأ خاص وغريب يظهر في JRE 1.5، ربما إعادة تثبيته يكون الحل،، إليك البحث في google المشكلة موجودة عند البعض:

http://www.google.com.sa/search?q=An+unexp...fficial&safe=on

------

أخي الشمري:

يوجد أنواع من تترس كثيرة،، هذه أصلها روسي والله أعلم،، أما Tetris الألوان فربما عرفتها،، عموما أعتقد أن شرح الشفرة في الأعلى مفيد جدا. كيف ترى الشرح؟ هل حاولت قراءة الشفرة؟ أم تريد شرحا أكثر؟

بالنسبة لتغيير نوع اللعبة وقلبها إلى Tetris الألوان ربما تكون سهلة جدا، وترتكز على تغيير وظيفة الفئة TetrisManager وهو المسؤول عن منطق اللعبة.

بالنسبة لاستخدام openGL فلا أدري إن كان يستدعي برنامجي ذلك،، بالإضافة أني لم أتعلم أي من محركات الرسوم. ربما في المستقبل!

بالمناسبة عندك أكثر من مشاركة تقول أنه ليس عندك JRE، يا أخي حملها من هذه الصفحة www.java.com، كلها 15 ميجا!!

بالتوفيق!

#10

UP

فقط لاخبركم ان اللعبة صارت هنا :)

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#11

تستطيع أن تجرب اللعبة على المتصفح بالضغط هنا:

http://faculty.kfupm.edu.sa/MISAC/hussam/MyTetris.htm

إذا لم تعمل اللعبة عندك،، هذا يعني أنك تحتاج إلى JRE،، حمله من هنا:

www.java.com

هذا الموضوع مغلق.

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