比较智能的三子棋游戏

 
chess.h     //头文件模块
******************
#ifndef  __CHESS_H__
#define  __CHESS_H__
#define  _CRT_SECURE_NO_WARNINGS  1
#define  rows    3    
#define   cols     3      
#include<stdio.h>  
#include<stdlib.h>  
#include<time.h>  
void menu(char arr[rows][cols]);
void Init(char arr[rows][cols]);
void Display(char arr[rows][cols]);
void Player_chess(char arr[rows][cols]) ;
void Computer_chess(char arr[rows][cols]);
int Check_full(char arr[rows][cols]);
char Check_win(char arr[rows][cols]);
#endif
**************
chess.c      //函数模块
***************
#include"chess.h" 
void menu(char arr[rows][cols])
{
	printf("******************************************************\n");  
	printf("*  1:开始游戏                          0:退出游戏  *\n");  
	printf("******************************************************\n");  
	printf("请选择是否开始游戏:>\n");  
}
void Init(char arr[rows][cols])  //初始化棋盘  
 {  
     int i=0,j=0;  
     for(i=0;i<rows;i++)  
     {  
        for(j=0;j<cols;j++)  
         {  
            arr[i][j]=' ';  
         }  
     }   
  }  
void Display(char arr[rows][cols])   //打印棋盘  
 {    
    int i=0;  
     for(i=0;i<cols;i++)  
     {  
         printf(" %c | %c | %c \n",arr[i][0],arr[i][1],arr[i][2]); 
		 if(i!=2)
         printf("---|---|---");  
         printf("\n");  
     }    
 }  
  void Player_chess(char arr[rows][cols])  //玩家落子  
 {  
     int x=0;  
     int y=0;  
     while(1)  
     {  
         printf("玩家选择落子位置:>\n");  
         scanf("%d%d",&x,&y);  
         x--;  
         y--;  
         if(arr[x][y]==' ')  
        {  
             arr[x][y]='X';   
             break;  
         }  
         else   
         {  
             printf("所选位置已有棋子请重选!\n");  
             continue;  
         }  
    }   
 }  
 void Computer_chess(char arr[rows][cols])   //电脑落子  
 {   
     srand((unsigned)time(NULL));  
     while (1)  
     {  
         int x = 0;  
        int y = 0;  
         srand((unsigned)time(NULL));  
        x = rand() % 3;  
         y = rand() % 3;  
          if (arr[1][1] == ' ' )  
         {      
              arr[1][1] = 'O';  
             break;}  
          else  if (arr[x][y] == ' ')  
         {      
             arr[x][y] = 'O';  
            break;  
        }  
         else  
         {  
           if (Check_full(arr) == 0)  
             {  
                continue;  
            }  
            else  
             {  
                break;  
             }  
         }  
    }}  
 int Check_full(char arr[rows][cols])   //判断棋盘是否空  
 {  
     int i = 0;  
     int j = 0;  
     for (i = 0; i < rows; i++)  
     {  
         for (j = 0; j <cols; j++)  
         {  
             if (arr[i][j] == ' ')  
             {  
                 return 0;  
             }  
         }  
     }  
     return 1;  
 }  
 char Check_win(char arr[rows][cols])      //判断电脑赢还是玩家赢  
 {  
     int i = 0;  
     int ret = 0;  
   
     for (i = 0; i < rows; i++)  
     {  
         if ((arr[i][0] == arr[i][1]) && (arr[i][2] == arr[i][1]))  
        {  
             return arr[i][0];  
         }  
     }  
    for (i = 0; i < cols; i++)  
     {  
        if ((arr[0][i] == arr[1][i]) && (arr[2][i] == arr[1][i]))  
         {  
            return arr[0][i];  
        }  
    }  
     if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]))  
     {  
         return arr[0][0];  
     }  
     if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]))  
     {  
         return arr[2][0];  
     }  
     ret = Check_full(arr);  
     if (ret == 1)  
     {  
         return 'q';  
     }  
     return ' ';  
 }  
***********
text.c          //测试模块
***********
#include"chess.h"
int main()  
{    
	char  arr[rows][cols]={0};  
	int input=1; 
	int a=0;
	while(input)  
	{         
		menu(arr);
		scanf("%d",&input);  
		switch(input)  
		{  
		case 1:  
			{    char ret=0;  
			Init(arr);
			 
			printf("**********************先后手***********************\n");
			printf("************ 1.后手     2.先手   ******************\n");
			printf("***************************************************\n");
			scanf("%d",&a);
			if(a==1)
			{
				do   
				{  
					Display(arr); 
					Computer_chess(arr);   
					Display(arr);  
					if(Check_win(arr)  != ' ')  
					{  
						ret=Check_win(arr);  
						break;  
					}   

					Player_chess(arr);   
					ret=Check_win(arr);     
				}   
				while (ret==' ');  	 
			}
			if(a==2)
			{
				do   
			      {  
				Display(arr);  
				Player_chess(arr);  
				Display(arr);  
				if(Check_win(arr)  != ' ')  
				{  
					ret=Check_win(arr);  
					break;  
				}   

				Computer_chess(arr);  
				ret=Check_win(arr);      
			}   
			while (ret==' ');  }
		    
			Display(arr);  
			if (ret == 'X')  
			{  
				printf("玩家赢\n");  
			}  
			else if (ret == 'O')  
			{  
				printf("电脑赢\n");  
			}  
			else if (ret == 'q')  
			{  
				printf("游戏平局\n");  
			}  
			}  
			break;  
		case 0:  
			break;  
		}  
	}  
	system("pause");  
	return 0;  
}  
*********


  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值