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

هدية العيد لعبة Plane FIghter

بدأه Final Heaven في 21 أكتوبر 2006 · 41 رد · 9,852 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

أولا أود شكرك على إهتمامك، و أتمنى عليك زيادة إنتقاداتك

ثانياً، أتمنى عليك توضيح فكرتك كي أعمل عليها قبل أن تضع تعديلاتك (كي أتمكن من فهمها بشكل أكبر)

اقتباس
- همممم يبدو أنك لا تستطيع أن تجعل الأعداء يتزايدون. (BadGuys عبارة عن فئة مركبة.)

أتقصد زيادة عدد BadGuys الذين يظهرون في نفس الوقت (أزيد كلاس آخر من هذه الفئة)

اقتباس
2- كأني أرى أنك تستخدم System.gc وكأنك مبرمج سي ++ سابق! (أقصد من الموضوع أنه لا داعي لذلك.)

ما تقوله صحيح، و لكن لم أفهم إنني أقوم بإنشاء Object جديد من كل طلقة أو صاروخ لذا فهناك عدد كبير من Threads/Objects

ألا أحتاج إلى تحرير الذاكرة منها !

اقتباس
- كما ذكر Developer فئاتك غير متناسقة. كل الفئات عبارة عن Threads وكأن الطائرة والأعداء والصواريخ كلها Threads.

وهذا تصميم ركيك قليلا. فهذه الأشياء عبارة عن أشكال متحركة، وعليك تصميمها كأنها أشكال متصفة بالحركية عموما.

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

اقتباس
- في كل هذه الفئات، تعيد كتابة الشفرة لأن التصميم غير شيئي التوجه.

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

اقتباس
- استخدامك لعملية Global Variables أو المتغيرات العامة تذكرني بالبرمجة في Basic!

أعتمد على Global Variables كثيراً خاصة في سي++، و في مادة Graphics In C++ Using OpenGL

من Assignments التي قمنا بها حتى الآن:

Paint سلمت في المحاضرة الثانية لهذه المادة، Galaxy، Snake، Bouncing Balls، 3D Meshing Sphere، و أخيرا

Moving 3D Robot and a Barn, All With Meshing and Hidden Surface Removal

و الحمد لله سلّمت كلها بنجاح يرافقها صداع في الرأس :wacko:

و لم نستخدم Threads أبدا في هذا كله كنا نستخدم Timer كلما إحتجنا إلى تحريك شيئين في نفس الوقت و لكن إستخدمت فقط في Galaxy،

لذا فمفهوم Thread و الطريقة المثلى لإستخدامه تحتاج إلى تصميم عدد من البرامج التي تحتاجها و هذه اللعبة أحدها، فهذه إحدى محاولاتي

لإيجاد الطريقة الأمثل للعمل ب Threads بحسب طبيعة البرنامج، أما في هذه المادة

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

اقتباس
- كلما صنعت صاروخا جديدا أعدت قراءة الصورة من الملف.... ألا تعتقد أن هذه العملية بطيئة لأشكال يعاد استخدامها كثيرا؟

أستخدم GlobalVariable فيه صورة الصاروخ و أستخدمها في كل مرة

لقد قمت بعدّة تعديلات أخرى على العبة، الإصدار 1.2.01:

- أزلت الكلاس الخاص ب GarbageCollector و إستغنيت عنه ب Timer

- قمت بإضافة Timer لإعادة رسم الخلفية، للحؤول دون ضياعها في بعض الأحيان

- صورة الصاروخ تقرأ مرة واحدة، و ليس في كل مرة.

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

إقلاع للعبة، فقمت بالإستغناء عن ما كان سابقا، بإغلاق اللعبة و من ثمّ إعادة تشغيلها مجددا و لكن هناك قيد لما قمت به و هو عدم

تغيير إسم Jar File الخاص باللعبة

الملف التشغيلي للعبة:

Plane_Fighter_v1.2.01_Executable_Jar.rar

