永发信息网

中国象棋的源代码

答案:4  悬赏:0  手机版
解决时间 2021-04-16 06:36
求中国象棋的源代码
最佳答案
*--------------------chess.c----------------------*/
#include "dos.h"
#include "stdio.h"

#define RED 7
#define BLACK 14
#define true 1
#define false 0
#define SELECT 0
#define MOVE 1
#define RED_UP 0x1100
#define RED_DOWN 0x1f00
#define RED_LEFT 0x1e00
#define RED_RIGHT 0x2000
#define RED_DO 0x3900
#define RED_UNDO 0x1000

#define BLACK_UP 0x4800
#define BLACK_DOWN 0x5000
#define BLACK_LEFT 0x4b00
#define BLACK_RIGHT 0x4d00
#define BLACK_DO 0x1c00
#define BLACK_UNDO 0x2b00

#define ESCAPE 0x0100

#define RED_JU 1
#define RED_MA 2
#define RED_XIANG 3
#define RED_SHI 4
#define RED_JIANG 5
#define RED_PAO 6
#define RED_BIN 7

#define BLACK_JU 8
#define BLACK_MA 9
#define BLACK_XIANG 10
#define BLACK_SHI 11
#define BLACK_JIANG 12
#define BLACK_PAO 13
#define BLACK_BIN 14

int firsttime=1;
int savemode;
char page_new=0,page_old=0;
int finish=false,turn=BLACK,winner=0;
int key;
int redstate=SELECT,blackstate=SELECT;
int board[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\\1t.wfb","bmp\\14.wfb","bmp\\15.wfb","bmp\\16.wfb","bmp\\1t.wfb","bmp\\1t.wfb","bmp\\19.wfb"},
{"bmp\\21.wfb","bmp\\2c.wfb","bmp\\2c.wfb","bmp\\24.wfb","bmp\\25.wfb","bmp\\26.wfb","bmp\\2c.wfb","bmp\\2c.wfb","bmp\\29.wfb"},
{"bmp\\21.wfb","bmp\\3a.wfb","bmp\\3t.wfb","bmp\\34.wfb","bmp\\3t.wfb","bmp\\36.wfb","bmp\\3t.wfb","bmp\\3a.wfb","bmp\\29.wfb"},
{"bmp\\41.wfb","bmp\\4t.wfb","bmp\\4a.wfb","bmp\\4t.wfb","bmp\\4a.wfb","bmp\\4t.wfb","bmp\\4a.wfb","bmp\\4t.wfb","bmp\\49.wfb"},
{"bmp\\51.wfb","bmp\\52.wfb","bmp\\5t.wfb","bmp\\54.wfb","bmp\\5t.wfb","bmp\\56.wfb","bmp\\5t.wfb","bmp\\58.wfb","bmp\\59.wfb"},
{"bmp\\61.wfb","bmp\\62.wfb","bmp\\6t.wfb","bmp\\64.wfb","bmp\\6t.wfb","bmp\\66.wfb","bmp\\6t.wfb","bmp\\68.wfb","bmp\\69.wfb"},
{"bmp\\71.wfb","bmp\\7t.wfb","bmp\\7a.wfb","bmp\\7t.wfb","bmp\\7a.wfb","bmp\\7t.wfb","bmp\\7a.wfb","bmp\\7t.wfb","bmp\\79.wfb"},
{"bmp\\81.wfb","bmp\\8a.wfb","bmp\\8t.wfb","bmp\\84.wfb","bmp\\85.wfb","bmp\\86.wfb","bmp\\8t.wfb","bmp\\8a.wfb","bmp\\89.wfb"},
{"bmp\\91.wfb","bmp\\9t.wfb","bmp\\9t.wfb","bmp\\9t.wfb","bmp\\95.wfb","bmp\\9t.wfb","bmp\\9t.wfb","bmp\\9t.wfb","bmp\\99.wfb"},
{"bmp\\101.wfb","bmp\\102.wfb","bmp\\102.wfb","bmp\\104.wfb","bmp\\105.wfb","bmp\\106.wfb","bmp\\108.wfb","bmp\\108.wfb","bmp\\109.wfb"}
};

char cursor[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,0,0,1,1,1,1,1,
0,255,255,255,255,255,255,255,0,0,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
};



struct pos{
int x;
int y;
}position[10][9],redcurpos,redtemppos,redoldpos,blackcurpos,blacktemppos,blackoldpos;

