企业宣传画册欣赏:C语言的问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/02 17:32:09
用C写一个黑白棋的程序,该怎么写啊?

http://post.baidu.com/f?kz=67191514

#include"graphics.h"
#include"stdio.h"
#define LEN sizeof(struct dian)
#define NULL 0
int dian[8][8],result[10][2]; /*dian[][]中存格子的状态,无子,黑子或白子*/
int N,M,s=0,K=0;
int dx,dy,key;
char COMPUTER=0;
int computer=2;
struct dian /*记录所有已经下的子的位置*/
{
int x;
int y;
struct dian *next;
};
struct dian a,*p1,*p,*head;
void init(void) /*初始化*/
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
void jiemian1(void) /*第一个界面*/
{
setlinestyle(0,0,3);
setcolor(3);
rectangle(1,1,640,480);
setcolor(4);
rectangle(3,3,638,478);
setcolor(6);
rectangle(5,5,636,476);
settextstyle(0,0,6);
setcolor(7);
outtextxy(160,160,"HEI BAI");
settextstyle(0,0,1);
setcolor(9);
outtextxy(240,280,"press 1 to play with computer");
outtextxy(240,320,"press 2 to play with another");
do{ /*选择是和人玩还是和电脑下去*/
COMPUTER=bioskey(0);
}while(COMPUTER!='1'&&COMPUTER!='2');
cleardevice();
}
void qipan(void) /*画棋盘*/
{
int i;
setlinestyle(0,0,3);
setcolor(9);
for(i=0;i<=160;i+=20)
{
line(240,i+160,400,i+160);
line(i+240,160,i+240,320);
}
}
void insert(int x,int y) /*将下子的位置插入链表*/
{
struct dian *p2;
p2=(struct dian*)malloc(LEN);
p2->x=x; p2->y=y;
p1->next=p2;
p2->next=NULL;
p1=p2;
}
void paint(int x,int y,int t) /*画棋子*/
{
setcolor(t);
setlinestyle(0,0,1);
circle(20*x+250,20*y+170,8);
setfillstyle(SOLID_FILL,t);
floodfill(20*x+250,20*y+170,t);
}
void jiemian2(void) /*下棋的界面*/
{
int i,j;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
dian[i][j]=1;
setcolor(8);
rectangle(236,156,404,324);
setfillstyle(SOLID_FILL,6);
bar(238,158,402,322);
setcolor(3);
rectangle(8,8,160,378);
bar(10,10,158,376);
settextstyle(0,0,1);
outtextxy(20,20,"LEFT : change");
outtextxy(20,50,"RIGHT : change");
outtextxy(20,80,"ENTER: play");
outtextxy(20,110,"ESC : leave");
setcolor(9);
outtextxy(20,200,"anything wrong:");
outtextxy(10,230,"zhenlin220@126.com");
qipan();
a.x=3;a.y=3;a.next=NULL;dian[3][3]=0; /*刚开局时候棋盘上的四个棋子*/
p=head=&a;p1=&a;
paint(3,3,0);
insert(3,4);paint(3,4,7); dian[3][4]=7;
insert(4,3);paint(4,3,7); dian[4][3]=7;
insert(4,4);paint(4,4,0); dian[4][4]=0;
}
void shine(int x,int y,int t) /*棋子闪烁*/
{
static int i=0,j=0;
if(i==x&&j==y) return 0;
do{
paint(x,y,t);
delay(50000);
paint(x,y,6);
delay(50000);
}while(!kbhit());
key=bioskey(0);
i=x;j=y;
}
void scan(int x,int y,int t) /*查找可以下子的位置或是要变颜色的棋子*/
{
int b,c,d,e,i,j,m,n,r;
K=0;
if(dian[x][y]==1) r=1;
else r=t;
b=x-1; c=x+1; d=y-1; e=y+1;
if(b<0) b=0; /*查一个子如黑子四周格子的情况,有可能出边界,把边界限制一下*/
if(c>7) c=7;
if(d<0) d=0;
if(e>7) e=7;
for(i=b;i<=c;i++)
for(j=d;j<=e;j++)
{
if(dian[i][j]==t||dian[i][j]==1) continue;

dx=i-x;dy=j-y;m=i;n=j;
while(dian[m][n]==s){m+=dx;n+=dy;}
if(dian[m][n]==r) continue;
if(m<0||m>7||n<0||n>7) continue;
result[K][0]=m;result[K][1]=n;
K++;
}
}
void vary(int x,int y,int t) /*下子,插入链表,查找并改变需要改变颜色的棋子*/
{
int i,m,n;
if(t==0) N+=1;
else M+=1;
paint(x,y,t);
insert(x,y);
scan(x,y,t);
dian[x][y]=t;
for(i=0;i<K;i++)
{
dx=result[i][0]-x;
dy=result[i][1]-y;
if(dx==0) dx=0;
else dx=dx/abs(dx);
if(dy==0) dy=0;
else dy=dy/abs(dy);
m=x; n=y; m+=dx; n+=dy;
do{
if(t==0) { N++; M--;}
else { M++; N--;}
paint(m,n,t);
dian[m][n]=t;
m+=dx; n+=dy;
}while(dian[m][n]!=t);
}
}
void presskey(int t) /*按键*/
{
int i;
for(i=0;i<K;i++)
{
if(computer) /*如果和电脑下并且这一步不是电脑下*/
do{
shine(result[i][0],result[i][1],t); /*闪烁棋子*/
}while(key!=0x4b00&&key!=0x4d00&&key!=0x1c0d&&key!=0x011b);/*如果没有按键继续闪烁*/
if(computer==0)
{
srand(time(NULL)); /*电脑下棋随机选择下哪个位置*/
i=rand()%K;
}
if(computer==0||key==0x1c0d)
{
vary(result[i][0],result[i][1],t);break;
}
if(key==0x011b) exit(0); /*如果按ESC离开游戏*/
}
}
void run(int t)
{
int i;
if(t==0) s=7;
if(t==7) s=0;
a: p=head;
do{
if(dian[p->x][p->y]==s) continue;
scan(p->x,p->y,t); /*查找可以下子的地方并存在result数组中*/
if(K==0) continue;
presskey(t);
if(computer==0||key==0x1c0d) break;
}while((p=p->next)!=NULL);
if(key==0x4b00||key==0x4d00) goto a;
}
void score(void) /*显示分数*/
{
char str1[4],str2[4];
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
setcolor(3);
rectangle(4,4,636,476);
setcolor(4);
rectangle(6,6,634,474);
setfillstyle(SOLID_FILL,YELLOW);
rectangle(8,380,632,472);
setcolor(9);
rectangle(10,382,630,470);
bar(12,384,628,468);
settextstyle(0,0,2);
setcolor(6);
outtextxy(280,400,"score");
sprintf(str1,"%d",N);
sprintf(str2,"%d",M);
outtextxy(120,430,"PLAYER1");
outtextxy(260,430,str1);
outtextxy(300,430,":");
outtextxy(330,430,str2);
if(COMPUTER=='1') outtextxy(390,430,"COMPUTER");
else outtextxy(390,430,"PLAYER2");
}
void winer(void) /*胜利显示*/
{
settextstyle(0,0,4);
setcolor(9);
if(N>M) outtextxy(200,50,"player1 win!");
else if(N<M) outtextxy(200,50,"player2 win!");
else outtextxy(200,50,"no winer!");
}
main()
{int i;
init(); /*初始化*/
jiemian1(); /*第一个界面*/
b:
cleardevice();
N=2; M=2; /*初始分数*/
jiemian2();
do{
if(COMPUTER=='1')
{
if(s==0) computer=1;
else computer=0;
}
score();
run(s);
}while(N+M!=64||N==0||M==0);
score();
winer();
settextstyle(0,0,1);
outtextxy(260,120,"press any key to restart");
getch();
goto b;
}

慢慢写。

这有
http://yuxuebao.blogchina.com/3339116.html
请仔细检查
祝你好运

傻b