三子棋 代码求助!!!
要求更改函数first 和函数second(即先下还是后下)让赢的几率更大!! 让更改后的代码实现电脑自动下棋..(就是说我编写的first函数和你编写second函数放在一起看先手能赢还是后手能赢) #include<iostream>
#include<cstdlib>
using namespace std ;
//////////////////////////////////////////////////////
void first(const char chess[3][3],int &x,int &y)//定义先手函数;
{
for (int i = 0;i<3;++i)
{
for (int j=0;j<3;++j)
{
if (chess[i][j]==' ')
{
x=i;y=j;
}
}
}
}
///////////////////////////////////////////////////
void second(const char chess[3][3],int &x,int &y)//定义后手函数;
{
for (int i = 0;i<3;++i)
{
for (int j=0;j<3;++j)
{
if (chess[i][j]==' ')
{
x = i; y=j;
}
}
}
}
//////////////////////////////////////////////////////////////
void printchessboard(const char chess[3][3]) /*打印棋盘*/
{
int i,j;
cout<<" -------"<<endl;
for (i = 0;i<3;++i)
{
cout<<"| ";
for (j = 0;j<3;++j)
cout<<chess[i][j]<<' ';
cout<<"| ";
cout<<endl;
}
cout<<" ------"<<endl;
}
int judge(char chess[3][3],int x,int y,char ch)//胜返回1,负返回2,平返回0,无法判断胜负-1;
{
if (x>2 || x<0 || y>2 || y<0 || chess[x][y]!=' ')
return 2; //无效落子;
chess[x][y] = ch;
int i,j;
for (i=0;i<3;++i) //判断i行是否全一致
if (chess[i][0]==chess[i][1] && chess[i][1]==chess[i][2] && chess[i][0]!=' ')
return 1;
for (i=0;i<3;++i) //判断i列是否全一致
if (chess[0][i]==chess[1][i] && chess[1][i]==chess[2][i] && chess[0][i]!=' ')
return 1;
//判断3*3棋盘对角线是否全一致
if (chess[0][0]==chess[1][1] && chess[1][1]==chess[2][2] && chess[1][1]!=' ')
return 1;
//判断3*3棋盘对角线是否全一致
if (chess[2][0]==chess[1][1] && chess[1][1]==chess[0][2] && chess[1][1]!=' ')
return 1;
int flag = 0;
for (i = 0;i<3;++i)
for (j=0;j<3;++j)
if (chess[i][j]==' ') return -1;
return 0;
}
///////////////////////////////////////////
void initalchessboard(char chess[3][3])
{
int i,j;
for (i=0;i<3;++i)
for(j=0;j<3;++j)
chess[i][j] = ' ';
}
///////////////////////////////////////////
int main()
{
char chessboard[3][3],piece;//生成3*3的2维数组,和字符型变量piece;
initalchessboard(chessboard);//调用initalchessboard函数,传入实参chessboard;
int turn = 0,X,Y,result;//生成整形变量X,Y,result,turn,并且将turn初始化为0;
while (1)
{
system("cls");//清除屏幕;
if (turn++%2==0)//判断是先手下棋还是后手下棋;
{
first(chessboard,X,Y);//调用先手函数、并且传入实参chessboard,X,Y;
piece = 'A';//将字符A赋值给piece;
}
else
{
second(chessboard,X,Y);//调用后手函数,出入实参chessboard,X,Y;
piece = 'B';//将字符B赋值给piece;
}
result = judge(chessboard,X,Y,piece);//将判断的结果赋值给result;
cout<<"当前比赛为第"<<turn<<"手棋"<<endl;//输出当前比赛的第几手棋;
printchessboard(chessboard);//调用printchessboard函数并且传入实参;再次打印棋盘
if (result==0)//双方打平;
{
cout<<"双方打平"<<endl;
}
else if (result==2)//输掉比赛;
{
if (piece=='A')
cout<<"先手方犯规,输掉比赛"<<endl;
else
cout<<"后手方犯规,输掉比赛"<<endl;
break;
}
else if (result==1)//比赛胜利;
{
if (piece=='A')
cout<<"先手方胜!!!!比赛结束!!!!"<<endl;
else
cout<<"后手方胜!!!!比赛结束!!!!"<<endl;
break;
}
else
{
cout<<"未分出胜负,比赛继续"<<endl;
}
system("pause");//走完前一步棋停顿一下再走第二步棋;
}
system("pause");
}