中国象棋源代码C语言小程序Word文档格式.docx

上传人:b****6 文档编号:17637789 上传时间:2022-12-07 格式:DOCX 页数:15 大小:17.14KB
下载 相关 举报
中国象棋源代码C语言小程序Word文档格式.docx_第1页
第1页 / 共15页
中国象棋源代码C语言小程序Word文档格式.docx_第2页
第2页 / 共15页
中国象棋源代码C语言小程序Word文档格式.docx_第3页
第3页 / 共15页
中国象棋源代码C语言小程序Word文档格式.docx_第4页
第4页 / 共15页
中国象棋源代码C语言小程序Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

中国象棋源代码C语言小程序Word文档格式.docx

《中国象棋源代码C语言小程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《中国象棋源代码C语言小程序Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

中国象棋源代码C语言小程序Word文档格式.docx

charpage_new=0,page_old=0;

intfinish=false,turn=BLACK,winner=0;

intkey;

intredstate=SELECT,blackstate=SELECT;

intboard[10][9];

char*chessfile[15]={"

"

bmp\\rju.wfb"

"

bmp\\rma.wfb"

bmp\\rxiang.wfb"

"

bmp\\rshi.wfb"

bmp\\rjiang.wfb"

bmp\\rpao.wfb"

bmp\\rbin.wfb"

bmp\\bju.wfb"

bmp\\bma.wfb"

bmp\\bxiang.wfb"

bmp\\bshi.wfb"

bmp\\bjiang.wfb"

bmp\\bpao.wfb"

bmp\\bbin.wfb"

};

char*boardfile[10][9]={

{"

bmp\\11.wfb"

bmp\\1t.wfb"

bmp\\14.wfb"

bmp\\15.wfb"

bmp\\16.wfb"

bmp\\19.wfb"

},

bmp\\21.wfb"

bmp\\2c.wfb"

bmp\\24.wfb"

bmp\\25.wfb"

bmp\\26.wfb"

bmp\\29.wfb"

bmp\\3a.wfb"

bmp\\3t.wfb"

bmp\\34.wfb"

bmp\\36.wfb"

bmp\\41.wfb"

bmp\\4t.wfb"

bmp\\4a.wfb"

bmp\\49.wfb"

bmp\\51.wfb"

bmp\\52.wfb"

bmp\\5t.wfb"

bmp\\54.wfb"

bmp\\56.wfb"

bmp\\58.wfb"

bmp\\59.wfb"

bmp\\61.wfb"

bmp\\62.wfb"

bmp\\6t.wfb"

bmp\\64.wfb"

bmp\\66.wfb"

bmp\\68.wfb"

bmp\\69.wfb"

bmp\\71.wfb"

bmp\\7t.wfb"

bmp\\7a.wfb"

bmp\\79.wfb"

bmp\\81.wfb"

bmp\\8a.wfb"

bmp\\8t.wfb"

bmp\\84.wfb"

bmp\\85.wfb"

bmp\\86.wfb"

bmp\\89.wfb"

bmp\\91.wfb"

bmp\\9t.wfb"

bmp\\95.wfb"

bmp\\99.wfb"

bmp\\101.wfb"

bmp\\102.wfb"

bmp\\104.wfb"

bmp\\105.wfb"

bmp\\106.wfb"

bmp\\108.wfb"

bmp\\109.wfb"

}

