如下为在控制台下显示移动方块
#include <graphics.h>
#include <conio.h>
#define BITMASK(var,i) (var)&(1<<(i)) /*bitmap of boxes*/
#define SIDE_LENGTH 30
#define LEFTCOOR(m,n) (200+(n)*SIDE_LENGTH) /*left edge of each box*/
#define TOPCOOR(m,n) (100+(m)*SIDE_LENGTH) /*top edge of each box*/
#define RIGHTCOOR(m,n) (200+((n)+1)*SIDE_LENGTH) /*right edge of each box*/
#define BOTTOMCOOR(m,n) (100+((m)+1)*SIDE_LENGTH) /*bottom edge of each box*/
void drawgrid();
void drawbox(unsigned short);
void main()
{
initgraph(640,480);
drawbox(0x0027);
drawgrid();
getch();
closegraph();
}
void drawgrid()
{
setcolor(0x00ffff);
int i=0;
for(;i<5;i++)
{
line(200,TOPCOOR(i,0),200+4*SIDE_LENGTH,TOPCOOR(i,0));
line(LEFTCOOR(0,i),100,LEFTCOOR(0,i),100+4*SIDE_LENGTH);
}
graphdefaults();
}
void drawbox(unsigned short _id)
{
int m,n;
for(int i=0;i<16;i++)
{
m=i/4;
n=i%4;
if(BITMASK(_id,i))
bar(LEFTCOOR(m,n),TOPCOOR(m,n),RIGHTCOOR(m,n),BOTTOMCOOR(m,n));
}
}
注意到前两个包含的头文件,在VC++里面是没有的需要安装相应的库。而且我也觉得这个库挺好用的,至少画画简单的图不用自己注册窗口。
下载地址:http://www.easyx.cn/ ,自己安装之后就可以用了。
代码还是挺紧凑的,下面解释一下:
在main中调用了两个函数:drawgrid()和drawbox(int)考虑到图层覆盖的问题就只能先调用drawbox然后调用drawgrid了(自己可以试试)。画线条(drawgrid)还是挺简单的就不解释了。
主要是drawbox算法需要一个_id作为参数,这个参数也就是每种堆积方式的16位编码每位代表一个小方格0表示该不绘制该小方格1表示绘制,在函数体里的主要结构是循环体里的if结构:宏调用BITMASK(_id,i)计算出每一个小方格的显示与否(var)&(1<<(i)),这里使用掩码技术将_id的每一位解码出来。