俄罗斯方块屏幕中央有一个矩形容器,程序刚开始时是空的;当鼠标单击“开始”菜单时,矩形容器内从上向下随机出现俄罗斯方块的部件。通过键盘上的左右键分别左右移动部件(一个单位),向上键顺时针旋转90度。当部件到达容器底部或已停止的部件上时,停止;当容器的同一行被部件填满时,该行消失。其他行依次向下移动。
要求设计程序输出如下:
- 屏幕中央有一个矩形容器,选择“开始”菜单,俄罗斯方块的部件随机产生并在容器中从上向下下落。
- 有七种标准俄罗斯方块部件,并随着键盘上的左右键分别左右移动,随着键盘上的向上键分别顺时针旋转90度。
- 当部件到达容器底部或已停止的部件上时,停止;当同一行部件完整拼接上时,该行消失,其他行向下移动,在适 当位置显示当前累计分。
- 当部件总行数超过矩形容器高度时,提示“游戏失败”信息并停止。
-
七种标准俄罗斯方块部件的建立和存储: 每一种俄罗斯方块部件都进行拆分成一个个方块,选定一个方块作为中心点,该方块的存储坐标为(0,0),其余的方块以中心点为标准存储坐标,把这个部件的各个方块的坐标存储到一个自定义类Blocks中(Blocks类把各个坐标存储到Point对象中),再把所有7种部件的Blocks对象存储到Blocks数组中备用。
-
俄罗斯方块部件的控制: 首先用java.awt包下的画笔Graphics根据该俄罗斯方块部件的各个方块的Point对象画在面板上;对于部件的左右向下移动,设置鼠标监听器和键盘监听器,监听获取偏移量,使部件整体移动,在重新画在面板上,而对于部件的自动掉落用无限循环的线程执行不断画即可;对于部件的旋转,根据三角函数可以得出一个公式,部件经过90°旋转,坐标x标变为原来y坐标的负值(即-y),坐标y变为原来x坐标的x值,因此,旋转只需要根据公式改变该部件各个方块的坐标,再重新画在面板上即可。当然还要注意边界问题,旋转之前先检测是否越界,才决定能否旋转,不止是边界还有相邻的方块不能重叠,所有旋转前还需要检测是否和其他部件重叠再决定是否旋转。
-
俄罗斯方块的计分和结束: 保存以前的俄罗斯方块部件采用的二维数组存储。在面板对应的位置有部件存在则在二维数组对应的位置的值设为对应部件的编号,反之为0,每重画一次面板都会先访问这个二维数组再根据偏移量,画出这一次之前的所有方块部件和画这次的方块部件;主要一行都有方块则得分,即二维数组中只要有一(多)行都是非0值就得分并消除这一行(也可以多行),消除的方法是把数组的值整体移动到下一(多)行,再重画;结束就是二维数组只要有一列都是非0值则游戏结束,此时的得分就是你最终的分数。
-
俄罗斯方块的登录和荣誉榜 本项目运用到了轻量级数据库splite,玩家可以注册登录用户,不登陆就开始游戏的玩家默认为未知玩家;登录页面首先会检测当前的昵称是否有存在,要是存在当前昵称,则输入密码登录,反之注册;玩家进行游戏直到游戏结束的最终得分会根据你的当前用户然后把存到数据库中,然后用画笔画在荣誉榜上;荣誉榜会取数据库中的分数前四名进行展示;为了不出现多用户的冲突需要用到synchronized同步。
-
俄罗斯方块的下一个展示和游戏暂停与继续 游戏的下一个展示就是把下一个俄罗斯方块部件准备好再画再提示区;游戏的暂停就是让线程不做任何操作,继续就是恢复该项目的“游戏中”的状态。
2、俄罗斯方块的部件可以用鼠标控制也可以用键盘控制
鼠标控制:开始按钮上的四个按键
键盘控制:左键右键控制左右、下键控制向下、上键控制旋转



















