C语言实验人机五子棋

大一上学期的时候,学校布置了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)</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值