编写俄罗斯方块的问题

gengchl 2009-08-19 01:42:11
我用VC写了一个俄罗斯方块,可以实现移动和变形,但是当下落遇到其他方块时无法停止。

我没有使用二维数组的方法,判断下落是否碰到其他方块用的是取下落方块相邻点像素颜色值的方法,每个形状的四个方块分

别判断。背景色是黑色,如果颜色值不是黑色就证明有方块。

问题是判断时无法判定碰到的方块是已停止的方块,还是正在移动的方块。比如长条竖直下落时,最上边的方块判断它下边方

块的颜色就不是黑色,因此长条在刚出现,还在顶部时就不动了。

我想到的方法是在每个方块进行判断时,先判断和自己相邻的方块是否和自己是一组,但是我觉得这样太繁琐,效率不高。

我在程序中把每组四个方块各自左上角的坐标都保存了,但是不知怎么使用好,请问哪位有更好的办法。谢谢!
...全文
146 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gengchl 2009-08-31
  • 打赏
  • 举报
回复
请问像这样使用BitBlt(winhdc,0,30,WINX,WINY-30,winhdc,0,0,SRCCOPY);,就是将窗口原有图案向下

移动30个像素。比如20行是红色,21行是绿色,其他行都是黑色(每行30个像素高)。移动完后,看上去红色

在21行,绿色在22行,但是用取像素点颜色的方法检测时,红色仍然在20行,请问是怎么回事?
gengchl 2009-08-19
  • 打赏
  • 举报
回复
我这样做是为了在游戏中只重画正在移动的方块,原以为效率更高。

你说的方法是否还要判断正在移动的是哪种方块,以及该方块的形状,就是是否已经旋转过了。那样要判断的条件也不少啊!
qian_longN1 2009-08-19
  • 打赏
  • 举报
回复
首先判断移动方向,如向下,则以本方块在竖直方向上最下面的小块为判断基准;如向左,则以本方块在横向上最左边的小块为判断基准;注意考虑不在一条基准线上的小块
为什么不用 二维数组呢?这样貌似效率怎么也不会比数组高

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