tic-tac-toe程序设计
如何对行与列进行双层循环来合并
#include<stdio.h>
int main(){
int size = 3;
int board[size][size];
int i,j;
int ret = -1;// -1表示无人赢 1表示x赢 0表示y赢
int x,y;
for ( i = 0; i < size; i++)
{
for ( j = 0; j < size; j++)
{
scanf("%d ",&board[i][j]); //用户输入1或O
}
}
for ( i = 0; i < size && ret == -1; i++)//行
{
x = 0;
y = 0;
for ( j = 0; j < size; j++)
{
if (board[i][j]==1)
{
x += 1;
} else
{
y += 1;
}
}
}
for ( j = 0; j < size && ret == -1; j++)//列
{
x = 0;
y = 0;
for ( i = 0; i < size; i++)
{
if (board[i][j]==1)
{
x += 1;
} else
{
y += 1;
}
}
if (x == size)
{
ret = 1;
} else if (y == size)
{
ret = 0;
}
}
for ( i = 0; i < size && ret == -1; i++)//从左至右对角线
{
x = 0;
y = 0;
for ( i = 0; i < size; i++)
{
if (board[i][i]==1)
{
x+=1;
} else
{
y+=1;
}
}
if (x == size)
{
ret = 1;
} else if (y == size)
{
ret = 0;
}
}
for ( i = 0; i < size && ret == -1; i++)//从右至左对角线
{
x = 0;
y = 0;
for ( i = 0; i < size; i++)
{
if (board[i][size-i-1]==1)
{
x+=1;
} else
{
y+=1;
}
}
if (x == size)
{
ret = 1;
} else if (y == size)
{
ret = 0;
}
}
if (ret == 1)
{
printf("x获胜\n");
}
else if (ret == 0)
{
printf("y获胜\n");
}
else
{
printf("无人获胜\n");
}
}
for ( i = 0; i < size; i++)
{
for ( j = 0; j < size; j++)
{
scanf("%d ",&board[i][j]); //用户输入1或O
}
}
可以写
for ( i = 0; i < size * size; i++)
{
scanf("%d",&board[i/size][i%size]); //注意%d后面别加空格
}
别的类似
不知道你这个问题是否已经解决, 如果还没有解决的话:tic-tac-toe 游戏——“三子棋”(井字棋)
要求:读入一个3*3的矩阵,矩阵中的数字为1表示该位置上有一个“×”,
为0表示该位置上有一个“O”;
程序判断这个矩阵中是否有获胜的一方,输出表示获胜一方的字符“×”或“O”,
或输出无人获胜。
#include<iostream>
using namespace std;
int main(){
/*tic-tac-toe 游戏
相当于五子棋变成“三子棋”(井字棋)
要求:读入一个3*3的矩阵,矩阵中的数字为1表示该位置上有一个“×”,
为0表示该位置上有一个“O”;
程序判断这个矩阵中是否有获胜的一方,输出表示获胜一方的字符“×”或“O”,
或输出无人获胜。
*/
const int size = 3;
int board[size][size];
int i, j;
int row_numfX, row_numf0;
int col_numfX, col_numf0;
int result = -1; // -1 :没人赢,1:X赢,0:O赢
//读入矩阵
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
scanf("%d", &board[i][j]);
}
}
//检查行、列
for (i = 0; i < size && result == -1; i++) {
row_numf0 = row_numfX = 0;
col_numfX = col_numf0 = 0;
for (j = 0; j < size; j++) {
//检查行
if (board[i][j] == 1) {
row_numfX++;
}
else {
row_numf0++;
}
//检查列
if (board[j][i] == 1) {
col_numfX++;
}
else {
col_numf0++;
}
}
if (row_numf0 == size || col_numf0==size) {
result = 0;
}
else if (row_numfX == size || col_numfX == size) {
result = 1;
}
}
//检查正对角线
row_numf0 = row_numfX = 0;
for (i = 0; i < size; i++) {
if (board[i][i] == 1) {
row_numfX++;
}
else {
row_numf0++;
}
}
if (row_numf0 == size) {
result = 0;
}
else if (row_numfX == size) {
result = 1;
}
//检查反对角线
row_numf0 = row_numfX = 0;
for (i = 0; i < size; i++) {
if (board[i][size - i - 1] == 1) {
row_numfX++;
}
else {
row_numf0++;
}
}
if (row_numf0 == size) {
result = 0;
}
else if (row_numfX == size) {
result = 1;
}
{ //打印矩阵,方便查看,调试用,可去掉
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
printf("%d\t", board[i][j]);
}
printf("\n");
}
}
printf("游戏结果:%d赢了。\n", result);
system("pause");
return 0;
}
问题中的参考资料已经给出了一个实现tic-tac-toe游戏的C语言程序。该程序通过双层循环来检查行和列,同时还检查了对角线。下面是参考资料中给出的代码:
#include <stdio.h>
int main()
{
const int SIZE = 3;
int board[SIZE][SIZE];
int i, j;
int numX1, numX2;
int numO1, numO2;
int result = -1; //-1:没人赢, 1:X赢, 0:O赢
//读入矩阵
printf("请输入井字棋结果,格式如下:\n1 0 1\n0 1 0\n0 1 0\n");
for ( i=0; i<SIZE; i++ ) {
for( j=0; j<SIZE; j++ ) {
scanf("%d", &board[i][j]);
}
}
//检查行和列
for ( i=0; i<SIZE && result==-1; i++ ) {
numX1 = numX2 = 0;
numO1 = numO2 = 0;
for(j=0; j<SIZE; j++){
if ( board[i][j] == 1 ) {
numX1 ++;
} else {
numO1 ++;
}
if ( board[j][i] == 1 ) {
numX2 ++;
} else {
numO2 ++;
}
}
if ( numX1==SIZE || numX2==SIZE ) {
result = 1;
}else if ( numO1==SIZE || numO2==SIZE ) {
result = 0;
}
}
//检查对角线
numX1 = numX2 = 0;
numO1 = numO2 = 0;
for ( i=0; i<SIZE; i++ ){
if( board[i][i] == 1 ) {
numX1 ++;
} else {
numO1 ++;
}
if( board[i][SIZE-i-1] == 1 ) {
numX2 ++;
} else {
numO2 ++;
}
if ( numX1==SIZE || numX2==SIZE ) {
result = 1;
}else if ( numO1==SIZE || numO2==SIZE ) {
result = 0;
}
}
//输出结果
if( result == -1){
printf("无人获胜\n");
} else if ( result == 1) {
printf("X获胜\n");
} else {
printf("O获胜\n");
}
return 0;
}