您好,欢迎访问三七文档
JAVA程序设计—项目实训演练!项目实战--俄罗斯方块主讲:贾宗维JAVA程序设计—项目实训演练!程序演示JAVA程序设计—项目实训演练!从什么地方入手涉及到几个对象(类)每个类有什么方法JAVA程序设计—项目实训演练!游戏的显示面板GamePanel类voiddisplay();//显示JAVA程序设计—项目实训演练!方块Shape类voidmoveLeft();//左移voidmoveRight();//右移voidmoveDown();//下移voidrotate();//旋转(变形)voiddrawMe();//显示自己能定时下移privateclassShapeDriverimplementsRunnable{@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubwhile(true){moveDown();listener.shapeMoveDown(Shape.this);try{Thread.sleep(1000);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}JAVA程序设计—项目实训演练!图形工厂ShapeFactory类(图形工厂)ShapegetShape();//生产出不同形状的图形JAVA程序设计—项目实训演练!GroundGround类voidaccept(Shape);//接受图形,把图形变成障碍物voiddrawMe();//显示JAVA程序设计—项目实训演练!类之间的关系Shape定时下落Controller处理按键事件处理逻辑GamePanel显示ShapeFactory图形工厂生产Ground触发按键事件根据不同的情况,向Shape,ShapeFactory,Ground或GamePanel发出不同的指令JAVA程序设计—项目实训演练!创建一个监听器接口图形定时下落,每下落一次后都需要重新显示图形移动和变形后,也需要重新显示它又不能直接操控GamePanel,怎么办呢?JAVA程序设计—项目实训演练!Controller通过事件监听建立联系Shape定时下落GamePanelShapeListener处理按键事件触发按键事件重新显示事件源事件源下落后,触发事件shapeMovedDown状态改变需要重新显示JAVA程序设计—项目实训演练!ShapeListenerShapeListener:voidshapeMovedDown(Shape);JAVA程序设计—项目实训演练!基本概念:怎么表示图形,障碍物可以把显示区域想象成一个大大表格,一个格子可以代表一个障碍物,几个连在一起的格子可以组成一个图形。怎么区分格子呢(怎么表示这个格子呢)?用坐标,每个格子有它自己的坐标,左上角的那个格子的坐标是(0,0)JAVA程序设计—项目实训演练!基本概念:怎么表示图形,障碍物(0,0)(1,0)(0,1)(2,2)(3,2)(3,3)(4,3)障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物y坐标x坐标012345678012345JAVA程序设计—项目实训演练!重要概念:怎么表示图形的状态可以用一个4×4的方阵表示,每一个图形都可以有多种状态。如下所示为什么用4×4的方阵表示?因为最宽的和最高的图形就是4个宽或4个高(杠子)JAVA程序设计—项目实训演练!图形变形变形就是显示下一个状态JAVA程序设计—项目实训演练!表示图形的状态1000111000000000用一个数组表示,左图用如下数组表示{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0}JAVA程序设计—项目实训演练!图形的多种状态1000111000000000110010001000000011100010000000000100010011000000一个图形可以有多种状态,左边的图形可以这样表示:{{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0}}JAVA程序设计—项目实训演练!图形的移动图形类里面要保存自己的位置信息,用left表示图形到左边界的距离,top表示图形到上边界的距离图形移动就是改变left和top的值JAVA程序设计—项目实训演练!基本概念:图形绝对坐标和相对坐标(0,0)(1,0)(0,1)(2,2)(0,0)(3,2)(1,0)(3,3)(1,1)(4,3)(2,1)障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物障碍物y坐标x坐标(0,0)0123456789012345lefttopJAVA程序设计—项目实训演练!图形的移动(2,2)(3,2)(2,3)y坐标x坐标0123401234向上移动top减1向左移动left减1向下移动top加1向右移动left加1topleftJAVA程序设计—项目实训演练!画图形把组成图形的格子画出来:画方阵中标志为1的格子,标志为0的不画。图形中的格子的在显示区域中的位置为:x坐标:left+格子的x相对坐标y坐标:top+格子的y相对坐标(相对坐标是格子在方阵中的坐标)JAVA程序设计—项目实训演练!格子的宽度和高度像素坐标(x,y)矩形(格子)的宽度CELL_WIDTH矩形(格子)的高度CELL_HEIGHTJAVA程序设计—项目实训演练!格子坐标和像素坐标格子坐标(2,1)这个点的像素坐标为x坐标:left*一个格子的宽度y坐标:top*一个格子的高度left是这个格子距左边界的距离top是这个格子距上边界的距离JAVA程序设计—项目实训演练!图形的移动或变形按键以后,图形是否就一定能够移动或变形?不一定,如果下一步的动作会使图形超出边界或有的点与障碍物重叠,则不允许图形做这个动作。JAVA程序设计—项目实训演练!图形的移动或变形(0,0)(1,0)(0,1)(2,2)(3,2)(3,3)(4,3)障碍物障碍物障碍物障碍物障碍物障碍物障碍物y坐标x坐标(0,0)01234012345现在这个状态,图形只可以向左移动。因为向右图形就超出边界,向下就会与障碍物重叠,如果下一步的动作是向下,则这个图形应该是变成障碍物,而不是继续向下落。JAVA程序设计—项目实训演练!Controller通过事件监听建立联系(完善后)Shape定时下落GamePanel下落前,询问一下是否可以下落isShapeMoveDownable(处理完事件后需要重新显示)ShapeListener处理按键事件处理isShapeMoveDownable事件(问Ground,返回结果)触发按键事件重新显示事件源事件源事件源下落后,触发事件shapeMoveDown状态改变需要重新显示JAVA程序设计—项目实训演练!怎么存储和表示障碍物用一个和显示区域的格子相对应的二维数组保存障碍物的位置信息如果对应的位置是障碍物,则这个数组中相应的元素就为1,不是则为0JAVA程序设计—项目实训演练!怎么把图形变成障碍物把属于图形的格子对应的位置都变成障碍物JAVA程序设计—项目实训演练!判断时要注意是指图形的身体超出边界或与障碍物重叠,而不是表示这个图形的4×4的方阵,因为方阵中的点并不都是图形的身体JAVA程序设计—项目实训演练!消除满行这一行没有空白,则这一行就是满行满的那行上面所有的行整体下移一行就是消除这个满行JAVA程序设计—项目实训演练!判断游戏是否结束如果有的障碍物超出了上边界(容器满了),就是游戏结束(如果图形的初始位置为第一行,则用这个逻辑:第一行如果有障碍物,就是游戏结束)JAVA程序设计—项目实训演练!完善后的GroundGround类booleanisMoveable(Shape,action);//图形下一步的动作是否会被允许(边界,障碍物)voidaccept(Shape);//接受图形(把图形变成障碍物)voiddeleteFullLine();//扫描并删除满行booleanisFull();//是否还可以接受图形(是否满了)voiddrawMe();//显示自己的方法JAVA程序设计—项目实训演练!动手练一练1.给游戏添加各种形状的图形2.解决游戏时的画面闪烁问题
本文标题:Java俄罗斯方块
链接地址:https://www.777doc.com/doc-3403914 .html