首页 > 其他分享 >三子棋

三子棋

时间:2022-11-01 22:05:28浏览次数:32  
标签:int 三子 char board printf COL ROW

      作为新手的我最近好久没写博客了,最近工作时间长,没什么特别多的时间学习,不过还是有一点练习的,写了个三子棋的代码。但是写的程序有点问题,int 返回字符类型没有执行,条件满足了不能返回,因为是自学,自检暂时也没解决这个问题,各位大佬要是看到请稍微指点指点。

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#define ROW 3

#define COL 3

void mune()

{

printf("*************************\n");

printf("**** 1.play   2.exit ****\n");

printf("*************************\n");

}

char mull(char board[ROW][COL],int row,int col)

{

int i=0;

int j=0;

for(i=0;i<row;i++)

{

 for(j=0;j<col;j++)

 {

  if(board[i][j]!=' ')

   return 1;

 }

}

return 0;

}

char judgeboard(char board[ROW][COL],int row,int col)

{

int i=0;

for(i=0;i<row;i++)

{

 if(board[i][0]==board[i][1] && board[i][0]==board[i][2])

  return board[i][0] ;

}

for(i=0;i<col;i++)

{

 if(board[0][i]==board[1][i] && board[0][i]==board[2][i])

  return board[0][col];

}

   if(board[0][0]==board[1][1] && board[0][0]==board[2][2])

 return board[0][0];

if(board[0][2]==board[1][2] && board[2][0]==board[2][0])

 return board[row][col];

if(1==mull(board,ROW,COL))

 return 'c';

else

 return 'd';

}

void computboard(char board[ROW][COL],int row,int col)

{

int x=0;

int y=0;

printf("电脑回合\n");

while(1)

{

  x=rand()%COL+1;

  y=rand()%COL+1;

    if(x>=1 &&  x-1<=ROW && y>=1 && y-1<=COL)

  {

 if(board[x-1][y-1]==' ')

 {

  board[x-1][y-1]='#';

     break;

 }

  }

}

}

void myboard(char board[ROW][COL],int row,int col)

{

int x=0;

int y=0;

printf("玩家回合\n");

while(1)

{

  printf("请输入坐标:>");

  scanf("%d%d",&x,&y);//玩家输入坐标

    if(x>=1 &&  x-1<=ROW && y>=1 && y-1<=COL)

  {

 if(board[x-1][y-1]==' ')//当棋盘里的输入的坐标没有符号时

 {

  board[x-1][y-1]='*';//往棋盘坐标里赋*

     break;

 }

 else

  printf("请重新输入\n");

  }

  else

   printf("该坐标非法\n");

}

}

void initBoard(char board[ROW][COL],int row,int col)

{

int i=0;

int j=0;

for(i=0;i<ROW;i++)//确定三子棋行数

{

 int z=0;

 for(j=0;j<COL;j++)//每一行的棋盘的具体情况

 {

  printf(" %c ",board[i][j]);

  if(j<COL-1)

   printf("|");

 }

 printf("\n");

 for(z=0;z<COL;z++)

 {

  printf("---");

  if(z<COL-1)

   printf("|");

 }

 printf("\n");

}

}

void intboard(char board[ROW][COL],int row ,int col)

{

int i=0;

int j=0;

for(i=0;i<row;i++)

{

 for(j=0;j<col;j++)

 {

  board[i][j]=' ';

 }

}

}

void game()

{

char ret=0;

char board[ROW][COL]={0};

intboard(board,ROW,COL);//初始化三子棋

initBoard(board,ROW,COL);//打印三子棋棋盘

while(1)

{

 myboard(board,ROW,COL);//玩家下棋

 initBoard(board,ROW,COL);//打印棋盘

 ret=judgeboard(board,ROW,COL);

 if(ret=='c')

 {

  break;

 }

 else

  printf("继续\n");

 computboard(board,ROW,COL);//电脑下棋

 initBoard(board,ROW,COL);//打印棋盘

 ret=judgeboard(board,ROW,COL);

 if(ret=='c')

 {

  break;

 }

}

   if(ret=='*')

 printf("恭喜你获胜了\n");

   if(ret=='#')

 printf("小菜鸡,你输了\n");

   if(ret=='d')

 printf("平局\n");

}

int main()

{

int input=0;

srand((unsigned int)time(NULL));//根据时间随机显示一个数

do

{

 mune();//三子棋游戏主页面

 printf("请选择是否进入游戏:>(1/0)");//选择进游戏

 scanf("%d",&input);

 switch(input)//1进入游戏,0退出,其他选择重新进行选择

 {

 case 0:

  printf("退出游戏");

  break;

 case 1:

  game();//选择进去游戏跳转至游戏里

  break;

 default:

  printf("选择错误,请重新选择");

 }

}

while(input);

 return 0;

}


标签:int,三子,char,board,printf,COL,ROW
From: https://blog.51cto.com/u_15801101/5815021

相关文章