您的位置:

三子棋的c语言程序实现,三子棋c语言代码

本文目录一览:

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

#includestdio.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=0;i3;i++)

for(j=0;j3;j++)

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=0;i3;i++)

for(j=0;j3;j++)

if(a[i][j]=='O'a[i][j+1]=='O'a[i][j+2]=='O')

return 1;

for(i=0;i3;i++)

for(j=0;j3;j++)

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=0;i3;i++)

for(j=0;j3;j++)

if(a[i][j]=='X'a[i][j+1]=='X'a[i][j+2]=='X')

return 1;

for(i=0;i3;i++)

for(j=0;j3;j++)

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=0;i3;i++)

for(j=0;j3;j++)

{

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]);

}

c语言程序设计---三子棋(相当于五子棋的小游戏)

首先你要知道学这些只是说明你是计算机专业的.五子棋并不是什么大型项目开发,只是一个算法的实现而已.如果你的C有够熟练,写一个五子棋算法很简单

你可以先在网上搜一下五子棋的算法,按他写的思路写一个程序出来,之后可以自己想想如何实现

用C语言设计一个“三子棋”的游戏,要求用上下左右光标控制。要程序源代码!

#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=0;inSize;i++)

for(int j=0;jnSize;j++)

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=0;inSize;i++)

for(int j=0;jnSize;j++)

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(nRownSize || nColnSize) //判断坐标越界

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;

}

求C语言高手指导!!!!!二维数组类似三子棋的简单问题!!!

很明显算法有问题。对于你这个题,你可以2个for()循环来做,

思想:

1,选对角线的元素来进行比较。

2,对每一个元素的时候 ,也就是a[0][0], 就把它和a[0][0],a[0][1],a[0][2]比较且相等的个数存在row_sum 中,同理把它和a[0][0],a[1][0],a[2][0]比较且相等的个数存在col_sum中。

3,如果在比较的过程中有不等的,不用本次(也就是这一行,或是这一列的比较)进行下一个对角线元素的比较。

4,查col_sum,row_sum 输出结果。

// 程序没有运行,直接在这打的,有问题再说,我的想法就是这样的。

#define MAX 3

int winner (int matrix[MAX][MAX]){

int col_sum,row_sum ;

for(int i = 0; i MAX ; i++)

{

row_sum = col_sum = 0;

for(int j = 0; j MAX ; j++)

{

if(matrix[i][i] == matrix[i][j])

{

row_sum ++;

}

else if(matrix[i][i] == matrix[j][i]

{

col_sum ++;

}

else

break;

}

if( col_sum == MAX || row_sum == MAX ) //说明有胜利的。

printf("%d is the winner\n",matrix[i][i]);

else

printf("No winner\n");

}