五子棋游戏程序开发实验报告
- 格式:doc
- 大小:178.50 KB
- 文档页数:33
代码:
#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;
}