selectpage(register char page)
{
union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=page;
int86(0x10,&r,&r);
}
unsigned char set_SVGA_mode(int vmode)
{
union REGS r;
r.x.ax=0x4f02;
r.x.bx=vmode;
int86(0x10,&r,&r);
return(r.h.ah);
}
unsigned int get_SVGA_mode()
{
union REGS r;
r.x.ax=0x4f03;
int86(0x10,&r,&r);
return(r.x.bx);
}
drawbmp(int start_x,int start_y,char filename[])
{
char buffer[640];
int i,j,k,n,r,g,b,width,length;
long position;
FILE *fp;

if((fp=fopen(filename,"rb"))==NULL)
{
printf("Error! Can't open file!");
getch();
return;
}

fseek(fp,28,SEEK_SET);
fread(&i,2,1,fp);
if(i!=8)
{
puts("Error!Can't find bitmap!");
fclose(fp);
getch();
exit(0);
}
fseek(fp,18,SEEK_SET);
fread(&width,4,1,fp);
fread(&length,4,1,fp);
if(firsttime)
{
fseek(fp,54,SEEK_SET);
for(i=0;i<256;i++)
{
b=fgetc(fp);g=fgetc(fp);r=fgetc(fp);
outportb(0x3c8,i);
outportb(0x3c9,r>>2);
outportb(0x3c9,g>>2);
outportb(0x3c9,b>>2);
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;i<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);
}
fclose(fp);

}

init()
{
savemode=get_SVGA_mode();
set_SVGA_mode(0x101);
}

end()
{
set_SVGA_mode(savemode);
}

initpos()
{
int i,j;
for(i=0;i<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()
{
int i,j;;
for(i=0;i<10;i++)
for(j=0;j<9;j++)
{
if(board[i][j])
drawbmp(position[i][j].x,position[i][j].y,chessfile[board[i][j]]);
}
}

drawcursor(struct pos p)
{
int i,j,n,m,x,y;
long thisposition;
x=position[p.x][p.y].x+20;
y=position[p.x][p.y].y+25;
for(j=13-1+x,m=13;j>=x;j--,m--)
{
for(i=y,n=0;i<13+y;i++,n++)
{
thisposition=j*640l+i;
page_new=thisposition/65536;
if(page_new!=page_old)
{selectpage(page_new);page_old=page_new;}
if(cursor[m][n]!=1)
if(cursor[m][n]==0)
pokeb(0xa000,thisposition%65536,0);
else
if(turn==RED)
pokeb(0xa000,thisposition%65536,153);
else
pokeb(0xa000,thisposition%65536,255);
}
}
}

drawselecursor(struct pos p)
{
int i,j,n,m,x,y;
long thisposition;
x=position[p.x][p.y].x+20;
y=position[p.x][p.y].y+25;
for(j=13-1+x,m=13;j>=x;j--,m--)
{
for(i=y,n=0;i<13+y;i++,n++)
{
thisposition=j*640l+i;
page_new=thisposition/65536;
if(page_new!=page_old)
{selectpage(page_new);page_old=page_new;}
if(cursor[m][n]!=1)
pokeb(0xa000,thisposition%65536,0);
}
}
}

int getkey()
{
int press;

while(bioskey(1) == 0);
press=bioskey(0);
press=press&0xff00;
return(press);
}

int redcanselect()
{
int x,y;
x=redcurpos.x;
y=redcurpos.y;
if(board[x][y]>=RED_JU&&board[x][y]<=RED_BIN)
return 1;
else
return 0;
}
int redcanmove()
{
int i,j,min,max,oldx,oldy,x,y;
oldx=redoldpos.x;
oldy=redoldpos.y;
x=redcurpos.x;
y=redcurpos.y;

if(board[x][y]>=RED_JU&&board[x][y]<=RED_BIN)
return 0;

switch(board[oldx][oldy])
{
case RED_BIN:
if(oldx>=5)
{ if(y!=oldy||(oldx-x)!=1) return 0;}
else
{ if(x==(oldx-1)&&y==oldy) return 1;
else
if(x==oldx&&y==(oldy+1)) return 1;
else
if(x==oldx&&y==(oldy-1)) return 1;
else
return 0;
}
break;
case RED_JIANG:
if(x!=oldx&&y!=oldy) return 0;
if(x!=oldx)
if((x-oldx)>1||(oldx-x)>1) return 0;
else if(x<7) return 0;
else if(y!=oldy)
if((y-oldy)>1||(oldy-y)>1) return 0;
else if(y<3||y>5) return 0;
break;

case RED_JU:
if(x!=oldx&&y!=oldy) return 0;
else if(x!=oldx)
{ min=(x>oldx)?oldx:x;
max=(x>oldx)?x:oldx;
for(i=min+1;i<max;i++)
if(board[i][y]!=0) return 0;
}
else if(y!=oldy)
{ min=(y>oldy)?oldy:y;
max=(y>oldy)?y:oldy;
for(i=min+1;i<max;i++)
if(board[x][i]!=0) return 0;
}
break;
case RED_MA:
if((x-oldx)==2&&((y-oldy)==1||(oldy-y)==1))
{
if(board[oldx+1][oldy]!=0) return 0;
}else
if((oldx-x)==2&&((y-oldy)==1||(oldy-y)==1))
{
if(board[oldx-1][oldy]!=0) return 0;
}else
if((y-oldy)==2&&((x-oldx)==1||(oldx-x)==1))
{
if(board[oldx][oldy+1]!=0) return 0;
}else
if((oldy-y)==2&&((x-oldx)==1||(oldx-x)==1))
{
if(board[oldx][oldy-1]!=0) return 0;
}else
return 0;
break;
case RED_PAO:
if(x!=oldx&&y!=oldy) return 0;
if(board[x][y]==0)
{
if(x!=oldx)
{ min=(x>oldx)?oldx:x;
max=(x>oldx)?x:oldx;
for(i=min+1;i<max;i++)
if(board[i][y]!=0) return 0;
}
else if(y!=oldy)
{ min=(y>oldy)?oldy:y;
max=(y>oldy)?y:oldy;
for(i=min+1;i<max;i++)
if(board[x][i]!=0) return 0;
}
}
else
{
if(x!=oldx)
{ min=(x>oldx)?oldx:x;
max=(x>oldx)?x:oldx;
for(i=min+1,j=0;i<max;i++)
if(board[i][y]!=0) j++;
if(j!=1) return 0;
}
else if(y!=oldy)
{ min=(y>oldy)?oldy:y;
max=(y>oldy)?y:oldy;
for(i=min+1,j=0;i<max;i++)
if(board[x][i]!=0) j++;
if(j!=1) return 0;
}
}
break;
case RED_SHI:
if(oldx==9||oldx==7)
{if(x!=8||y!=4) return 0;}
else if(oldx==8)
{if(x==9&&y==3) return 1;
else
if(x==9&&y==5) return 1;
else
if(x==7&&y==3) return 1;
else
if(x==7&&y==5) return 1;
else return 0;
}else return 0;
break;
case RED_XIANG:
if(x<5) return 0;
if(x!=oldx&&y!=oldy)
{
if((x-oldx)==2&&(y-oldy)==2)
{i=oldx+1;j=oldy+1;}
else if((x-oldx)==2&&(oldy-y)==2)
{i=oldx+1;j=oldy-1;}
else if((oldx-x)==2&&(y-oldy)==2)
{i=oldx-1;j=oldy+1;}
else if((oldx-x)==2&&(oldy-y)==2)
{i=oldx-1;j=oldy-1;}
else return 0;
if(board[i][j]!=0) return 0;
}
else return 0;
break;
}
return 1;
}
全部回答
勒个代码不全,我下载没驿出来汗!

什么意思啊 兄弟清楚点

中国象棋源代码

blackleft()

{

int x,y,n;

if(blackcurpos.y>0)

{

blackcurpos.y--;

x=position[blacktemppos.x][blacktemppos.y].x;

y=position[blacktemppos.x][blacktemppos.y].y;

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

drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);

else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))

{

n=board[blacktemppos.x][blacktemppos.y];

drawbmp(x,y,chessfile[n]);

}

if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)

