一开始,我是遍历方块数组,将1画上,用repaint()和update()更新画布,以实现方块的下落。然后遇到一个问题,方块落下去后无法固定,因为update()将整个画布都更新了,落下去的方块也被更新了。
然后我创建了屏幕数组,试着用遍历屏幕数组的方法更新画布,这样同样遇到了问题,即落下去后的方块颜色被替换成了新生成的方块颜色。每生成一个新方块,下边落下的方块颜色都要被替换一次。苦思了两天,也没有找出一个解决的办法,马上要答辩了,跪求各位高手给解决一下,或者给小弟提一个解决的算法。小弟拜谢了
public void drawblock()
{
Graphics g=localuser.gamecanvas1.getGraphics();
localuser.gamecanvas1.repaint();
localuser.gamecanvas1.update(g);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(Block[blocktype][turntype][i][j]==1)
g.fill3DRect((col+j)*20,(row+i)*20,20,20,true);
}
然后我创建了屏幕数组,试着用遍历屏幕数组的方法更新画布,这样同样遇到了问题,即落下去后的方块颜色被替换成了新生成的方块颜色。每生成一个新方块,下边落下的方块颜色都要被替换一次。苦思了两天,也没有找出一个解决的办法,马上要答辩了,跪求各位高手给解决一下,或者给小弟提一个解决的算法。小弟拜谢了
public void drawblock()
{
Graphics g=localuser.gamecanvas1.getGraphics();
localuser.gamecanvas1.repaint();
localuser.gamecanvas1.update(g);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(Block[blocktype][turntype][i][j]==1)
g.fill3DRect((col+j)*20,(row+i)*20,20,20,true);
}
看上面的代码,貌似是纯画图的方式做的那就给每个方块(数组元素)设置三四个状态,根据状态不同,画不同颜色
状态 0:背景色 (啥都没有)
状态 1:移动中的颜色 (下落中)
状态 2: 已经到底 (已固定)
状态 3:爆炸中
不过,话说回来,你用Label来移动不是挺好的么,至少画图可以变得简单
我的实现方法是 每个方块想象成小正方形组成的
游戏区域就是X*Y个小正方形 组成
用一个List<Point>存储下落的方块
用另一个List<Point>存储底部的堆好的方块 下落中的方块是一个 shape 对象 有drawMe方法 把自己画到游戏区域中 这样设置自己的颜色底部堆好的方块存储在另外的对象中 同样有drawMe方法 把自己画的游戏区域中g设置颜色
画下落的方块
g设置回原来的颜色
g设置颜色
画底部的方块
g设置回原来的颜色