الكود:

Plane_Fighter_v1.2.01_Source_Code.rar

تم تعديل هذه المشاركة بواسطة Final Heaven في 21 يناير 2007 في 10:30

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#27

بالنسبة إلى الفئة BadGuys كنت أقصد أنه من الأفضل أن تتعامل معها كما تعاملت مع الفئة Rocket، فإذا أردت عدوا جديدا ما عليك إلا أن تنادي على new BadGuy.

بهذا أنت لست مضطرا لكتابة فئة أخرى. (كلما وجدت نفسك ستعيد كتابة شفرة معينة، في الغالب اعلم أن تصميمك يحتاج إلى تطوير.)

بالنسبة إلى gc فمحرك الجافا هو الذي سيناديه، ولست مضطرا إلى تحرير الذاكرة بنفسك. هذه من أساسيات الجافا. إذا صنعت صواريخا كثيرة، فلا تحزن، إذا كانت الصواريخ في الذاكرة فاعلم أنها ستذهب إلى سلة المهملات بإذن الله.

بالنسبة للشفرة والتصميم. انظر إلى أغلب الفئات التي قمت بتصميمها، ألا تلاحظ أنك أعدت كتابة getX و getY في كل فئة. وأشياء أخرى. كان من المفترض أن تصنع فئة اسمها مثلا Sprite أو MyGameObject والتي من خلالها تجعل كل فئاتك ترث منها:

Rocket extends Sprite و BadGuy extends Sprite. والفئات التي تحتاج إلى تحريك أو إلى Thread اعمل هذا في التنفيذ نفسه ولا أن تجعلهم يرثون من Thread. لأن في هذا تصميم ركيك.