drawselecursor(blackoldpos);

drawcursor(blackcurpos);

blacktemppos.x=blackcurpos.x;

blacktemppos.y=blackcurpos.y;

}

}

blackright()

{

int x,y,n;

if(blackcurpos.y<8)

{

blackcurpos.y++;

x=position[blacktemppos.x][blacktemppos.y].x;

y=position[blacktemppos.x][blacktemppos.y].y;

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

drawbmp(x,y,boardfile[blacktemppos.x][blacktemppos.y]);

else if(!(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE))

{

n=board[blacktemppos.x][blacktemppos.y];

drawbmp(x,y,chessfile[n]);

}

if(blacktemppos.x==blackoldpos.x&&blacktemppos.y==blackoldpos.y&&blackstate==MOVE)

drawselecursor(blackoldpos);

drawcursor(blackcurpos);

blacktemppos.x=blackcurpos.x;

blacktemppos.y=blackcurpos.y;

}

}

blackdo()

{

int i,j,x,y,n;

if(blackstate==SELECT&&blackcanselect())

{

if(board[blackcurpos.x][blackcurpos.y]<=BLACK&&board[blackcurpos.x][blackcurpos.y]>0)

{

blackstate=MOVE;

drawselecursor(blackcurpos);

blackoldpos.x=blackcurpos.x;

blackoldpos.y=blackcurpos.y;

}

}

else if(blackstate==MOVE&&blackcanmove())

{

x=position[blackoldpos.x][blackoldpos.y].x;

y=position[blackoldpos.x][blackoldpos.y].y;

drawbmp(x,y,boardfile[blackoldpos.x][blackoldpos.y]);

x=position[blackcurpos.x][blackcurpos.y].x;

y=position[blackcurpos.x][blackcurpos.y].y;

n=board[blackoldpos.x][blackoldpos.y];

drawbmp(x,y,chessfile[n]);

if(board[blackcurpos.x][blackcurpos.y]==RED_JIANG)

{

winner=BLACK;

finish=1;

return;

}

board[blackcurpos.x][blackcurpos.y]=n;

board[blackoldpos.x][blackoldpos.y]=0;

for(i=0;i<=2;i++)

for(j=3;j<=5;j++)

if(board[i][j]==BLACK_JIANG)

{x=i;y=j;}

for(i=x+1,j=y,n=0;i<=9;i++)

{

if(board[i][j]==RED_JIANG&&n==0)

{winner=RED;finish=1;break;}

else if(board[i][j]!=0) n++;

}

turn=RED;

redstate=SELECT;

drawcursor(redcurpos);

drawbmp(30,438,"bmp\\rzq.wfb");

}

}

