大一上学期的时候,学校布置了C语言期末大作业,当时借鉴了许多优快云上大佬的想法,半年多后想起来,决定将代码上传,共同学习。(当时是小白第一次进行较为复杂的代码,可能有些乱,多包涵!!!)
1.头文件及全局定义
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <Windows.h>
#include <ctime>
#include <cstdlib>
int t2[361];
void InitBoard(char a[20][20],int row,int col)
{
memset(a,' ',row*col*sizeof(char));
}//将数组全部赋为空
2.棋盘
void qi(char a[20][20])
{
for(int i=1;i<20;i++)
{
if(i==1)
{
printf(" ");
for(int m=0;m<19;m++)
{
printf("|%02d",m+1);
}
printf("\n");
for(int n=0;n<20;n++)
{
printf("---");
}
}
printf("\n");
printf("%02d",i);
for(int j=1;j<20;j++)
{
if(j!=19)
{
printf("| %c",a[i][j]);
}
if(j==19)
{
printf("| %c|",a[i][j]);
}
}
printf("\n");
for(int k=0;k<20;k++)
{
printf("-- ");
}
}
printf("\n");
}
棋盘较为简洁,主要是数组加上想象。
3.落子(人)
void ren(char a[20][20])
{
while(1)
{
printf("请选择落子行列:");
int x,y;
scanf("%d%d",&x,&y);
if((x<=0)||(x>=20)||(y<=0)||(y>=20))
{
printf("阁下莫不是老眼昏花了?\n");
continue;
}
if(a[x][y]!=' ')
{
printf("这是何意?\n");
continue;
}
a[x][y]='x';
break;
}
system("cls");
qi(a);
}
人这里主要是判断落子处是否出界,或者落在已经有子的地方。
4.落子(机)
int judge(char a[20][20],int i,int j)
{
int m=0;
int n1=1;
int n2=1;
int x1,y1;
int x2,y2;
int X[8]={
0,0,1,1,1,-1,-1,-1};
int Y[8]={
1,-1,0,1,-1,0,1,-1};
for(int k=0;k<8;k++)
{
x1=i+X[k];
y1=j+Y[k];
while(a[x1][y1]=='o')
{
m=m+n1;
x1=x1+X[k];
y1=y1+Y[k];
n1++;
if((n1==4)&&(a[x1][y1]==' '))
{
m=m+100;
}
if((n1==3)&&(a[x1-4*X[k]][y1-4*Y[k]]=='o')&&(a[x1-5*X[k]][y1-5*Y[k]]==' ')&&(a[x1][y1]==' '))
{
m=m+100;
}
if((n1==3)&&(a[x1][y1]==' ')&&(a[x1-4*X[k]][y1-4*Y[k]]==' ')&&(a[x1-3*X[k]+X[k+1]][y1-3*Y[k]+Y[k+1]]=='o')&&(a[x1-3*X[k]+2*X[k+1]][y1-3*Y[k]+2*Y[k+1]]=='o')&&(a[x1-3*X[k]+3*X[k+1]][y1-3*Y[k]+3*Y[k+1]]==' '))
{
m=m+500;
}
if((n1==5)&&(a[x1][y1]=='x'))
{
m=m+20000;
}
if((n1==5)&&((x1==0)||(x1==20)||(y1==0)||(y1==20)))
{
m=m+20000;
}
if((n1==3)&&(a[x1-4*X[k]][y1-4*Y[k]]=='o')&&(a[x1-5*X[k]][y1-5*Y[k]]=='o'))
{
m=m+20000;
}
if((n1==4)&&(a[x1-5*X[k]][y1-5*Y[k]]=='o'))
{
m=m+20000;
}
}
x2=i+X[k];
y2=j+Y[k];
while(a[x2][y2]=='x')
{
m=m+1;
m=m+n2;
x2=x2+X[k];
y2=y2+Y[k];
n2++;
if((n2==3)</