C语言+图形编程——自制象棋

用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++;}

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏HT

HT for Web基于HTML5的图像操作(三)

上篇采用了HTML5的Canvas的globalCompositeOperation属性达到了染色效果,其实CSS也提供了一些常规图像变化的设置参数,关于CSS...

22090
来自专栏Guangdong Qi

iOS 简单易懂的粒子效果

28430
来自专栏数据结构与算法

1675 大质数 2

1675 大质数 2 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小明因...

27960
来自专栏PPV课数据科学社区

趣文 | 程序员们,都进来看看编程语言之父都有谁

1、PHP PHP之父,Rasmus Lerdorf,1994年,为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示 Rasmu...

36470
来自专栏我和未来有约会

[Silverlight动画]转向行为 - 避开行为

避开行为与寻找行为彻底相反。实际上,除了代码最后一行用相减代替了相加以外,其它都一样。 public void flee(Vector2D target) ...

21170
来自专栏ml

HDUOJ----2512一卡通大冒险

一卡通大冒险 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja...

35790
来自专栏写代码的海盗

乐呵乐呵得了 golang入坑系列

开场就有料,今天返回去看了看以前的文章,轻松指数有点下降趋势。一琢磨,这不是我的风格呀。一反思,合着是这段时间,脑子里杂七杂八的杂事有点多,事情一多,就忘了快乐...

35850
来自专栏HansBug's Lab

1934: [Shoi2007]Vote 善意的投票

1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1174  ...

29370
来自专栏Python攻城狮

Python之禅

在Python交互式解释器中输 入import this就会显示Tim Peters的The Zen of python

11710
来自专栏AI2ML人工智能to机器学习

部分攒说 Jeff Dean

Google 大数据Map Reduce平台的鼻祖 Jeff Dean, 程序员的凯撒!一般来说Fellow已经最高级别, 但是..., Google觉得Fel...

9010

扫码关注云+社区

领取腾讯云代金券