用C语言做个象棋是不容易的,涉及到的知识点有很多方面,C语言里面的基本数据类型、运算符、顺序,分支,循环结构。还有运用到数组,函数,指针,以及我们的位运算等。
做出来的象棋程序,自然的话代码也不少的,下面的话我就发一部分吧,把棋盘的话,棋子的代码写出来,自然的话,各位都需要自己找好素材,以及我们的编译器要用到图形库的,记得安装好。下面我就把棋盘的代码发出来在下面
小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程
/**************************************************
/*函数:
/*功能:
/*参数:
/*返回:
/*************************************************/
#include "stdio.h"
#include "stdlib.h"
#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()
{
C语言学习群:462127424
点击链接加入群聊【C语言】:C语言
//图型初始化
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++;}
}
然后的话,自然是接着摆棋子了,下面的话各位自己去摸索一下吧,代码是真心太多,我最后把最终的效果图发出来一下: