五子棋游戏程序开发实验报告

  • 格式:doc
  • 大小:178.50 KB
  • 文档页数:33

下载文档原格式

  / 33
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

代码:

#include

#include

char chess[20][20]; //棋盘

int draw[15][15][4][5]; //记录平局

int flag[20][20]; //判断是否已有落子

int mark[20][20]; //判断是否历遍该处

int count[20][20],num=0; //每个点构成活三、活四、冲四的数目

int score=0; //记录每个点的可去性

int round=0; //记录回合数

int victor=0; //victor=1时表胜利,victor=-1时表失败

int act_two_num=0,act_one_num=0;

int dead_three_num=0; //记录活二(一)数

char chess_kind1[11][20]={"x+xxx","xx+xx","xxx+x","xxxx+","+xxxx",

"++xxx+","+x+xx+","+xx+x+","+xxx++","+xxxx+","xxxxxx"};

char chess_kind2[11][20]={"o+ooo","oo+oo","ooo+o","oooo+","+oooo",

"++ooo+","+o+oo+","+oo+o+","+ooo++","+oooo+","oooooo"};

char chess_kind3[6][20]={"+xx+++","++xx++","+++xx+","+x+x++","++x+x+","+x++x+"}; char chess_kind4[6][20]={"+oo+++","++oo++","+++oo+","+o+o++","++o+o+","+o++o+"}; char chess_kind5[4][20]={"+x++++","++x+++","+++x++","++++x+"};

char chess_kind6[14][20]={"+o++++","++o+++","+++o++","++++o+"};

char chess_kind7[10][20]={"ox+x+x","ox+xx+","ox++xx","oxx++x","oxxx++",

"x+x+xo","+xx+xo","xx++xo","x++xxo","++xxxo"};

char chess_kind8[10][20]={"xo+o+o","xo+oo+","xo++oo","xoo++o","xooo++",

"o+o+ox","+oo+ox","oo++ox","x++xxo","++ooox"};

//初始化mark,count,draw

void initial(){

int i=0,j=0,k=0,l=0;

for(i=0;i<15;i++){

for(k=0;k<4;k++){

for(l=0;l<15;l++){

draw[i][j][k][l]=0;

}

}

}

}

for(i=0;i<15;i++){

for(j=0;j<15;j++){

mark[i][j]=0;

count[i][j]=0;

}

}

}

//选择棋色

int chose_color(){

int chose;

printf("\t\t\t\tx:黑棋o:白棋\n\n"); printf("\t\t\t\t选择棋色\n");

printf("\t\t\t\t1 黑棋\n");

printf("\t\t\t\t2 白棋\n");

printf("\t\t\t\t");

scanf("%d",&chose);

if(chose==1)

return 1;

else

return 0;

}

//平局检测

int check_draw(char oppsite){

int r=0,c=0,i=0,j=0,k=0;

int l=0,m=0,n=0,p=0;

int *x[4]={&p,&l,&m,&l};

int *y[4]={&l,&p,&l,&l};

for(r=0;r<15;r++){

for(k=0;k<4;k++)

for(i=0;i<5;i++){

for(j=4;j>=0;j--){

l=i-j;

m=j-i;

if(judge_boundary((r+1)+*x[k],(c+1)+*y[k])==1){

draw[r][c][k][i]=1;

break;

}else{

if(chess[r+*x[k]][c+*y[k]]==oppsite){

draw[r][c][k][i]=1;

break;

}

}

}

}

}

}

for(r=0;r<15;r++){

for(c=0;c<15;c++){

for(k=0;k<4;k++){

for(i=0;i<5;i++){

if(draw[r][c][k][i]==0)

return 0;

}}}}

return 1;

}

//判断输入是否越界

int judge_boundary(int row,int col){

if(row>15||row<1||col>15||col<1)

return 1;

else

return 0;

}