本文目录一览:
- 1、求c语言编程九个格子三子棋,可以对着下棋,而且还可以判断输赢
- 2、c语言程序设计---三子棋(相当于五子棋的小游戏)
- 3、用C语言设计一个“三子棋”的游戏,要求用上下左右光标控制。要程序源代码!
- 4、求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");
}