#include "stdafx.h"
#include
using namespace std;
void check(int i,int j); //检查每条直线上的各方棋子的数量
int other(int b,int c);
void check_win(); //检查是否胜利
void begin(char ch);
void computer(); //电脑下棋
void user(); //用户下棋
int a[4][4],deep;
int line[3][3][2]; //全局变量,用来存放每条直线上的各方棋子数!
//第一维下标表示是行列还是对角线,第二维下标表示第几条直
线
//第三维下标表示各方的棋子数!
void main()
{
char ch;
cout<
输入 u 则您先手 ,输入 c 则电脑先手! (小写) \n"<
do
{
cin>>ch;
if(ch!='u'&&ch!='c') cout<
}while(ch!='u'&&ch!='c'); //非法处理
if(ch=='u') cout<
else if(ch=='c') cout<
begin(ch);
}
void begin(char ch)
{
int i,j,k;
a[1][1]=1;
cout<
\n"<
for(i=1;i<4;i++)
for(j=1;j<4;j++)
{
if(j==1)
if(i==1);
else a[i][j]=a[i-1][3]+1;
else a[i][j]=a[i][j-1]+1;
} //初始化棋盘
for(i=0;i<3;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
line[i][j][k]=0;
deep=0;
if(ch=='u') user();
else computer();
}
void computer()
{
int i,j,flag=0,m; //flag 判断是否落子
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if (line[i][j][0]==2&&line[i][j][1]==0&&flag==0)
{
m=other(i,j);
if(m%3==0) {a[m/3][3]=40;check(m/3,3);}
else {a[m/3+1][m%3]=40; check(m/3+1,m%3);} //40 是#的 ASCII
码减 48
flag=1;
} //当某条直线上用户有两棋子而
我方无棋子时,在该直线的另一点落子
if (line[i][j][1]==2&&line[i][j][0]==0&&flag==0)
{
m=other(i,j);
if(m%3==0) {a[m/3][3]=40;check(m/3,3);}
else {a[m/3+1][m%3]=40; check(m/3+1,m%3);} //当某条直线上
我方有两棋子而对方无棋子时,在该直线的另一点落子
flag=1;
}
if (line[i][j][1]==1&&line[i][j][0]==0&&flag==0)
{
m=other(i,j);
if(m%3==0) {a[m/3][3]=40;check(m/3,3);}
else {a[m/3+1][m%3]=40; check(m/3+1,m%3);} // 当某条直线上
我方有一棋子而对方无棋子时,在该直线的另一点落子
flag=1;
}
}
if(flag==0)
if (a[2][2]==5)
{
a[2][2]=72;
flag=1;
check(2,2);
} //优先下第 5 个位置
else{
for(i=2;i<9&&flag==0&&a[i][j]==(i-1)*3+j;i+=2)
{
if(i%3==0) {a[i/3][3]=40;check(i/3,3);}
else {a[i/3+1][i%3]=40; check(i/3+1,i%3);}
flag=1;
} //2,4,6,8 其次
for(i=1;i<9&&flag==0&&a[i][j]==(i-1)*3+j;i+=2)
{
if(i%3==0) {a[i/3][3]=40;check(