专栏首页诸葛青云的专栏C语言+图形编程——自制象棋
原创

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 条评论
登录 后参与评论

相关文章

  • C语言中的数据类型

    常量命名统一为大写格式。如果是成员变量,均以m开始。如果是普通变量,取以实际意义相符合的变量名称,然后在其前添加相关的数据类型。如果是指针,则为其标识符添加p。

    诸葛青云
  • 同学 C/C++这块是刚接触还是有学过一些呢?

    C语言中交换两个变量值的操作经常会用到,也有不少人提问诸如不用临时变量怎么交换两个变量值的问题,今天在这里做一个总结,也算是对这个问题的统一回复,一共总结了5种...

    诸葛青云
  • 一看就会的C语言笔记——指针函数、函数指针、回调函数

    //函数返回值必须用同类型的变量来接受,也就是说,指针函数的返回值必须赋值给同类型的指针变量。

    诸葛青云
  • TextView、AppCompatTextView文字段落居中文末补缺对齐

    相信很多开发者都有这个烦恼,在Android提供的原生TextView或AppCompatTextView中写一段文字时,文末都是参差不齐的;一行写不下就挤到第...

    紫兮木溪
  • Android自定义view实现车载可调整轨迹线

    本文实例为大家分享了Android自定义view完成车载可调整轨迹线的具体代码,供大家参考,具体内容如下

    砸漏
  • neo4j进阶操作(四)neo4j导入csv,使用load导入csv文件进入neo4j

    ####采用load 形式导入csv 本文使用的是windows下的neo4j browser,在导入数据之前,需要将EXCEL另存为CSV,如果有多个she...

    学到老
  • Neo4j导入CSV文件使用import

    数据连接:https://pan.baidu.com/s/1hwMy91DjohZ9yJXcA6GKMQ

    学到老
  • python读取文件指定行内容实例讲解

    本文实例讲述了Python3实现从文件中读取指定行的方法。分享给大家供大家参考。具体实现方法如下:

    砸漏
  • 面试宝典_Python.运维开发.000

    1. 用PYTHON实现tail -f功能,默认显示最后15行,实时输出新增行?

    py3study
  • Python获取局域网内所有机器IP地址与网卡MAC地址

    已发相关文章请参考Python获取本机所有网卡的MAC地址 本文代码使用ARP协议获取局域网内所有计算机的IP地址与MAC地址,思路是使用系统命令arp获取A...

    Python小屋屋主

扫码关注云+社区

领取腾讯云代金券