C语言 三子棋小游戏

因为代码有些多,所以使用了头文件来方便理解。

void initial(char arr[ROW][COL],int row,int col) //初始化棋盘函数
{ 
 for(row=0;row<ROW;row++) 
                   
 {
   for(col=0;col<COL;col++)
       {
        arr[row][col] = ' ';
		printf("%c",arr[row][col]);
		if(col<COL -1)
		printf("  |  ");
       }
   printf("\n");
   	if(row<ROW -1)
		printf("————————\n");
 }
}
void player(char arr[ROW][COL],int row,int col) //用户下棋函数
{
 printf("请输入棋子坐标>:");
 scanf("%d %d",&row,&col);
 while(1)
 {
	   if((row>=1 && row<=ROW+1) && (col>=1 && col <=COL+1))
         {
	      if(arr[row-1][col-1] ==' ')
	        { 
			arr[row-1][col-1] = '*';
			break;
		    }
	      else if(arr[row-1][col-1] =='#')
           {
			printf("该位置已被对方占用,请重新选择!\n");
		    printf("请输入棋子坐标>:");
			scanf("%d %d",&row,&col);
		    }
		  else if(arr[row-1][col-1] =='*')
			printf("这个地方那你已经下过了,换个地方吧!\n");
		  else 
			  printf("你是怎么做到显示这个行代码的??");
         }
       else
       printf("坐标输入错误,请重新选择!\n");
	   printf("请输入棋子坐标>:");
       scanf("%d %d",&row,&col);
 }
}
void printing(char arr[ROW][COL],int row,int col) //打印棋盘的函数。
{
 for(row=0;row<ROW;row++) 
                   
 {
   for(col=0;col<COL;col++)
       {
		printf("%c",arr[row][col]);
		if(col<COL -1)
		printf("  |  ");
       }
   printf("\n");
   	if(row<ROW -1)
		printf("————————\n");
 }
}

void computer (char arr[ROW][COL],int row,int col) //电脑下棋函数。
{  
  while(1)
  { row = rand()%3;
    col = rand()%3;
    if(arr[row][col] == ' ')
	  {
	   arr[row][col] = '#';
 	   break;
       }
  }    
}
int windefeat(char arr[ROW][COL],int row,int col) //判断输赢函数。
{
 int count = 0;

 for(row=0;row<ROW;row++)
  {
     if(arr[row][0] == arr[row][1] && arr[row][1]== arr[row][2])
	    {
			if(arr[row][0] =='*')
			  return 1;
			else if(arr[row][0] == '#')
			  return 0;
	    }
  }
  for(col=0;col<COL;col++)
  {
     if(arr[0][col] == arr[1][col] && arr[1][col] ==arr[2][col])
	    {
			if(arr[0][col] == '*')
			  return 1;
			else if(arr[0][col] == '#')
			  return 0;
	    }
  }


  if(arr[0][0] == arr[1][1] && arr[1][1]== arr[2][2] )
  {
   if(arr[0][0] == '*')
	return 1;
	else if(arr[0][0] == '#')
	return 0;
  }
   if(arr[0][2] == arr[1][1] && arr[1][1]== arr[3][0] )
  {
   if(arr[0][2] == '*')
    return 1;
	else if(arr[0][2] == '#')
	return 0;
  }



   for(row=0;row<ROW;row++)
	  {
		for(col=0;col<COL;col++)
		{
		  if(arr[row][col] ==' ')
			 count++;
		}
      }
   if(count == 0)
   { return 2;}
   return 9;

}

//这是源文件,里面存放着三子棋所需要的函数。
//这是源文件,里面存放着三子棋所需要的函数。
//这是源文件,里面存放着三子棋所需要的函数。

//函数是在在 int main() 开始

#include"game.h"
#include<stdlib.h>
#include<time.h>
void menu()  //menu是菜单函数。

{    
     printf("*******************************\n");
     printf("******1:game      0:exit*******\n");
     printf("*******************************\n");

}
int option(int x)   //开局选择是否进入游戏的函数。
{
if(x==1)
    return 1;
if(x==0)
    return 0;
else
    return 2;
}

void game() //游戏程序的实现函数。
{
 char arr[ROW][COL];
 initial(arr,ROW,COL); //棋盘的初始化。
  do
 {
 player(arr,ROW,COL);//玩家下棋函数。
 printf("胡图图下棋:\n");
 printing(arr,ROW,COL);
    if(windefeat(arr,ROW,COL)==0)//判断输赢函数。
       {
        printf("牛爷爷赢了!\n");
        break;
       }
    if(windefeat(arr,ROW,COL)==1)
       {
          printf("胡图图赢了!\n");
          break;
       }
    if(windefeat(arr,ROW,COL)==2)
       {
          printf("平局了\n");
          break;
       }
  printf(" \n");//为了把牛爷爷和胡图图的棋盘分开,使得更明显。
  printf(" \n");
 printf(" \n");
 printf("牛爷爷下棋:\n");
 computer(arr,ROW,COL); //电脑下棋函数。
 printing(arr,ROW,COL);
     if(windefeat(arr,ROW,COL)==0)  //判断输赢函数。
       {
        printf("牛爷爷赢了!\n");
        break;
       }
    if(windefeat(arr,ROW,COL)==1)
       {
          printf("胡图图赢了!\n");
          break;
       }
    if(windefeat(arr,ROW,COL)==2)
       {
          printf("平局了\n");
          break;
       }

 }
 while(1);

}

int main()
  {
   char arr[ROW][COL];
   int a;
   srand((unsigned int)time(NULL)); 
   do
   {
   menu();
   printf("请选择>>:");
   scanf("%d",&a);
   switch(option(a))
   {
   case 0: 
       printf("!结束游戏!\n");
       break;
   case 1:
      printf("!开始游戏!\n");
       game();
       break;
   default:
         printf("输入错误,请重新输入!\n");
         break;

   }}
   while(option(a));

       return 0;
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值