int main()
{
void picture(char a[3][3])
int Osheng(char a[3][3])
int Xsheng(char a[3][3])
int ping(char a[3][3])
int i,j,x,y
char a[3][3]
for(i=0i<3i++)
for(j=0j<3j++)
a[i][j]=' '
picture(a)
while(1)
{
int a1=1
while(1)//下X子
{
for(a1)
{
printf("请输入O子下的位置: ")//输入o子的位置
scanf("%d%d",&x,&y)
if(a[x][y]=='O'||a[x][y]=='X')//判断是否已有子
{
printf("已有子请重下")
continue
}
else if(x>=3||y>=3)
{
printf("输入错误请重输")
continue
}
else
{
a[x][y]='O'
a1=0
}
break
}
break
}
picture(a)//下好O子后将棋盘显示
if(Osheng(a))
{
printf("O子获胜")
break
}
while(1)//下X子
{
printf("请输入X子下的位置: ")//输入O子的位置
scanf("%d%d",&x,&y)
if(a[x][y]=='O'||a[x][y]=='X')//判断是否已有子
{
printf("已有子请重下")
continue
}
else if(x>=3||y>=3)
{
printf("输入错误请重输")
printf("请输入X子下的位置: ")
scanf("%d%d",&x,&y)
continue
}
a[x][y]='X'
break
}
picture(a)
if(Xsheng(a))
{
printf("X子获胜")
break
}
if(ping(a))
{
printf("平局")
break
}
}
int Osheng(char a[3][3])
{
int i,j
for(i=0i<3i++)
for(j=0j<3j++)
if(a[i][j]=='O'&&a[i][j+1]=='O'&&a[i][j+2]=='O')
return 1
for(i=0i<3i++)
for(j=0j<3j++)
if(a[i][j]=='O'&&a[i+1][j]=='O'&&a[i+2][j]=='O')
return 1
if(a[1][1]=='O'&&a[2][2]=='O'&&a[3][3]=='O')
return 1
if(a[1][3]=='O'&&a[2][2]=='O'&&a[3][1]=='O')
return 1
return 0
}
int Xsheng(char a[3][3])【就是在这里错的】
{
int i,j
for(i=0i<3i++)
for(j=0j<3j++)
if(a[i][j]=='X'&&a[i][j+1]=='X'&&a[i][j+2]=='X')
return 1
for(i=0i<3i++)
for(j=0j<3j++)
if(a[i][j]=='X'&&a[i+1][j]=='X'&&a[i+2][j]=='X')
return 1
if(a[1][1]=='X'&&a[2][2]=='X'&&a[3][3]=='X')
return 1
if(a[1][3]=='X'&&a[2][2]=='X'&&a[3][1]=='X')
return 1
return 0
}
int ping(char a[3][3])
{
int i,j
for(i=0i<3i++)
for(j=0j<3j++)
{
if(a[i][j]==' ')
return 0
}
return 1
}
void picture(char a[3][3])
{
printf("%c|%c|%c\n",a[0][0],a[0][1],a[0][2])
printf("-+-+-\n")
printf("%c|%c|%c\n",a[1][0],a[1][1],a[1][2])
printf("-+-+-\n")
printf("%c|%c|%c\n",a[2][0],a[2][1],a[2][2])
}
#include <iostream>#include <string>
using namespace std
class CGobang //棋子类
{
private:
char chSort //棋子的类别
int nWin//赢棋的次数
int nLose //输棋的次数
static int nDraw//平局次数
static char achBoard[3][3] //棋盘
static int nSize//棋盘的尺寸 nSize X nSize
public:
CGobang(char chsort) //构造函数,决定一方棋子的类别
{
chSort=chsort
nWin=nLose=nDraw=0
}
void PlayTurn(void) //走1步棋
int Judge() //判断是否连成一线,是则返回1,否则返回0
void Win(void) //赢棋
void Lose(void) //输棋
static void Draw(void) //平局
void PrintInfo(void)//输出总体情况
static void PrintBoard(void)//输出棋盘
static int GetFull(void)//判断棋盘是否已布满棋子
static void InitialBoard(void) //初始化棋盘
}
char CGobang::achBoard[3][3]
int CGobang::nSize = 3
int CGobang::nDraw = 0
void CGobang::Draw()
{
cout <<"\n\n\t\t平局!\n\n"
nDraw++
}
void CGobang::InitialBoard() //初始化棋盘
{
for(int i=0i<nSizei++)
for(int j=0j<nSizej++)
achBoard[i][j]=' '
}
void CGobang::PrintBoard()//输出棋盘
{
cout <<endl
cout <<" 1 2 3 " <<endl
cout <<"1 " <<achBoard[0][0] <<" | " <<achBoard[0][1] <<" | " <<achBoard[0][2] <<endl
cout <<" ---|---|---" <<endl
cout <<"2 " <<achBoard[1][0] <<" | " <<achBoard[1][1] <<" | " <<achBoard[1][2] <<endl
cout <<" ---|---|---" <<endl
cout <<"3 " <<achBoard[2][0] <<" | " <<achBoard[2][1] <<" | " <<achBoard[2][2] <<endl
cout <<endl
cout <<endl
}
int CGobang::GetFull()//判断棋盘是否布满棋子,若是返回1
{
for(int i=0i<nSizei++)
for(int j=0j<nSizej++)
if(achBoard[i][j]!=' ')
return 0
return 1
}
void CGobang::Win() //赢棋
{
cout <<"\n\n\t\t"<<chSort<<"方获胜!\n\n"
nWin++
}
void CGobang::Lose() //输棋
{
nLose++
}
void CGobang::PlayTurn(void) //走1步棋
{
int nRow,nCol
cout <<"现在该 "<<chSort<<" 方下棋,请输入棋盘坐标(x,y):"
do
{
cin >>nRow >>nCol //输入坐标
if(nRow>nSize || nCol>nSize) //判断坐标越界
cout <<"输入的坐标越界,x与y的范围应小于等于"<<nSize<<",请重新输入\n"
else if(achBoard[nRow-1][nCol-1]!=' ') //判断坐标合理
cout <<"棋盘("<<nRow <<" ,"<<nCol <<")处已有棋子,请重新输入\n"
else
{
achBoard[nRow-1][nCol-1]=chSort //在坐标处放上棋子
break //退出循环
}
}while(1)
}
int CGobang::Judge() //判断是否棋子连成一线,若是返回1
{//以下是各种可能连成一线的情况
if(achBoard[0][0]==chSort &&achBoard[1][1]==chSort &&achBoard[2][2]==chSort)
return 1
else if(achBoard[2][0]==chSort &&achBoard[1][1]==chSort &&achBoard[0][2]==chSort)
return 1
else if(achBoard[0][0]==chSort &&achBoard[1][0]==chSort &&achBoard[2][0]==chSort)
return 1
else if(achBoard[0][1]==chSort &&achBoard[1][1]==chSort &&achBoard[2][1]==chSort)
return 1
else if(achBoard[0][2]==chSort &&achBoard[1][2]==chSort &&achBoard[2][2]==chSort)
return 1
else if(achBoard[0][0]==chSort &&achBoard[0][1]==chSort &&achBoard[0][2]==chSort)
return 1
else if(achBoard[1][0]==chSort &&achBoard[1][1]==chSort &&achBoard[1][2]==chSort)
return 1
else if(achBoard[2][0]==chSort &&achBoard[2][1]==chSort &&achBoard[2][2]==chSort)
return 1
else
return 0//没有连成一线则返回0
}
void CGobang::PrintInfo(void) //打印总体情况
{
cout <<"Side "<<chSort<<"方共计赢 "<<nWin<<" 局,输 "<<nLose<<" 局,平 "<<nDraw<<" 局。"<<endl
}
void PrintRule(void) //打印规则
{
cout <<"\t\t欢迎使用三子连珠游戏!" <<endl <<endl
cout <<"\t游戏规则:" <<endl
cout <<"\t1.每1步输入要下棋的格子的x,y坐标,按Enter键\n"
cout <<"\t2.有1方首先3个棋子连成一线即判获胜\n"
cout <<"\t3.当棋子布满棋盘但仍无获胜方即为平局\n"
cout <<"\t4.X方先行\n"
cout <<"\n\n\t\t请按任意键开始下棋!\n\n"
}
int JudgePlay(CGobang &SideX,CGobang &SideO) //每下1步要进行输赢的判断,有结果则返回1
{
if(SideX.Judge()) //X方获胜
{
SideX.Win()
SideO.Lose()
return 1
}
else if(SideO.Judge())//O方获胜
{
SideO.Win()
SideX.Lose()
return 1
}
else
return 0
}
void Play(CGobang &SideX,CGobang &SideO) //开始一局游戏
{
while(1)
{
CGobang::PrintBoard() //输出棋盘
SideX.PlayTurn()//X方下棋
if(JudgePlay(SideX,SideO))//判断输赢
break
if(CGobang::GetFull())//判断是否平局
{
CGobang::Draw()
break
}
CGobang::PrintBoard() //输出棋盘
SideO.PlayTurn()//O方下棋
if(JudgePlay(SideX,SideO))//判断输赢
break
if(CGobang::GetFull())//判断是否平局
{
CGobang::Draw()
break
}
}
}
int main(void)
{
CGobang SideX('X'),SideO('O') //定义两个棋子类对象,分别代表X方与O方
PrintRule()
cin.get()
string strChoice
do
{
CGobang::InitialBoard() //初始化棋盘
Play(SideX,SideO) //开始下一局
cout <<"是否继续(Y/N)?"
cin >>strChoice
}while(strChoice == "Y" || strChoice == "y")
SideX.PrintInfo()
SideO.PrintInfo()
cout <<"\n\n\t欢迎再次使用三子连珠游戏!" <<endl <<endl
return 0
}
就是初学者,入门的水平。是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。游戏规则:如果两个人都掌握了技巧,那么一般来说就是平棋。一般来说,第二步下在中间最有利(因为第一步不能够下在中间),下在角上次之,下在边上再次之。最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了。
水平是一个词语,有多种不同解释,指平行于水面的水平线,又可用于表示在某一专业方面所达到的高度,也可表示统计学水平(Level),在铁道工程上,水平是指线路左右两股钢轨顶面的相对高差。