求c语言编程九个格子三子棋,可以对着下棋,而且还可以判断输赢

Python016

求c语言编程九个格子三子棋,可以对着下棋,而且还可以判断输赢,第1张

#include<stdio.h>

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),在铁道工程上,水平是指线路左右两股钢轨顶面的相对高差。