天天看点

C语言,实现三子棋小游戏

#include<stdio.h>

#include<stdlib.h>

#include <time.h>

#define a 3

#define b 3

void qi(char san[a][b])

{

for(int i=0;i<a;i++)

{

 for(int j=0;j<b;j++)

 {

  san[i][j]=' ';

 }

}

}

void bu(char san[a][b])

{

printf("+---+---+---+\n");

for(int i=0;i<a;i++)

{

 printf("| %c | %c | %c |\n",san[i][0],san[i][1],san[i][2]);

 printf("+---+---+---+\n");

}

}

void play(char san[a][b])

{

while(1)

{

 int x,y;

 printf("请输入所要下的坐标(中间用空格隔开)\n");

 scanf("%d%d",&x,&y);

 if(x<0||x>=a||y>=b||y<0)

 {

  printf("输入错误,请在(1,1)到(3,3)的范围内重新输入\n");

  continue;

 }

 else if(san[x][y]!=' ')

  {

   printf("该位子已有棋子\n");

   continue;

  }

 else

 {

  san[x][y]='x';

  break;

       }  

   }

}

void dian(char san[a][b])

{

while(1)

{

 int x=rand()%a;

 int y=rand()%b;

 if(san[x][y]!=' '||san[x][y]=='x')

 {

  continue;

 }

 else

 {

  san[x][y]='o';

  break;

 }

}

}

int ping(char san[a][b])

{

for(int i=0;i<a;i++)

{

 for(int j=0;j<b;j++)

 {

  if(san[i][j]==' ')

  {

   return 0;

  }

 }

}

return 1;

}

char pan(char san[a][b])

{

for(int i=0;i<a;i++)

{

 if(san[i][0]!=' '&&san[i][0]==san[i][1]&&san[i][1]==san[i][2])

 {

  return san[i][0];

 }  

}

for(int j=0;j<b;j++)

{

    if(san[0][j]!=' '&&san[0][j]==san[1][j]&&san[1][j]==san[2][j])

 {

   return san[1][j];  

 }

}

if(san[0][0]==san[1][1]&&san[1][1]==san[2][2]&&san[0][0]!=0)

{

 return san[0][0];

}

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

{

 return san[2][0];

}

if(ping(san)==1)

{

 return 'h';

}

return 'j';

}

void game()

{

char ret='0';

char san[a][b]={0};//定义一个3*3的数组

qi(san);//对3*3数组进行初始化

bu(san);//布置棋盘架构

while(1)

{

 play(san);//玩家进行下棋

 bu(san);//布置棋盘架构

 ret=pan(san);

 if(ret!='j')

 {

  break;

 }

 dian(san);//电脑进行下棋

 bu(san);//布置棋盘架构

 ret=pan(san);

 if(ret!='j')

 {

  break;

 }

}

   if(ret=='x')

{

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

}

else if(ret=='o')

{

 printf("电脑获胜了\n");

}

else

{

 printf("平局\n");

}

}

int menu()

{

int en;

printf("##########################\n");

printf("##1.进入游戏  0.退出游戏##\n");

printf("##########################\n");

scanf("%d",&en);

return en;

}

int main()

{

srand((unsigned int)time(0));

while(1)

{

 system("cls");

 int en=menu();

 if(en==1)

 {

  game();

 }

 else if(en==0)

 {

  printf("退出游戏\n");

  break;

 }

 else

 {

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

  continue;

 }

}

system("pause");

继续阅读