小小游戏---三子棋

text.c 文件
#include"game.h"
int main()
{
	int a=0;
	int count=1;
	do
	{
        menu();
		scanf("%d",&a);
		switch(a)
		{
		case 1:
			game();
			break;
		case 0:
			count--;
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	}while(count);
	return 0;
}

game.h 文件
#ifndef _GAME_H
#define _GAME_H

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>

#define ROW 3
#define COL 3

void menu();
void game();
void init_board(char board[ROW][COL],int row,int col);
void print_board(char board[ROW][COL],int row,int col);
void player_move(char board[ROW][COL],int row,int col);
void computer_move(char board[ROW][COL],int row,int col);
char is_win(char board[ROW][COL],int row,int col);
int is_full(char board[ROW][COL],int row,int col);
#endif//_GAME_H_

game.c 文件

#include"game.h"
void menu()
{
    printf("**************************\n");
    printf("****  1.play  0.exit  ****\n");
    printf("**************************\n");
}

void init_board(char board[ROW][COL],int row,int col)
{
	 memset(board,' ',ROW*COL);
}
void print_board(char board[ROW][COL],int row,int col)
{
	int i=0;
	for(i=0;i<row;i++)
	{
		printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
		if(i<row-1)
		{
		printf("---|---|---\n");
		}
	}
}
void player_move(char board[ROW][COL],int row,int col)
{
    int x=0,y=0;
	while(1)
	{		
		printf("请输入坐标->\n");
		scanf("%d %d",&x,&y);
		if(x>0 && x<4 && y>0 && y<4)
		{
			if(board[x-1][y-1]=' ')
			{
			board[x-1][y-1]='*';
			break;
			}
			else
				printf("该坐标被占用->\n");
		}
		else
			printf("输入坐标错误->\n");
	}
}
void computer_move(char board[ROW][COL],int row,int col)
{
	int a=0,b=0;
    while(1)
	{
	    a=rand()%row;
	    b=rand()%col;
		if(board[a][b]==' ')
		{
			board[a][b]='0';
			break;
		}
	}
}
static int is_full(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 0;  
        }  
    }  
    return 1;  
}  
char is_win(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][1]==board[i][2]))
		{
				return board[i][0];
		}
	}
    for(i=0;i<col;i++)
	{
		if((board[0][i]==board[1][i])&&(board[1][i]==board[2][i]))
		{
				return board[0][i];
		}
	}
	if((board[0][0]==board[1][1])&&(board[1][1]==board[2][2]))
	{
			return board[0][0];
	
	}
	if((board[2][0]==board[1][1])&&(board[1][1]==board[0][2]))
	{	
		return board[2][0];
	}
    if (is_full(board,ROW,COL)==1)  
    {  
        return 'Q';  
    }  
    else  
        return ' ';  
}
  
int board_full(char board[ROW][COL])//棋盘判满函数  
{  
    int i= 0;  
    int j =0;  
    for(i=0;i<3;i++)  
    {  
        for(j=0;j<3;j++)  
        {  
            if (board[i][j]==' ')  
                return 0;  
        }  
    }  
 return 1;
}  
void game()
{
	char i;
	char board[ROW][COL];
    init_board(board,ROW,COL);  
    print_board(board,ROW,COL);
    while (1)  
    {  
        printf("玩家走->:\n");  
        player_move(board,ROW,COL);  
        print_board(board,ROW,COL);  
        i=is_win(board,ROW,COL);  
        if(i!= ' ')  
            break;  
        printf("电脑走->:\n");  
        computer_move(board,ROW,COL);  
        print_board(board,ROW,COL);  
        i=is_win(board,ROW,COL);  
        if(i!=' ')  
            break;  
    }  
    if(i=='*')  
    {  
        printf("玩家获胜!\n");  
    }  
    else if(i=='0')  
    {  
        printf("电脑获胜!\n");  
    }  
    else if(i=='Q')  
    {  
        printf("平局!\n");  
    }  
}  
  

猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/80138536