#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <time.h>
#include <windows.h>
void qipan(char arr[][3])
{
system("cls");
printf(" | 0 | 1 | 2 \n");
for(int i=0;i<3;++i)
{
printf("---------------\n");
printf(" %d | %c | %c | %c\n", i, arr[i][0], arr[i][1], arr[i][2]);
}
}
void init(char arr[][3])
{
for(int i=0;i<3;++i)
{
for(int j=0;j<3;++j)
{
arr[i][j]=' ';
}
}
}
int pos_is_legal(char arr[][3],int i,int j)
{
if(i>2 || i<0 || j>2 || j<0)
{
printf("你的输入不合法\n");
return 0;
}
if(arr[i][j]!=' ')
{
printf("你输入的格子已被占用请重新输入\n");
return 0;
}
return 1;
}
char win(char arr[][3],int i,int j)
{
for(i=0;i<3;++i)
{
if(arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2])
{
return arr[i][1];
}
}
for(j=0;j<3;++j)
{
if(arr[0][j] == arr[1][j] && arr[0][j]==arr[2][j])
{
return arr[1][i];
}
}
if( (arr[0][0]==arr [1][1] && arr[1][1]==arr[2][2])||(arr[2][0]==arr[1][1]&&arr[1][1]==arr[0][2]))
{
return arr[1][1];
}
return 'N';
}
void computer_go(char arr[][3],int i,int j)
{
while(1)
{
int i=rand()%3;
int j=rand()%3;
if(arr[i][j]==' ')
{
arr[i][j]='O';
break;
}
}
}
int result(int*count, char arr[][3],int x,int y)
{
char key;
(*count)--;
key=win(arr,3,3);
switch(key)
{
case'X':
printf("你赢了~~~nb\n");
break;
case'O':
printf("你输了~~~真的菜\n");
break;
case'N':
if(*count==0)
{
printf("棋逢对手\n");
break;
}
return 1;
default:
return 1;
}
return 0;
}
int main()
{
int i,j;
srand(time(NULL));
char arr[3][3]={0};
int count = 9;
qipan(arr);
init(arr);
while(1)
{
printf("请出招\n");
scanf("%d %d", &i, &j);
if(!pos_is_legal(arr,i,j))
{
continue;
}
arr[i][j]='X';
if(result(&count,arr,i,j)==0)
{
break;
}
qipan(arr);
Sleep(1000);
computer_go(arr,i,j);
qipan(arr);
if(result(&count,arr,i,j)==0)
{
break;
}
}
system("pause");
return 0;
}
这是三子棋,是和低水平电脑的对局
在输入操作时请————》输入横排数字————》输入回车键—————》输入竖排数字
不然输入非法
新手小白,有写的不好的地方还请大家多多指正 !十分感谢!