当前位置:首页 » 编程语言 » c语言井字棋判断
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言井字棋判断

发布时间: 2022-12-23 09:52:51

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

你初始化一个字符数组,里面都给他一样的初始值 E
X 下了就改成X ,O 下了就改成 O,下完以后判断横竖斜三条线有没有一样的,

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

另外,少用GOTO ,变量定义最好有意义,写点注释

❷ c语言井字游戏的问题求助!

错误集中在下面这段语句,即输入下棋位置的合理性判断。
do
{
printf("Player %d,please enter where you want to put your %c:",player,(player==1)?'x':'o');
scanf("%d",&choice);
row=--choice/3;
column=--choice%3; // 第一处错误
}while(i<1||i>9||board[row][column]>'9'); // 第二处错误
第一处错误是:column=--choice%3;
原因:--运算符没搞清楚。--运算符意思是先减一,再做别的运算。那么,这句话就相当于 choice -= 1; coloumn = choice%3; 这样就看出来, choice -= 1;这半句话是多余的,只要出现在 row=--choice/3;这里就足够了。
因为这里多运算了一次choice-1,所以输入1的时候行运算正确而列运算少了1,要么触碰边界,要么遇到了其他格子。

由于--运算符很容易出错,所以一般谨慎的程序员很少用,转而用复杂的语句代替,至少意思比较明白。

第二处错误是: i<1||i>9
原因:i 这里应该是棋手的落子顺序。第一手是0,判断为棋手1。但是用在这个语句里明显出错。这个语句应当是判断棋手落子的位置,即是不是下在棋盘外面,所以应当是choice<1 || choice>9,然而结合第一处错误,仍然是错的,因为choice已经在计算row 和column的时候被改变了。

因为这处错误,第一手棋永远无法走完,因为i初始值为0,满足i<1这个条件,进而出现死循环

结合两处错误,建议这样改:

do
{
printf("Player %d,please enter where you want to put your %c:",player,(player==1)?'x':'o');
scanf("%d",&choice);
row=(choice-1)/3; // 修改
column=(choice-1)%3; // 修改
}while(choice<1||choice>9||board[row][column]>'9'); // 修改

❸ C语言 怎么编程井字棋

一两句话说不明白,你先做个简单的流程规划,把这个问题细化,然后再考虑每一步都需要怎么做,比如需要建立几个类,需要定义什么变量,如何存贮等问题。这个必须一步步来,哪有你这样解决问题的

❹ 用C语言,编程,求助大神

时间仓促,做得比较简陋。

#include<stdio.h>
#include<windows.h>
#include<conio.h>
voidmenu();
voidgame();
intmain()
{
intn=0;
menu();
while(scanf("%d",&n))
{
system("cls");
menu();
switch(n)
{
case1:game();break;
case2:return0;
default:printf("请重新输入:");
}

}
}
voidmenu()
{
printf("********** ");
printf("*井字棋小游戏* ");
printf("*按1开始游戏* ");
printf("*按2退出游戏* ");
printf("********** ");
}
voidgame()
{
printf("请在小键盘输入1-9");
intstep_number=1;
intboard[3][3]={0};
while(1)
{
charnum;
num=getch();
system("cls");
if(num=='1')board[2][0]+=step_number++;
if(num=='2')board[2][1]+=step_number++;
if(num=='3')board[2][2]+=step_number++;
if(num=='4')board[1][0]+=step_number++;
if(num=='5')board[1][1]+=step_number++;
if(num=='6')board[1][2]+=step_number++;
if(num=='7')board[0][0]+=step_number++;
if(num=='8')board[0][1]+=step_number++;
if(num=='9')board[0][2]+=step_number++;
for(inti=0;i<3;i++)//打印棋盘
{
printf(" ");
for(intj=0;j<3;j++)
{
if(board[i][j]==0)printf("_");
elseif(board[i][j]%2==1)printf("X");
elseif(board[i][j]%2==0)printf("O");
}
}

for(inti=0;i<3;i++)
{
if(board[i][0]!=0&&board[i][1]!=0&&board[i][2]!=0)
{
if(board[i][0]%2==1)
{
if(board[i][0]%2==board[i][1]%2&&board[i][0]%2==board[i][2]%2)
printf(" X方胜! ");
}
if(board[i][0]%2==0)
{
if(board[i][0]%2==board[i][1]%2&&board[i][0]%2==board[i][2]%2)
printf(" O方胜! ");
}
}


}
for(intj=0;j<3;j++)
{
if(board[0][j]!=0&&board[1][j]!=0&&board[2][j]!=0)
{
if(board[0][j]%2==1)
{
if(board[0][j]%2==board[1][j]%2&&board[0][j]%2==board[2][j]%2)
printf(" X方胜! ");
}
if(board[0][j]%2==0)
{
if(board[0][j]%2==board[1][j]%2&&board[0][j]%2==board[2][j]%2)
printf(" O方胜! ");
}
}

}
if(board[0][0]!=0&&board[1][1]!=0&&board[2][2]!=0)
{
if(board[0][0]%2==1)
{
if(board[0][0]%2==board[1][1]%2&&board[0][0]%2==board[2][2]%2)
printf(" X方胜! ");
}
if(board[0][0]%2==0)
{
if(board[0][0]%2==board[1][1]%2&&board[0][0]%2==board[2][2]%2)
printf(" O方胜! ");
}
}
if(board[0][2]!=0&&board[1][1]!=0&&board[2][0]!=0)
{
if(board[0][2]%2==1)
{
if(board[0][2]%2==board[1][1]%2&&board[0][2]%2==board[2][0]%2)
printf(" X方胜! ");
}
if(board[0][2]%2==0)
{
if(board[0][2]%2==board[1][1]%2&&board[0][2]%2==board[2][0]%2)
printf(" O方胜! ");
}
}

if(step_number>10)
{
printf("平局 ");
printf("按任意键回主菜单");
if(getchar())break;
}
}

}

