C语言编写的俄罗斯方块程序中的疑问

这是在(x,y)位置开始,用指定的颜色显示编号为box_num的游戏方块的一个函数:voidshow_box(intx,inty,intbox_num,intcolor)... 这是在(x,y)位置开始,用指定的颜色显示编号为box_num的游戏方块的一个函数:
void show_box(int x,int y,int box_num,int color)
{
int i,ii,ls_x=x;
//指定的游戏方块不存在
if(box_num<0||box_num>=MAX_BOX)
box_num=MAX_BOX/2;
//void far setfillstyle(int pattern,int color)
//以pattern为填充模式 以color为填充颜色对指定图形进行填充
setfillstyle(SOLID_FILL,color);

for(ii=0;ii<2;ii++)
{
int mask=128;//掩码,用于位运算

//单个方块填充
for(i=0;i<8;i++)
{

if(i%4==0&&i!=0)//表示转到游戏方块的下一行了
{
y+=BSIZE;
x=ls_x;
}
if((shapes[box_num].box[ii])&mask)
{
bar(x,y,x+BSIZE,y+BSIZE);
line(x,y,x+BSIZE,y);
line(x,y,x,y+BSIZE);
line(x,y+BSIZE,x+BSIZE,y+BSIZE);
line(x+BSIZE,y,x+BSIZE,y+BSIZE);
}
x+=BSIZE;
mask/=2;
}
y+=BSIZE;
x=ls_x;
}
}
其中的int mask=128的注释也没看明白,掩码用于位运算?哪位高手具体说明一下。还有,请简要概述一下下面这几行for、if的作用。先感谢了!
还是不明白呢,这个128是怎么来的呢 刚才加你的时候,QQ提示说查找不到该账号或该账号不是主显账号
展开
 我来答
PLigt
2011-01-20 · TA获得超过677个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:382万
展开全部
嗯,你给的代码有限,但我还是知道了个大概,应该是正确的,下面做简要说明:

首先,俄罗斯方块里所有的方块都能在4x4的矩阵中用四个点坐标来表示
先来看shape这个结构体变量,它有一个成员变量box,是个数组
注意这两句
for(ii=0;ii<2;ii++)
if((shapes[box_num].box[ii])&mask)
这说明了box是个长度为2的变量,如果box为unsigned char类型,那box长度就正好为2字节,
16位,也就等于4x4,这就说明了box[2]是用来记录方块的。
mask = 128,它的二进制就为
10000000
mask/=2,等价于mask>>=2(自己可以证明的,呵呵)
这里以一个正方形的方块为例
每四位表示一行,行序储存
■■00
■■00
0000
0000
它的box变量的值就为
box[0]11001100
box[1]00000000
第一次循环:
ii =0
i=0
if((shapes[box_num].box[ii])&mask)//即为11001100&1000000
为真,就画上一个方块
之后mask/=2,那么mask就变成了01000000
进入第二次循环
ii=0
i=1
if((shapes[box_num].box[ii])&mask)//即为11001100&0100000
仍为真,再画上一个方块
mask再除等于2,变成00100000
进入第三次循环
ii=0
i=2
if((shapes[box_num].box[ii])&mask)//即为11001100&00010000
这时就为假了,就不画它,进入下一次循环,后面就不再重复了,呵呵
有问题加个qq吧,交个朋友,1504837063
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式