أقوم بمحاولة لبرمجة هذه اللعبة Tetris ( و هى عبارة عن تساقط بلوكات لها الوان مختلفة و كل ما تكون صف من البلوكات يتمسح ) .
-------------------------------------------------------------------------
ستجد فى ال code 3 pakage
1- TetrisView >>>>>>> به classes 3 الخاصو بمنظر اللعبة و به class TetrisCell الذى به المشكلة
2- TetrisModel >>>>>>> به 5 classes الخاصة بمحتويات اللعبة .
3-Tetris Contoler >>>>>>>> به 2 classes الخاصة بالتحكم فى اللعبة
-------------------------------------------------------
المشكلة بالتحديد فى ال class TetrisCell به method moveBlockVerticle() فى ال actionPerformed
ببساطة ما يحدث فى البداية أن الشكل cube يسقط حتى يصل للأرض و الشكل هذا مكون من صفين و عمودين .. و عند وصوله للأرض يبدأ cube آخر فى السقوط ، يجب أن يتوقف عن حركته عندما يكون تحته مباشرة شكل آخر
و لكن ما يحدث هو أنه بيستقر على أول صف فى الشكل الثابت الذى كان قبله !!!
فى حين أنى كل مرة بعمل شرط بيقول : لو ال nextRow - 2 == blockData.getPoint().getX()
حيث أن ال nextRow هى اول صف يُرسم فيه المكعب و بما انه مكون من صفين بعمل فحص لو nextRow - 2 - نفترض ان ال nextRow = 12 يبقى إذن 12- 2 = 10 - مشغولة بشكل سابق لو حصل كده يبقى بنقوله متتحركش و استقر مكانك
رغم ذلك هو بيتحرك خطوة يعنى بيتسقر على اول صف فى الشكل اسابق !!!
if (tetrisBlockShapesEnum == tetrisBlockShapesEnum.CUBE_BLOCK && nextRow - 2 == blockData.getPoint().getX()
|| tetrisBlockShapesEnum == tetrisBlockShapesEnum.I_BOLCK && nextRow - 4 == blockData.getPoint().getX()) {
canDraw = false;
} else {
canDraw = true;
}الكود مرفق :
و أتمنى حد يساعدنى فيها عملت debugging كتير و مش عارف المشكلة فين .
اعمل run للمشروع و سترى المشكلة . شكراً مقدماً