C語言+圖形程式設計——自制象棋

諸葛青雲h發表於2018-09-28
1240

用C語言做個象棋是不容易的,涉及到的知識點有很多方面,C語言裡面的基本資料型別、運算子、順序,分支,迴圈結構。還有運用到陣列,函式,指標,以及我們的位運算等。

做出來的象棋程式,自然的話程式碼也不少的,下面的話我就發一部分吧,把棋盤的話,棋子的程式碼寫出來,自然的話,各位都需要自己找好素材,以及我們的編譯器要用到圖形庫的,記得安裝好。下面我就把棋盤的程式碼發出來在下面

1240

小編給大家推薦一個學習氛圍超好的地方,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++;}

然後的話,自然是接著擺棋子了,下面的話各位自己去摸索一下吧,程式碼是真心太多,我最後把最終的效果圖發出來一下:

1240


相關文章