just luck more:要用C语言编一个类似五子棋的游戏“只有三行三列的只要谁先下到三个相连的谁就胜出”这应该怎么去编呢

来源:百度文库 编辑:高校问答 时间:2024/05/09 04:58:16

下面有源程序,可以自己稍微修改修改

//用一个数组表示棋子,表示每一格当前的状态
//而胜利的情况只有8种(三横,三竖,两个对角),
//当每走一步你对比有没有这8种情况发生,如果有,则刚刚走的人胜利
//如
int chessman[9];//=1表示玩家1走的棋子,=2表示玩家2走的棋子
int victory[8][3]={{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};

//开始游戏,初始化
void initialize()
{
for (int i=0;i<9;i++)
{
chessman[i]=0;
}
}

//判断游戏某方是否胜利,返回1表示玩家1胜利 ,返回2表示玩家2胜利,其它没有胜利
int isWin()
{
for (int i=0;i<8;i++)
{
//如果某胜利盘全部为玩家的棋子,则胜利
if (chessman[victory[i][0]]==1 && chessman[victory[i][1]]==1 && chessman[victory[i][2]]==1)
return 1;
if (chessman[victory[i][0]]==2 && chessman[victory[i][1]]==2 && chessman[victory[i][2]]==2)
return 2;
}
return 0;
}

//走棋,参数为哪一格
bool step(int position,int player)
{
//判断此格是否已经有棋子
if (chessman[position])
{
printf("此格已经有棋子\n");
return false;
}
else
{
chessman[position]=player;
return true;
}
}
//绘制棋盘
void draw()
{
printf("\n-------\n");
printf("|");
for (int i=0;i<9;i++)
{
if (i%3==0 && i!=0) printf("\n|");
if (chessman[i]==0) printf(" ");
else if (chessman[i]==1) printf("*");
else if (chessman[i]==2) printf("+");
printf("|");
}
printf("\n-------\n");
}

void main()
{
int position=-1, turn=1;//当前是轮到谁,默认玩家1开始游戏
char playar1[]="nipper", playar2[]="huang";//玩家名字
initialize();//初始化游戏数据

do
{
draw();
printf("\n请输入要走的格子编号:",);
scanf("%d",&position);
if (step(position,turn))
{
turn=turn==1?2:1;
}
}
while (isWin()==0);
if (turn==1)
printf("%s 胜利!",playar2);
else if (turn==2) printf("%s 胜利!",playar1);
else printf("平局!");

getch();
}