❺ C++ 井字棋 (注释) 一定要给注释!!!

#include <stdio.h>
#include <stdlib.h>

#define SIZE 3
typedef enum {CBLANK, CBLACK, CWHITE} CHESS;
typedef enum {GM_WIN, GM_LOST, GM_UNKNOW, GM_ERROR} GAMEFLAG;

void init_board(CHESS board[SIZE][SIZE]) //初始化
{
int i, j;
for (i = 0; i < SIZE; i++)
{
for (j = 0; j < SIZE; j++)
{
board[i][j] = CBLANK;
}
}
}

void print_chess(CHESS board[SIZE][SIZE]) //打印棋盘
{
int i, j;

putchar(' ');
for (i=0; i < SIZE; i++)
{
printf("%2d", i+1);
}
putchar('\n');

for (i=0; i < SIZE; i++)
{
printf("%-2d", i+1);
for (j=0; j < SIZE; j++)
{
switch (board[i][j])
{
case CWHITE:
putchar('O');
break;
case CBLACK:
putchar('*');
break;
case CBLANK:
putchar('_');
break;
default:
putchar('?');
break;
}
putchar(' ');
}
putchar('\n');
}
}

void swc(CHESS chess, int *black, int *white, int *bmax, int *wmax) //判断
{
switch (chess)
{
case CBLACK:
*white = 0;
(*black)++;
break;
case CWHITE:
*black = 0;
(*white)++;
break;
case CBLANK:
*black = 0;
*white = 0;
break;
default:
break;
}

if (*black > *bmax) *bmax = *black;
if (*white > *wmax) *wmax = *white;
}

GAMEFLAG res(CHESS board[SIZE][SIZE]) //判断输赢
{
int i, j;
int win[4] = {0, 0, 0, 0};
int rblack, rwhite, cblack, cwhite,
loblack = 0, lowhite = 0,
roblack = 0, rowhite = 0,
bmax = 0, wmax = 0;

for (i=0; i < SIZE; i++)
{
rblack = 0;
rwhite = 0;
cblack = 0;
cwhite = 0;

swc(board[i][i], &loblack, &lowhite, &bmax, &wmax);
swc(board[i][SIZE-i-1], &roblack, &rowhite, &bmax, &wmax);

for (j=0; j < SIZE; j++)
{
swc(board[i][j], &rblack, &rwhite, &bmax, &wmax);
swc(board[j][i], &cblack, &cwhite, &bmax, &wmax);

}

}

if (bmax >= 3)
{
if (wmax >= 3)
{
return GM_ERROR;
}
else
{
return GM_WIN;
}
}
else
{
if (wmax >= 3)
{
return GM_LOST;
}
else
{
return GM_UNKNOW;
}
}

}

int move(CHESS board[SIZE][SIZE], CHESS chs, int x, int y)
{
int bs = 1;
if (board[x][y])
bs = 0;
else if (y >= SIZE || y < 0 || x >= SIZE || x < 0)
bs = 0;
else
board[x][y] = chs;

return bs;
}

int main()
{
CHESS b[SIZE][SIZE];
char *msg[] = {"BLACK WIN!\n", "WHITE LOST!", "NOT YET", "ERROR!!"};
char *plr[] = {"NON", "BLACK", "WHITE"};
CHESS p = CBLACK;
GAMEFLAG flg;

init_board(b);
while ((flg = res(b)) == GM_UNKNOW)
{
int x, y, bmv = 1;
system("cls");
print_chess(b);
while (bmv)
{
printf("%s回合,输入坐标:", plr[p]);
scanf("%d%d", &x, &y);
bmv = !move(b,p,x-1,y-1);
}
p = (CHESS)(CWHITE + CBLACK - p);
}

printf("%s", msg[flg]);
system("pause");

return 0;
}

有加分有注释!!

❻ 用c语言写井字棋游戏 求教一个问题

用char数组存棋盘,并记录当前是玩家1还是玩家2。

如果用户输入0,首先判断当前玩家是1还是2。如果是1,就board[0] = 'O';否则board[0] = 'X'。

伪代码就类似于:

charboard[10]="";//初始为9个空格,并且多留一个位置放''
intplayer=1;//从玩家1开始,取值为1或2
intposition;//玩家在哪个格子放O或X。取值为0~8
while(true){
scanf("%d",&position);//获取玩家输入
if(player==1){//对于玩家1,应该往棋盘上放O,下一次就轮到玩家2
board[position]='O';
player=2;
}else{//对于玩家2,应该往棋盘上放X,下一次就轮到玩家1
board[position]='X';
player=1;
}
print(board);//输出棋盘(需要另外实现)
if(gameOver(board)){//检查输赢(需要另外实现)
//输出谁赢了并退出
break;
}
}

❼ 用C语言编写井字游戏tic tac toe 人机对战

前两个好办,智能电脑不好实现,我资料里有联系方式