C语言编写井字棋游戏 代码已有半成品

#include<stdio.h>#include<stdlib.h>intplayGame(chararray[]){voidplay(char,char*);inti... #include <stdio.h>
#include <stdlib.h>

int playGame(char array[])
{
void play(char,char*);
int i = 9;
char XorO;

while(i > 0)
{
if(i % 2 == 0)
{
XorO = 'O';
}
else
XorO = 'X';
printf("TIC - TAC - TOE!\n");
play(XorO,array);
i--;
}

}
void play(char XorO,char array[])
{
void displayArray(char*);
char score(char,char*);
int input;

displayArray(array);
printf("\n");
printf("Player %c,please the number in the display <1 - 9>\n",XorO);
printf("where you wish your mark to be placed.\n");
label:
scanf("%d",&input);
if(input > 9 || input < 1)
{
printf("Illegal move.Place %d is occupied.\n",input);
printf("Please make a different move.\n");
goto label;
}
array[input - 1] = XorO;
system("cls");

score(XorO,array);
}
void displayArray(char array[])
{
int i;
for(i = 0;i < 10;i++)
{
printf(" %c",array[i]);
if((i+1) % 3 == 0)
{
printf("\n");
}
}
}
char score(char winner,char array[])
{
int i;
printf("There are %d plays to be made.",i - 1);
if(array[0] == winner && array[1] == winner && array[2] == winner) return winner;
if(array[3] == winner && array[4] == winner && array[5] == winner) return winner;
if(array[6] == winner && array[7] == winner && array[8] == winner) return winner;
if(array[0] == winner && array[3] == winner && array[6] == winner) return winner;
if(array[1] == winner && array[4] == winner && array[7] == winner) return winner;
if(array[2] == winner && array[5] == winner && array[8] == winner) return winner;
if(array[0] == winner && array[4] == winner && array[8] == winner) return winner;
if(array[2] == winner && array[4] == winner && array[6] == winner) return winner;

i--;

}

int main()
{

char array[10];
int i;

for(i = 0; i < 10; i++)
{
array[i] = (char)('1' + i );
array[9] = '\0';
}
playGame(array);

return 0;
}
其中playGame()是显示当前是X玩家还是O玩家下子,play()用于提示用户输入,score()用于判断胜利并输出胜利玩家名字 或输出平局!!另外score()还用于提示玩家最多还剩余几步可走,

目前存在问题是:。。。无法对平局做出判定(我实在不会),无法正确输出最多还剩余几步可走(即score中的变量i不知在哪里初始化才正确),无法判定某个位置是否已经被占用 。。求改正
展开
 我来答
很黄很暴力789
2013-10-24
知道答主
回答量:9
采纳率:100%
帮助的人:3.6万
展开全部
你初始化一个字符数组,里面都给他一样的初始值 E
X 下了就改成X ,O 下了就改成 O,下完以后判断横竖斜三条线有没有一样的,

一共就九个格子,下一步就少一扒银手步 ,下之前判断一下,如果等于E ,就是空的,可以放子。
下完一步总步数减一,你这样不就能确定还有几步可以走了。
九步都下完如果没有横竖斜都一样的不就是平局吗,所有数组元素的值都不等于E了不就结束了,或者春嫌九步完了搏稿也结束了

另外,少用GOTO ,变量定义最好有意义,写点注释
百度网友587bc03
2013-10-24 · TA获得超过123个赞
知道答主
回答量:193
采纳率:0%
帮助的人:60.2万
展开全部
你这个井字棋游戏规则是什么?怎么判断输赢?
追问
三个子连成一条直线
追答
你SCORE函数里面判断谁赢谁输没包括完
我觉得可以设置一个标志位flag
if( 数组里面有三个子 == ‘X’ )
{
flag = x; //代表x获得胜利
}
else if( 数组里面有三个子 == ‘o')
{
flag = 'o';//代表0胜利
}
else if( 数组所有值都不等于原初始值 ) //表示整个棋盘都下满了,即平局
{
flag = 平局;
}
else //上面所有情况都不存在则表示棋局继续
{
flag = 继续
}

你的函数里面没有考虑到所有的情况,所以无法正确输出结果,而且感觉你的主函数没有能够形成满足一定条件后才结束的死循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式