一开始,我是遍历方块数组,将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);
 
}

解决方案 »

  1.   

    真强
    看上面的代码,貌似是纯画图的方式做的那就给每个方块(数组元素)设置三四个状态,根据状态不同,画不同颜色
    状态 0:背景色  (啥都没有)
    状态 1:移动中的颜色 (下落中)
    状态 2: 已经到底  (已固定)
    状态 3:爆炸中  
    不过,话说回来,你用Label来移动不是挺好的么,至少画图可以变得简单
      

  2.   

    我这里有源码  要吗 。
    我的实现方法是 每个方块想象成小正方形组成的   
    游戏区域就是X*Y个小正方形 组成
    用一个List<Point>存储下落的方块
    用另一个List<Point>存储底部的堆好的方块  下落中的方块是一个 shape 对象  有drawMe方法   把自己画到游戏区域中  这样设置自己的颜色底部堆好的方块存储在另外的对象中  同样有drawMe方法 把自己画的游戏区域中g设置颜色
    画下落的方块
    g设置回原来的颜色
    g设置颜色
    画底部的方块
    g设置回原来的颜色