استخدامك ل Global Variables يجعل من شفرتك غير شيئية التوجه. فأنت بذلك تجعل هذه المتغيرات عامة لدرجة أن أي جزء من الشفرة يستطيع تغييرها. (كلما وجدت نفسك واضعا متغيرات static كثيرة فهذه إشارة أنك متجها للبرمجة العادية غير شيئية التوجه.

--------------

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

بالمناسبة،، ربما تحب الاطلاع على شفرة لعبة Tetris الموجودة في توقيعي!

بالتوفيق!

#28
اقتباس
بالنسبة إلى الفئة BadGuys كنت أقصد أنه من الأفضل أن تتعامل معها كما تعاملت مع الفئة Rocket، فإذا أردت عدوا جديدا ما عليك

إلا أن تنادي على new BadGuy.

بهذا أنت لست مضطرا لكتابة فئة أخرى. (كلما وجدت نفسك ستعيد كتابة شفرة معينة، في الغالب اعلم أن تصميمك يحتاج إلى تطوير.)

عفوا و لكن ما تفضلت به هو مقصدي من كلامي السابق

اقتباس
بالنسبة إلى gc فمحرك الجافا هو الذي سيناديه، ولست مضطرا إلى تحرير الذاكرة بنفسك. هذه من أساسيات الجافا.

إذا صنعت صواريخا كثيرة، فلا تحزن، إذا كانت الصواريخ في الذاكرة فاعلم أنها ستذهب إلى سلة المهملات بإذن الله.

حسناً، قمت بالإستغناء عنها

اقتباس
بالنسبة للشفرة والتصميم. انظر إلى أغلب الفئات التي قمت بتصميمها، ألا تلاحظ أنك أعدت كتابة getX و getY في كل فئة.

وأشياء أخرى. كان من المفترض أن تصنع فئة اسمها مثلا Sprite أو MyGameObject والتي من خلالها تجعل كل فئاتك ترث منها:

Rocket extends Sprite و BadGuy extends Sprite. والفئات التي تحتاج إلى تحريك أو إلى

Thread اعمل هذا في التنفيذ نفسه ولا أن تجعلهم يرثون من Thread. لأن في هذا تصميم ركيك.

جميل جداً، فعلا الخبرة مهمّة جداً

اقتباس
استخدامك ل Global Variables يجعل من شفرتك غير شيئية التوجه. فأنت بذلك تجعل هذه المتغيرات عامة لدرجة أن أي

جزء من الشفرة يستطيع تغييرها. (كلما وجدت نفسك واضعا متغيرات static كثيرة فهذه إشارة أنك متجها للبرمجة العادية غير شيئية التوجه.

و لكن ما الحل دون نسخ المتغيرات

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

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

أكون شاكرا لك، و جزاك الله خيراً على ذلك

إليك التطوير الذي قمت به:

- إعتمدت ما تفضلت به عن sprite ب كلاس سميتها MethodsService و Threads قمت بإستخدام Runnable

- أزلت أي نداء ل GarbageCollector

- أعدت نظام لإعادة اللعبة القديم، لأن مشكلة إختفاء لون الخلفية حلّت ، كما و قمت بإزالة Timer الخاص بإعادة رسم الخلفة لعدم الحاجة

لها بعد الآن، و ظنى أن المشكلة كانت في وجود Threads لم تنطفئ عند إعادة اللعب، و حلت بعد عمل shutdown لها.

- أضفت التوقيت و التاريخ على ScoreFrame .

البرنامج بنسخته v1.3:

Plane_Fighter_v1.3_Executable_Jar.rar

الكود:

Plane_Fighter_v1.3_Source_Code.rar

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#29

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

فهمت منك أنك أحببت أن ترى التغيير الذي أجريته.

إليك هذا التصميم البسيط.

public interface Sprite extends Comparable<Sprite>{

	public void addSpriteListener(SpriteListener sl);
	public void removeSpriteListener(SpriteListener sl);

	public int getLevel();   //رسم الصورة في أي طبقة. مثلا ارسم العدو بعدها ارسم الانفجار. نستخدم هذا الرقم للدلالة إلى هذا.

	public void setX(int x);
	public void setY(int x);
	public void setDimension(Dimension d);
	public void setRectangle(Rectangle r);
	public void setImage(Image g);
	public void setLocation(Point p);

	public void finish(); //المتحرك أصبح لا يعمل، والرجاء حذفه من الرقعة.. مثلا العدو تدمر أو الصاروخ تدمر

	public int getX();
	public int getY();
	public Rectangle getRectangle();
	public Dimension getDimension();
	public Image getImage();
	public Point getLocation();
	public void draw(Graphics2D g2); // ارسم الشكل أو المتحرك باستخدام هذه اللوحة
	public void crash(Sprite s);// اصطدم هذا الشيء مع متحرك آخر،، الرجاء عمل ما يلزم
	public void play(); // شغل هذا المتحرك... سينادي على هذا الأمر إذا أضيف الشكل في الرقعة.
	public boolean isFinished();
}

هذا هو التصميم الأساس لأي شيء في رقعة الملعب.

AbstractSprite عبارة عن فئة جاهزة للتطوير لعمل ما يلزم من أشكال. وهي ترث من Sprite

الفئات Rocket ControlledSprite BadGuy Explosion Weapon وغيرها جميعها ترث من AbstractSprite.

الواجهة Arena تمثل رقعة الملعب، فهي مسؤولة عن احتواء جميع الأشكال في اللعبة.

GameScreen فئة مسؤولة عن رسم كل شيء إذا تغير أي شيء في Arena.

الواجهة SpriteListener تمثل أي شيء يريد أن يعرف كل تغيير يطرأ على Sprite معين.

مثلا، Arena أو الفئة التنفيذية HussamArena تريد أن تعرف أي تغيير يحصل في أي Sprite أو شكل معين.

ArenaListener واجهة لكل من يريد أن يعرف أي تغيير حصل في الرقعة.

مثلا GameScreen يريد أن يعرف أي تغيير من Arena فإذا حصل تغيير أعاد رسم الرقعة.

CrashManager فئة مسؤولة عن أي تصادم،، فهي تحاول الاستماع لتحرك أي شيء في الرقعة، فإذا تصادم اثنان فإنها تنادي على crash لكل منهما.

Controller و DefaultController فئة مسؤولة عن التحكم بـ ControlledSprite.

GameManager فئة مسؤولة عن جريان اللعبة.. فهي تقرأ ما في الملعب وتضيف الأعداء وترمي بالأسلحة التي تساعد اللاعب.

SpriteFactory عبارة عن مصنع الأشكال. فإذا أراد GameManager عدوا فسينادي على المصنع! وإذا أراد انفجارا فيفعل هذا أيضا.

ImageLoader فئة مسؤولة عن جميع الصور فهي تقرأهم مرة واحدة وتحفظهم في الذاكرة لإعادة الاستخدام!

----------------------------------------

فوائد من هذا التصميم:

1- سرعة تنفيذ أي شكل متحرك ووضع قوانينه في اللعبة.. مثلا أضفت الفئة Weapon التي وظيفتها زيادة عدد صواريخ اللاعب إذا التقطها!

2- نستطيع أن نجعل رسم الشكل في حركة،، مثلا نجعل العدو تتغير صورته كأنه يتحرك، (طبعا ليس عندي صور متحركة كي أريك هذا) لكننا عموما نستطيع الاستفادة من تصميم SpriteListener فإذا تغير شكل المتحرك Sprite فإننا ننادي على imageChanged مثلا. ربما أضع مثالا مستقبلا.

3- الرسم في مكان واحد

4- ليس عندنا GlobalVariables لكن بياناتنا سهلة الوصول إليها بتنظيم معين واضح.

5- لا نحتاج إلى الاحتفاظ ب Graphics فنحن نستخدم Graphics التي في GameScreen فقط وهي الذي يستدعي لنا ويرسم كل شيء.

5- إذا لعبت كثيرا ووجدت عدد صواريخك في ازدياد وأصبح عندك عشرات الصواريخ،، لاحظ أن gc يعمل وينظف الذاكرة عنك.

6- لاحظ أن بهذا التصميم أصبحت البرمجة سهلة، فليس عندي سلسلة طويلة من الجمل الشرطية لرسم الأشكال، فكل فئة متخصصة في جزء معين.

---------------

إضافات على اللعبة...

1- الصواريخ أسرع

2- الانفجارات لها ألوان مختلفة.

3- الحركة مفتوحة.

4- لا تهمني شكل اللعبة بقدر ما تهمني الشفرة.

5- تستطيع تطوير الشفرة بما يناسبك.. فقد كتبت منطق اللعبة سريعا،، وتستطيع أن تجعلها تشبه لعبتك بسهولة كما أعتقد.

آسف للإطالة.

7- لاحظ معي أن أجزاء الشفرة مستقلة عن بعضها باستخدام Listeners مختلفة.

لا أدري لكن حدث خطأ في تحميل الملفات.

نحاول مرة أخرى.

Planes_Update.zip

Planes_Update.zip

#30

شكراً لك، فعلا رائع ما قمت به، إن شاء الله سأقوم بدراستها، و أضع أية إستفسارات إن شاء الله

جزاك الله خيراً و جعله في ميزان حسناتك

و لا تقلق على أية إطالة لا أمل من المعرفة

و أودّ السؤال كيف أتمكن من التفكير بالطريقة التي تحدثت عنها و وضعتها في اللعبة،

هل DesignPatterns أساس لكل هذا؟

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#31

(مشاركة فارغة)

تم تعديل هذه المشاركة بواسطة Final Heaven في 23 يناير 2007 في 17:03

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#32
Final Heaven كتب:

هل DesignPatterns أساس لكل هذا؟

اعتقد Object Oriented approach وفهمه بشكل صحيح هو السبيل للتفكير بطريقة استاذي ابو مازن

آسف على التطفل ..

#33

هممممم

السؤال صعب... آسف!

بالتوفيق!

#34

كلما صنعت برنامجا جديدا ستتعلم من أخطائك... وكلما قرأت أكثر كلما أسرعت في تطوير مهاراتك..

ولا تظن أني هنا معلما.... بيني وبينك... لقد تعلمت من برنامجك أشياء أيضا...

إذا انتهيت من تطوير هذا البرنامج أو اللعبة.. فابدأ في مشروع آخر... وثق تماما.. أنك إذا انتهيت من أي مشروع فستحس في نفسك أنك تعلمت أكثر بكثير من الذي أخذته في محاضرة OpenGL أو غيره.

وفي النهاية.... سأترقب اسمك في المنتدى لأرى مشاريع تقوم عليها أخرى..!!

بالتوفيق......

#35

هذه نسخة من التطوير الذي أضفته في اللعبة.

تستطيع أن تجرب اللعبة على الشبكة في صفحتي.

لعبة الصواريخ

يوجد إصلاح بسيط في اللعبة....عن النسخة البسيطة السابقة:

زوجتي زعلت مني عندما وضعت اسمي قبل اسم Final Heaven تحت الصواريخ فقلبت الاسمين لأن Final Heaven هو مصمم اللعبة.

كما يمكنكم تحميل اللعبة على جهازكم ..

اللعبة تحتاج إلى جافا 5.

،،،،،

اللعبة ليست لعبة كاملة،، فإذا تحطمت الطائرة تستطيع أن تبدأ بطائرة جديدة... والأسلحة غير نهائية،، فكلما دمرت 10 من الأعداء نزل لك صاروخا جديدا... استمر في اللعبة وقد تحصل على الكثير من الصواريخ..... ثم ابدأ في التفكير...... ماذا لو gc لم يعمل !!!

أضف إلى ذلك أن نسختي ليس فيها حساب نقاط أو صفحة ترحيبية كما هو الحال في تصميم Final Heaven.

حبذا لو طور Final Heaven على شفرتي لو رآها مناسبة.

أستطيع القول أنها إصدار تجريبي فقط... ولا أعتقد أني سأطوره!

البرنامج مفيد لتعرف حجم سرعة المعالجة لدى جهازك... عندما يتزايد الأعداء والصواريخ تصبح اللعبة بطيئة جدا...

بالتوفيق في معرفة عدد الصواريخ التي يمكن أن يتحملها البرنامج في جهازك!!

#36

إن شاء الله سأكمل العمل باللعبة و لكن سأنقطع لفترة بسبب إمتحانات نهاية Semester و تسليم Projects

اقتباس
كلما صنعت برنامجا جديدا ستتعلم من أخطائك... وكلما قرأت أكثر كلما أسرعت في تطوير مهاراتك..

ولا تظن أني هنا معلما.... بيني وبينك... لقد تعلمت من برنامجك أشياء أيضا...

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

في هذا العالم، و جعلت البرمجة أكثر إمتاعاً (التحدي لمعرفة شئ جديد)، لا يخطر على بالك كم تحمست

اقتباس
إذا انتهيت من تطوير هذا البرنامج أو اللعبة.. فابدأ في مشروع آخر... وثق تماما.. أنك إذا انتهيت من أي مشروع فستحس في

نفسك أنك تعلمت أكثر بكثير من الذي أخذته في محاضرة OpenGL أو غيره.

نصيحة ستكون نصب عيني بإذن الله

اقتباس
زوجتي زعلت مني عندما وضعت اسمي قبل اسم Final Heaven تحت الصواريخ فقلبت الاسمين لأن Final Heaven

هو مصمم اللعبة. كما يمكنكم تحميل اللعبة على جهازكم ..

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

اقتباس
حبذا لو طور Final Heaven على شفرتي لو رآها مناسبة.

إن شاء الله حاماً أنتهي مما أنا بصدده (إمتحانات :( )

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#37

السلام عليكم و رحمة الله و بركاته

الحمد لله لقد إنتهيت من مشاغلي و الحمد لله

و بدأت اليوم بالعمل على اللعبة و أقوم بالتجارب على الكود و هنا أمر حيّيرني

و هو أني عندما عدلت كود لكلاس إسمها AbstractSprite

و هو على الشكل التالي


for(int spriteIndex=0; spriteIndex < listeners.size(); spriteIndex++){
listeners.get(spriteIndex).spriteMoved(this);
}
/*for (SpriteListener sl : new ArrayList<SpriteListener>(listeners)) {
sl.spriteMoved(this);
}*/
}

protected void fireSizeChanged() {
for(int spriteIndex=0; spriteIndex < listeners.size(); spriteIndex++){
listeners.get(spriteIndex).spriteSizeChanged(this);
}
/*for (SpriteListener sl : new ArrayList<SpriteListener>(listeners)) {
sl.spriteSizeChanged(this);
}*/
}

protected void fireImageChanged() {
for(int spriteIndex=0; spriteIndex < listeners.size(); spriteIndex++){
listeners.get(spriteIndex).imageChanged(this);
}
/*for (SpriteListener sl : new ArrayList<SpriteListener>(listeners)) {
sl.imageChanged(this);
}*/
}

protected void fireFinished() {
for(int spriteIndex=0; spriteIndex < listeners.size(); spriteIndex++){
listeners.get(spriteIndex).spriteFinished(this);
}
/*for (SpriteListener sl : new ArrayList<SpriteListener>(listeners)) {
sl.spriteFinished(this);
}*/
}
protected void firePositionChanged() {

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#38

لدي سؤال آخر لماذا هذا الكود لا يعمل و يضع Exception أما الثاني فيعمل


for (SpriteListener sl : listeners) {
sl.spriteMoved(this);
}
ArrayList<SpriteListener>	listeners	= new ArrayList<SpriteListener>();

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#39

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

فقمت بتغيير الكود لعدم فهمي لعمله بشكل جيد فكتبت كلاس جديد و هي LinkList لتعمل مثل ArrayList

و لكن خاصة ب SpriteListener و في كل مرة كنت أريد إستخدام أحد methods التي في الأعلى

كنت أنادي method تنسخ محتوى LinkList و تضعه في Array و ترسله إلى for loop

فعمل الكود بشكل جيد مثل ما قبله، و لكن عندما حاولت المرور على LinkList الأصلية و لا أقوم بنسخ

مافيها في Array أو ما شابه عاد و حدث أنه لا يظهر لي سوى ثلاثة أشكال شبحية فقط

فلم أفهم معنى ذلك أن الكود يعمل بشكل سليم عند نسخ listeners و لا يعمل عند إستخدام الأصلية

عدا عن منادات methods الموجودين في spritelistener دون عمل implement لهم

فبصراحة إزاداد الضباب حول الموضوع و تلبدت سمائه بغيوم سوداء نوعاً ما

فما الحل أو مفهوم هذا ؟؟ !!

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#40

نظرا لضيق الوقت لن أقدر على تطوير اللعبة حاليا لإستخدام الأسلوب الجديد بالأخ حسام

و هذا آخر تحسين أقوم به على اللعبة و قمت بزيادة السرعة فيها:

ملف التشغيل:

Plane_Fighter_v1.3_Executable_Jar.rar

الكود المصدري:

Plane_Fighter_v1.3_Source_Code.rar

و سأعمل على تطويرها لاحقا بإذن الله و لكن ستكون شيئا جديدا آخر بإذن الله

حالما أطور مقدرتي على كتابة أكواد ذات مفهوم Object Oriented

و الله وليّ التوفيق

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#41

الله يعطيك العافية

#42

مشكوور اخوي... واللعبة في قمة الروعة ما شاء اله عليك:)

ننتظر ألعابك الاخرى

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