提到PDF和DWG,相信大家一点都不会觉得陌生,这两种格式的文件经常被CAD设计师所使用到。

从交流的角度来看,CAD保存为PDF更为方便。

但如果需要把PDF转换为DWG图纸,就很难办了。

用C语言做个象棋是不容易的,涉及到的知识点有很多方面,C语言里面的基本数据类型、运算符、顺序,分支,循环结构。还有运用到数组,函数,指针,以及我们的位运算等。

做出来的象棋程序,自然的话代码也不少的,下面的话我就发一部分吧,把棋盘的话,棋子的代码写出来,自然的话,各位都需要自己找好素材,以及我们的编译器要用到图形库的,记得安装好。下面我就把棋盘的代码发出来在下面

/**************************************************

尽管中望CAD2019版有PDF参考底图的功能,但是从效率上来看,参考重新绘图明显不高,因此,PDF能直接转换为DWG才是最迫切的需求。

中望CAD2020版主打更快更稳定,于是它来了!

新功能PDF输入就可以极大限度提高设计师恢复图纸数据的效率!

CAD新增的PDF输入功能,牛

使用这个功能方法很简单,运行后会弹出选择文件对话框,可以选择一个需要输入的PDF文件,然后就进入了PDF数据输入的具体设置。

如果PDF有多页,可以选择需要输入哪页,然后对于图形的缩放比例和角度可以进行设置。

/*函数:

/*功能:

/*参数:

需要注意的是输入数据的选择上,一定要勾选向量“几何图形”、“实体填充”和“TrueType文字”,如果不勾选,那么PDF的线条,填充和文字将不会输入到CAD中。

另外如果PDF中含有图片,可以勾上光栅图像的选项。

其他选项根据实际情况选择,基本按默认的选择就可以了。

确定后选择图形输入的位置,PDF就转换为CAD的图形,转换速度还是相当快的。

/*返回:

CAD新增的PDF输入功能,牛

这里有一点需要注意,只有矢量图输出的PDF文件才能用这个输入功能,导回到CAD中还能是几何图形,如果PDF图纸是通过位图转换的方式得到的,导回到CAD中只能是类似图片的对象。

CAD新增的PDF输入功能象棋棋谱,牛

那么小伙伴一定很关心转换过后的图形究竟和原来的PDF存在多大偏差,经过详细对比,图形多少和原图有所变化,例如填充部分不再是填充对象,变成由线段组成的图形,标注也是,箭头、尺寸线、文字分开组成,不再是一个整体。

/*************************************************/

即便如此,对于设计师来说获取这种CAD图纸也是有很大意义的,图纸的基本数据都有,如果需要完整恢复CAD属性也很容易办到。

而文字方面,原PDF中使用的是系统字体的,输入到CAD后依然是文字状态。

#include "stdio.h"

而对于源图是使用SHX字体的,PDF输入到CAD里就只是线条状态,不可以用文字编辑器进行修改。

如下图的象棋棋盘对比

#include "stdlib.h"

CAD新增的PDF输入功能,牛CAD新增的PDF输入功能,牛

整体来说呈现得比较完整,文字也能显示,只是字体由隶书恢复到了默认字体。

该功能对于一些使用PDF作为存档数据的企业可以说帮助极大,因为这样或那样的原因丢失了DWG数据也能通过PDF输入,最大程度地恢复图纸数据,提升工作效率。

#include "graphics.h"

#include "conio.h"

void qipan();

void baizi();

void mouse();

void baiqi(int x,int y,char *q);

huazi(int x,int y,char*s);

panduanzouqi(int a,int b); //判断是否可走子,a,b代表棋盘90个位置的之前点的和后点的位置的标记

IMAGE t[14]; //存棋子(图片)地址的数组,t[0]~t[6]依次是黑卒到黑将,t[7]~t[13]依次是红兵到红帥

IMAGE tt[3];

IMAGE jt[90]; //存棋盘各个位置截图的数组

struct zuobiao //棋盘所有位置的信息

{

int x;

int y;

char zt[5]; //当前位置的状态是什么棋子,或者为空

int id; //1为黑子,2为红子

int bj;

}zb[90];

int r;

struct huiqi //悔棋

{

int x;

int y;

char zt[5];

int id;

int b;

}hq[270];

int h=0;

int oo=3;

int main()

{

initgraph(640, 480);

loadimage(&t[0],_T("img//卒.jpg"));//读取图片文件

loadimage(&t[1],_T("img//黑炮.jpg"));

loadimage(&t[2],_T("img//黑車.jpg"));

loadimage(&t[3],_T("img//黑马.jpg"));

loadimage(&t[4],_T("img//黑象.jpg"));

loadimage(&t[5],_T("img//士.jpg"));

loadimage(&t[6],_T("img//将.jpg"));

loadimage(&t[7],_T("img//兵.jpg"));

loadimage(&t[8],_T("img//炮.jpg"));

loadimage(&t[9],_T("img//車.jpg"));

loadimage(&t[10],_T("img//马.jpg"));

loadimage(&t[11],_T("img//相.jpg"));

loadimage(&t[12],_T("img//仕.jpg"));

loadimage(&t[13],_T("img//帥.jpg"));

loadimage(&tt[0],_T("img//开始游戏.jpg"));

loadimage(&tt[1],_T("img//悔棋.jpg"));

loadimage(&tt[2],_T("img//退出游戏.jpg"));

qipan();

baizi();

mouse();

//setbkcolor(BLACK);

getch();

closegraph();

return 0;

}

void baiqi(int x,int y,char *q)//悔棋重绘