blackundo()

{

int x,y,n;

if(blackstate==MOVE)

{

x=position[blackoldpos.x][blackoldpos.y].x;

y=position[blackoldpos.x][blackoldpos.y].y;

n=board[blackoldpos.x][blackoldpos.y];

drawbmp(x,y,chessfile[n]);

blackoldpos.x=blackcurpos.x;

blackoldpos.y=blackcurpos.y;

drawcursor(blackcurpos);

blackstate=SELECT;

}

}

start()

{

drawcursor(blackcurpos);

drawbmp(30,438,"bmp\\bzq.wfb");

while(!finish)

{

key=getkey();

switch(key){

case RED_UP:

if(turn==RED)

redup();

break;

case RED_DOWN:

if(turn==RED)

reddown();

break;

case RED_LEFT:

if(turn==RED)

redleft();

break;

case RED_RIGHT:

if(turn==RED)

redright();

break;

case RED_DO:

if(turn==RED)

reddo();

break;

case RED_UNDO:

if(turn==RED)

redundo();

break;

case BLACK_UP:

if(turn==BLACK)

blackup();

break;

case BLACK_DOWN:

if(turn==BLACK)

blackdown();

break;

case BLACK_LEFT:

if(turn==BLACK)

blackleft();

break;

case BLACK_RIGHT:

if(turn==BLACK)

blackright();

break;

case BLACK_DO:

if(turn==BLACK)

blackdo();

break;

case BLACK_UNDO:

if(turn==BLACK)

blackundo();

break;

case ESCAPE: finish=1;break;

}

}

}

main()

{

init();

initpos();

initchessmap();

drawbmp(0,0,"bmp\\board.wfb");

initdrawchess();

redcurpos.x=redoldpos.x=redtemppos.x=9;

redcurpos.y=redoldpos.y=redtemppos.y=8;

blackcurpos.x=blackoldpos.x=blacktemppos.x=0;

blackcurpos.y=blackoldpos.y=blacktemppos.y=0;

start();

if(winner==RED)

drawbmp(200,200,"bmp\\redwin.wfb");

else if(winner==BLACK)

drawbmp(200,200,"bmp\\blackwin.wfb");

else

drawbmp(200,200,"bmp\\exit.wfb");

getch();

end();

}

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
09各个大学录取分数线
天津财经大学学生公寓餐厅地址在哪,我要去那
从瓜州县到靖边开车多少公里
DNF中的灵犀之心哪里爆的几率大
为什么看到漂亮女孩子,都想多看两眼呢?
蛏干的做法.不是当配料单独做的..
齐家便利店在哪里啊,我有事要去这个地方
有谁知道哪里的二手车最好
PANASONIC KX-FT956CN 需不需要色带?
what can we do to protect AIDS
我的QQ问问怎么点不亮啊
全国健康产业工业委员会食品安全四川第三方检
我家电脑截图不好使了怎么办?
请问下 吉安高艺制衣有限公司 法人代表是谁?
分手的时候说什么话能让对方有愧疚感
推荐资讯
怎样才能成为qq音乐里的淘歌达人?
能坐200到300人人的飞机是什么机型
丙火人的喜忌谁能告诉我?
小红的身高大约是1.5m,小丽的身高大约是1.50m
QQ三国南瓜园的南瓜不见了
为什么看流星雨会觉得很浪漫呢?
江苏省教育部规定学生每天作业量多少? 不准确
江南大学的校内网怎么注册?
htc灵感xe水货价格大约多少
红板壁地址在哪,我要去那里办事
3D平衡球怎么到不了第二关
爱情生日祝福语简短,写给同学生日祝福语
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?