charcursor[14][14]={

0,0,0,0,0,0,0,0,0,0,0,0,1,1,

0,0,0,0,0,0,0,0,0,0,0,1,1,1,

0,255,255,255,255,255,255,255,0,0,1,1,1,1,

0,255,255,255,255,255,255,0,0,1,1,1,1,1,

0,255,255,255,255,255,255,255,255,0,0,1,1,1,

0,255,255,255,255,255,255,255,255,255,0,0,1,1,

0,255,255,0,255,255,255,255,255,255,255,0,0,1,

0,255,0,1,1,0,255,255,255,255,255,255,255,0,

0,0,1,1,1,1,0,255,255,255,255,255,0,1,

0,1,1,1,1,1,1,0,255,255,255,0,1,1,

1,1,1,1,1,1,1,1,0,255,0,1,1,1,

1,1,1,1,1,1,1,1,1,0,1,1,1,1

structpos{

intx;

inty;

}position[10][9],redcurpos,redtemppos,redoldpos,blackcurpos,blacktemppos,blackoldpos;

selectpage(registercharpage)/*换页函数*/

{

unionREGSr;

r.x.ax=0x4f05;

r.x.bx=0;

r.x.dx=page;

/*选择页面*/

int86(0x10,&

r,&

r);

unsignedcharset_SVGA_mode(intvmode)/*设置SVGA屏幕模式*/

r.x.ax=0x4f02;

r.x.bx=vmode;

return(r.h.ah);

unsignedintget_SVGA_mode()/*获取当前SVGA屏幕模式*/

r.x.ax=0x4f03;

return(r.x.bx);

drawbmp(intstart_x,intstart_y,charfilename[])

charbuffer[640];

inti,j,k,n,r,g,b,width,length;

longposition;

FILE*fp;

if((fp=fopen(filename,"

rb"

))==NULL)

printf("

Error!

Can'

topenfile!

);

getch();

return;

fseek(fp,28,SEEK_SET);

fread(&

i,2,1,fp);

if(i!

=8)/*检查是否为256色位图*/

puts("

Can'

tfindbitmap!

fclose(fp);

exit(0);

fseek(fp,18,SEEK_SET);

width,4,1,fp);

length,4,1,fp);

if(firsttime)

fseek(fp,54,SEEK_SET);

for(i=0;

i<

256;

i++)/*按照该图片的DAC色表设置色彩寄存器*/

b=fgetc(fp);

g=fgetc(fp);

r=fgetc(fp);

/*获取R、G、B分量*/

outportb(0x3c8,i);

outportb(0x3c9,r>

>

2);

/*右移是要转化为VGA的6位寄存器形式*/

outportb(0x3c9,g>

outportb(0x3c9,b>

fgetc(fp);

else

fseek(fp,300,SEEK_SET);

k=(width%4)?

(4-width%4):

0;

/*宽度修正值*/

for(j=length-1+start_x;

j>

=start_x;

j--)

fread(buffer,width,1,fp);

for(i=start_y,n=0;

width+start_y;

i++,n++)

position=j*640l+i;

/*计算要显示点的显存位置*/

page_new=position/65536;

/*计算显示页*/

if(page_new!

=page_old)/*当显示页不同时更换页面,提高一定的输出速度*/

{selectpage(page_new);

page_old=page_new;

pokeb(0xa000,position%65536,buffer[n]);

/*写到显存位置*/

fseek(fp,k,SEEK_CUR);

/*每行绘制完后修正宽度*/

init()

savemode=get_SVGA_mode();

/*先保存原来的屏幕模式*/

set_SVGA_mode(0x101);

/*硬件无关性初始化屏幕为640*480256色模式*/

end()

set_SVGA_mode(savemode);

/*恢复屏幕*/

initpos()

inti,j;

10;

i++)

for(j=0;

j<

9;

j++)

position[i][j].x=35+i*39;

position[i][j].y=43+j*40;

initchessmap()

board[0][0]=BLACK_JU;

board[0][1]=BLACK_MA;

board[0][2]=BLACK_XIANG;

board[0][3]=BLACK_SHI;

board[0][4]=BLACK_JIANG;

board[0][5]=BLACK_SHI;

board[0][6]=BLACK_XIANG;

board[0][7]=BLACK_MA;

board[0][8]=BLACK_JU;

board[2][1]=BLACK_PAO;

board[2][7]=BLACK_PAO;

board[3][0]=BLACK_BIN;

board[3][2]=BLACK_BIN;

board[3][4]=BLACK_BIN;

board[3][6]=BLACK_BIN;

board[3][8]=BLACK_BIN;

board[9][0]=RED_JU;

board[9][1]=RED_MA;

board[9][2]=RED_XIANG;

board[9][3]=RED_SHI;

board[9][4]=RED_JIANG;

board[9][5]=RED_SHI;

board[9][6]=RED_XIANG;

board[9][7]=RED_MA;

board[9][8]=RED_JU;

board[7][1]=RED_PAO;

board[7][7]=RED_PAO;

board[6][0]=RED_BIN;

board[6][2]=RED_BIN;

board[6][4]=RED_BIN;

board[6][6]=RED_BIN;

board[6][8]=RED_BIN;

initdrawchess()

;

for(j=0;

if(board[i][j])

drawbmp(position[i][j].x,position[i][j].y,chessfile[board[i][j]]);

drawcursor(structposp)

inti,j,n,m,x,y;

longthisposition;

x=position[p.x][p.y].x+20;

y=position[p.x][p.y].y+25;

for(j=13-1+x,m=13;

=x;

j--,m--)

for(i=y,n=0;

13+y;

thisposition=j*640l+i;

page_new=thisposition/65536;

if(cursor[m][n]!

=1)

if(cursor[m][n]==0)

pokeb(0xa000,thisposition%65536,0);

if(turn==RED)

pokeb(0xa000,thisposition%65536,153);

pokeb(0xa000,thisposition%65536,255);

drawselecursor(structposp)

intgetkey()

intpress;

while(bioskey

(1)==0);

press=bioskey(0);

press=press&

0xff00;

return(press);

/*--------------------红方操作--------------------*/

intredcanselect()

intx,y;

x=redcurpos.x;

y=redcurpos.y;

if(board[x][y]>

=RED_JU&

&

board[x][y]<

=RED_BIN)

return1;

return0;

intredcanmove()

inti,j,min,max,oldx,oldy,x,y;

oldx=redoldpos.x;

oldy=redoldpos.y;

/*case1目标位置是否是自己人*/

/*军、马、炮、相、士、将、卒的走法正确性的判断*/

switch(board[oldx][oldy])

caseRED_BIN:

/*完成*/

if(oldx>

=5)

{if(y!

=oldy||(oldx-x)!

=1)return0;

{if(x==(oldx-1)&

y==oldy)return1;

else

if(x==oldx&

y==(oldy+1))return1;

y==(oldy-1))return1;

break;

caseRED_JIANG:

if(x!

=oldx&

y!

=oldy)return0;

=oldx)

if((x-oldx)>

1||(oldx-x)>

1)return0;

elseif(x<

7)return0;

elseif(y!

=oldy)

if((y-oldy)>

1||(oldy-y)>

elseif(y<

3||y>

5)return0;

caseRED_JU:

elseif(x!

{min=(x>

oldx)?

oldx:

x;

max=(x>

x:

oldx;

for(i=min+1;

max;

i++)

if(board[i][y]!

=0)return0;

{min=(y>

oldy)?

oldy:

y;

max=(y>

y:

oldy;

if(board[x][i]!

caseRED_MA:

if((x-oldx)==2&

((y-oldy)==1||(oldy-y)==1))

if(board[oldx+1][oldy]!

}else

if((oldx-x)==2&

if(board[oldx-1][oldy]!

if((y-oldy)==2&

((x-oldx)==1||(oldx-x)==1))

if(board[oldx][oldy+1]!

if((oldy-y)==2&

if(board[oldx][oldy-1]!

caseRED_PAO:

if(board[x][y]==0)

for(i=min+1,j=0;

=0)j++;

if(j!

}

caseRED_SHI:

if(oldx==9||oldx==7)

{if(x!

=8||y!

=4)return0;

elseif(oldx==8)

{if(x==9&

y==3)return1;

if(x==9&

y==5)return1;

if(x==7&

elser

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1