{

if(strcmp(q,"卒")==0)

{

putimage(x,y,&t[0]);

}

if(strcmp(q,"黑炮")==0)

{

putimage(x,y,&t[1]);

}

if(strcmp(q,"黑車")==0)

{

putimage(x,y,&t[2]);

}

if(strcmp(q,"黑马")==0)

{

putimage(x,y,&t[3]);

}

if(strcmp(q,"黑象")==0)

{

putimage(x,y,&t[4]);

}

if(strcmp(q,"士")==0)

{

putimage(x,y,&t[5]);

}

if(strcmp(q,"将")==0)

{

putimage(x,y,&t[6]);

}

if(strcmp(q,"兵")==0)

{

putimage(x,y,&t[7]);

}

if(strcmp(q,"炮")==0)

{

putimage(x,y,&t[8]);

}

if(strcmp(q,"車")==0)

{

putimage(x,y,&t[9]);

}

if(strcmp(q,"马")==0)

{

putimage(x,y,&t[10]);

}

if(strcmp(q,"相")==0)

{

putimage(x,y,&t[11]);

}

if(strcmp(q,"仕")==0)

{

putimage(x,y,&t[12]);

}

if(strcmp(q,"帥")==0)

{

putimage(x,y,&t[13]);

}

}

void qipan()

{

//图型初始化

int gdriver, gmode;

int x,y;

int fillstyle;

gdriver=DETECT;

initgraph(&gdriver, &gmode, "");

setfillstyle(WHITE,2);

bar(0,0,640,480);

setcolor(RED);

for(x=20;x<=380;x+=45){line(x,20,x,200);line(x,245,x,425);}/*上半和下半【竖】*/

for(x=20;x<=45;x+=45){line(x,20,x,380);}/*【左】旁边*/

for(x=380;x<=380;x+=45){line(x,200,x,425);}/*【右】旁边*/

for(y=20;y<=200;y+=45){line(20,y,380,y);}/*上半【行】*/

for(y=20;y<=460;y+=45){line(20,y,380,y);}/*下半【行】*/

for(y=105;y<=111;y+=95){line(45,y,60,y);line(85,y,70,y);}/*画星号【行】*/

for(x=60;x<=100;x+=100){line(x,105,x,90);line(x,130,x,116);}

for(y=115;y<=130;y+=95){line(45,y,60,y);line(85,y,70,y);}/*行*/

for(x=70;x<=100;x+=100){line(x,105,x,90);line(x,130,x,116);}/*画星号【竖】*/

/*第二个星号右上*/

for(y=105;y<=105;y+=105){line(355,y,340,y);line(330,y,315,y);}/*行*/

for(x=340;x<=340;x+=340){line(x,130,x,115);line(x,90,x,105);}/*画星号【竖】*/

for(y=115;y<=115;y+=115){line(340,y,355,y);line(315,y,330,y);}/*行*/

for(x=330;x<=340;x+=340){line(x,130,x,116);line(x,105,x,90);}/*竖*/

/*第三个星号*/

for(y=330;y<=340;y+=340){line(355,y,340,y);line(330,y,315,y);}/*行*/

for(x=330;x<=340;x+=340){line(x,340,x,355);line(x,315,x,330);}/*画星号【竖】*/

for(y=340;y<=340;y+=340){line(355,y,340,y);line(315,y,330,y);}/*行*/

for(x=340;x<=444;x+=340){line(x,315,x,330);line(x,340,x,355);}/*竖*/

/*第四个星号*/

for(x=60;x<=60;x+=60){line(x,340,x,355);line(x,315,x,330);}/*左下星号【竖】*/

for(y=340;y<=340;y+=340){line(45,y,60,y);line(70,y,85,y);}/*行*/

for(y=330;y<=330;y+=330){line(45,y,60,y);line(70,y,85,y);}/*画星号【行】*/

for(x=70;x<=70;x+=70){line(x,340,x,355);line(x,315,x,330);}/*竖*/

/*上【将位】*/

line(245,20,155,110);

line(155,20,245,110);

/*帅位*/

line(155,425,245,335);

line(155,335,245,425);

fillstyle=SOLID_FILL;/*把填充模式设计为SOLID_FILL颜色设置为青色*/

setfillstyle(fillstyle,CYAN);

bar(22,202,378,243);/*棋盘中间*/

setbkmode(TRANSPARENT);

setcolor(BLACK);

setfont(30, 0,"隶书");

outtextxy(80, 210,"楚河 汉界"); /*字体坐标*/

setfont(100, 40,"隶书");

outtextxy(440,5,"中国");

outtextxy(440,90,"象棋");

setcolor(BLUE);

putimage(450,200,&tt[0]);

putimage(450,275,&tt[1]);

putimage(450,350,&tt[2]);

r=0;

for(int u=20;u<=380;u=u+45)//给棋盘x坐标赋值

for(int uu=20;uu<=425;uu=uu+45)//给棋盘y坐标赋值

{

getimage(&jt[r],u-20,uu-20,45,45);

zb[r].x=u-20;

zb[r].y=uu-20;

zb[r].id=0;

strcpy(zb[r].zt,"空");

zb[r].bj=r;

r++;}

} (加QQ群:466572167,群内有大量学习资源可供学习)

然后的话,自然是接着摆棋子了,下面的话各位自己去摸索一下吧,代码是真心太多,我最后把最终的效果图发出来一下:

C语言+图形编程——自制象棋有机会的话可以加下群哈:466572167,可以拿一下全部的象棋的代码哈,然后,打手不易,都是自己慢慢的敲出的,摸索出来的,有不足的欢迎指出,各位想学习C语言编程的都可以看看哈、