C语言实现的三子棋游戏

头文件

#ifndef __game_h__
#define __game_h__
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
extern void Get_board(char a[][3],int LINE,int LIST);
extern void Player_operation(char a[][3],int LINE,int LIST);
extern void Computer_operation(char a[][3],int LINE,int LIST);
extern void Init(char a[][3],int LINE,int LIST);
extern int Discriminant_board(char a[][3],int LINE,int LIST); 
extern int Winning_or_losing_discriminant(char a[][3],int LINE,int LIST);
#endif

游戏测试模块

#include "game.h"
 void menu()
{printf("######################\n");
 printf("####1.PALY  2.EXIT####\n");
 printf("######################\n");
}

void game()
{
	  int  line = 3;
	  int  list = 3;
	  char board[][3] ={"a"};
	  Init(board,line,list);
	while(1)
{ 
	  Get_board(board,line,list);
	  	  
   if(1==Winning_or_losing_discriminant(board,line,list))
  { printf("玩家赢\n");Sleep(2000);Init(board,line,list); Get_board(board,line,list);}

  if(2==Winning_or_losing_discriminant(board,line,list))
  {  printf("电脑赢\n");Sleep(2000);Init(board,line,list); Get_board(board,line,list);}

  if(Discriminant_board(board,line,list))
	{if(Winning_or_losing_discriminant(board,line,list)==0)
	  { printf("平局\n");Sleep(2000);Init(board,line,list); Get_board(board,line,list);}}
	 
     Player_operation(board,line,list);



	    if(1==Winning_or_losing_discriminant(board,line,list))
  { printf("玩家赢\n");Sleep(2000);Init(board,line,list); Get_board(board,line,list);}

  if(2==Winning_or_losing_discriminant(board,line,list))
  {  printf("电脑赢\n");Sleep(2000);Init(board,line,list); Get_board(board,line,list);}

  if(Discriminant_board(board,line,list))
	{if(Winning_or_losing_discriminant(board,line,list)==0)
	  { printf("平局\n");Sleep(2000);Init(board,line,list); Get_board(board,line,list);}}

	 Computer_operation(board,line,list);
	}
      }

int main()
{ 
 int input = 0;
 srand((unsigned int)time(NULL));
 menu();
 do{
 printf("please input:>\n");
 scanf_s("%d",&input);
    switch(input)
	{case 1:
	       game();
		   break;
		case 2:
			printf("退出程序\n");
			 goto end;
		default:
			printf("输入错误\n");
	}
  
  }while(1);
end:
 system("pause");
  return 0;
}

游戏实现函数模块

     void Init(char a[][3],int LINE,int LIST)
	  {  int i = 0;
	     int j = 0;
		 for(i=0; i<LINE; i++)
			 for(j=0; j<LIST; j++)
				 a[i][j] = ' ';
	  
	  }//初始化棋盘

	   void Get_board(char a[][3],int LINE,int LIST)
	  {int i = 0;
	  int j = 0;
	  for(i=0; i<LINE; i++)
	  { for(j=0; j<LIST; j++)
			 {  printf("_%c_",a[i][j]);
		 if(j<LIST-1)
	  printf("|");
				
	  }
	 printf("\n");
	 }

	}//打印棋盘


	 void Player_operation(char a[][3],int LINE,int LIST)
	 { int x = 1;
	   int y = 1;
	   printf("玩家请走:>\n");
rp:	   scanf("%d%d",&x,&y);
	   if((x<4&&x>0)&&(y<4&&y>0)&&a[x-1][y-1]==' ')
	   a[x-1][y-1] = 'X';
	   else if(a[x-1][y-1]!=' ')
	   {printf("输入错误,当前已被占用,请重新输入:>\n");
	    goto rp;}
	   else
	    printf("err\n");
	 
	 }//玩家操作


	 void Computer_operation(char a[][3],int LINE,int LIST)
	 {int x = 0;
	  int y = 0;
	  printf("电脑操作:>\n");
	  while(1)
	  {x = rand()%3;
	   y = rand()%3;
	  if((a[x][y]!='X')&&(a[x][y]!='0'))
	  {a[x][y] = '0';
	    break;
	   }
	  }
	 }//电脑操作


      int Discriminant_board(char a[][3],int LINE,int LIST)
	  { int i = 0;
	    int j = 0;
        int num = 0;
		for(i=0; i<LINE; i++)
		{	for(j=0; j<LIST; j++)
			{  if(a[i][j]==' ')
			   num++;
      			}
		}
		if(num)
		return 0;
		if(!num)
        return 1;
	  }//判别式函数一

	  int Winning_or_losing_discriminant(char a[][3],int LINE,int LIST)
	  { int i = 0;
	    int j = 0;
		for(i=0; i<LINE; i++)
		  { if(((a[i][0]=='X')&&(a[i][1]=='X')&&(a[i][2]=='X'))||
		       ((a[0][i]=='X')&&(a[1][i]=='X')&&(a[2][i]=='X'))||
		       ((a[0][0]=='X')&&(a[2][2]=='X')&&(a[1][1]=='X'))||
			   ((a[0][2]=='X')&&(a[1][1]=='X')&&(a[2][0]=='X')))
		       { return 1;}
		    if(((a[i][0]=='0')&&(a[i][1]=='0')&&(a[i][2]=='0'))||
		       ((a[0][i]=='0')&&(a[1][i]=='0')&&(a[2][i]=='0'))||
		       ((a[0][0]=='0')&&(a[2][2]=='0')&&(a[1][1]=='0'))||
			   ((a[0][2]=='0')&&(a[1][1]=='0')&&(a[2][0]=='0')))
			   {return 2;}
			else
			   {return 0;}

		   }
	    
	  }//判别函数二
posted @ 2018-05-27 19:05  千山路马  阅读(158)  评论(0)    收藏  举报