俄罗斯方块的思路
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
俄罗斯方块思路
*俄罗斯方块是由三部分组成
*
* Cell类
*1 定义属性
*2 Cell构造方法
*3 重写toString
*4 get set访问属性
*5 格子的移动方法(包括下落,左移,右移)
*
* Tetromino类
* 1 创建四格方块
* 2 使用工厂方法,随机生成四个方块
* 3 创建子类T--J继承父类Tetromino
* 4 随机产生七种四格方块
* 5 四格方块的移动方法
* 6 重写toString
* 7 定义Cell的坐标位置,生成Tetris.的调用方法
* 8 旋转四格方块的内部类,并使用构造方法
* 9 声明旋转状态states 并赋值10000;
* 10 向右转 -1取得下个变换的数据状态 state[n]
* -2取得当前轴row and col
* -3 旋转以后的状态(row,col)+state[n]
* Tetris类
* 1 主方法main
* 2 定义属性 score,lines,wall.tetromino and nextOne
* 3 初始化行列和格子尺寸
* 4 创建窗体
* 5 设置窗体尺寸,并设置居中
* 6 创建面板Frame,并添加到窗体中
* 7 重写父类Jpanel方法,重写paint()修改原有绘制方法
* 8 背景图片
* 9 使用静态代码块加载静态的图片
* 10 画背景g.drawImage
* 11 画墙paintWall(g)
* 12 画墙 1- Cell[] line = wall[row]
* 2-如果没格子画框g.drawRect 有格子就贴图g.drawImage
* 13 添加启动方法action
* 14 调用启动方法 tetris.action();
* 15 平移坐标系 g.translate
* 16 画下落的方块方法 paintTetromino(g)
* 17 画下落的方块 1-如果没有正在下落的方块,结束
* 2-将每个格子的row,col换算成x,y然后贴图
* 3-cell.getrow|Col()*CELL_SIZE计算长度
* 4-g.drawImage(cell.getImage(),x-1,y-1,null)贴图
* 18 画下一个方块 paintNextOne(g);
* 19 画下一个方块 1-如果没有正在下落的方块,结束
* 2-将每个格子的row,col换算成x,y然后贴图
* 3-让cell的每一个格子向右移动10的位置,向左移动1的位置
* 20 处理键盘按下事件 KeyAdapter l = new KeyAdapter()
* 1 -public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_DOWN :
tetromino.softDrop();
21 绑定事件到当前面板
this.requestFocus();
this.addKeyListener(l)
22 向右移动的流程控制 1尝试先向右移动
2如果发现超出边界,就向左移动,修正回来
if(outOfBounds()||coincide()) 出界或者重合
23 向左移动的流程控制
同上
24 检查当前正在下落的方块是否出界了
1-迭代正在下落的方块,其中某一个格子列坐标出界,
就移回
2-Cell[] cells = tetromino.cells;//cells每一个格
3-Cell cell = cells[i];//cell某一个格
25 回到 键盘处理事件 增加移动功能moveLeftAction();
26 检查正在下落的方块和墙上的方块是否重叠
27 下落流程控制 1-如果能下落就下落一步
2-否则landIntoWall();//进墙
destoryLines();//销毁满的行
28 检查当前的方块是否能够下落,返回true能下落
29 回到 键盘处理事件增加下落功能 softDropAction();
30 进墙
31 销毁满的行
32 消除行 1-逐行查找
2-满了删除
33 检查当前行的每个格子,如果有null,就返回false,否则返回true
34 硬下落流程,下落到不能下落为止,快速下落
35 回到键盘处理事件 hardDropAction();
36 满格删行
37 加行
38 得分表
39 得分
40 画分数 paintScore(g)
41 画分数 1-字体颜色
2-字体大小
3-基线位置x,y
4-颜色
5-取得g当前字体
6-设置字体
7-更改g当前字体
42 画行数
43 回到键盘处理事件 rotateRightAction
44 添加旋转流程控制方法
45 添加开始流程
1-定时器
2-暂停
3-结束
4-间隔时间暂停流程
46 清空墙clearwall
47 暂停流程
48 继续流程
49 结束流程