如下为在控制台下显示移动方块

#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的每一位解码出来。

posted on 2012-06-27 23:26  Junhv.W  阅读(1115)  评论(8编辑  收藏  举报