C语言实现呵呵三子棋

  • 问题描述
  • 流程
  • 详细步骤
  • 完整代码

  • 问题描述

C语言实现三子棋

  • 流程
  1. 创建游戏开始或退出界面
  2. 创建棋盘并初始化
  3. 打印棋盘
  4. 玩家落子,电脑落子
  5. 判断是否平局
  6. 判断输赢
  7. 返回步骤2或退出小游戏

  • 详细步骤

一.函数声明

#define ROW 3
#define COL 3
#include
#include
#include
void InitBoard(char board[ROW][COL],int row,int col);//棋盘初始化
void DisplayBoard(char board[ROW][COL],int row,int col);//打印棋盘
void Playermove(char board[ROW][COL],int row,int col);//玩家下棋
void Computermove(char board[ROW][COL],int row,int col);//电脑下棋
char Iswin(char board[ROW][COL],int row,int col);//判断输赢

二.函数

1.棋盘初始化,打印棋盘

void InitBoard(char board[ROW][COL],int row,int col)
{
	int i=0;
	int j=0;
	for(i=0;i

2.玩家与电脑下棋

void Playermove(char board[ROW][COL],int row,int col)
{
    int x=0,y=0; 
    printf("玩家走\n");
    while(1)
    {
        printf("请输入坐标");
    scanf("%d %d",&x,&y);
    if(x>=1&&x<=row&&y>=1&&y<=col)
    {
        if(board[x-1][y-1]==' ')
        {
            board[x-1][y-1]='*';
            break;
        }
        else
        {
            printf("该坐标被占用\n");
        }
    }
    else//若x,y大于棋盘的范围 ,则重新输入 
    {
        printf("坐标非法,请重新输入!\n");
    }
    }
}

void Computermove(char board[ROW][COL],int row,int col)
{
    int x=0,y=0;
    printf("电脑走\n");
    
    while(1)
    {
        x=rand()%row;
        y=rand()%col;
    
    if(board[x][y]==' ')
    {
        board[x][y]='#';
        break;
    }
    }
}

3.判断是否为平均(是否占满棋盘)

int Isfull(char board[ROW][COL],int row,int col)
{
	int i,j;
	for(i=0;i

4.判断输赢

char Iswin(char board[ROW][COL],int row,int col)
{
	int i=0;
	for(i=0;i

三.测试

1.建立游戏菜单

void menu()
{
    printf("***************************\n");
    printf("******1. 玩 0. 结束******\n");
    printf("***************************\n");
}

2.开始游戏

void game()
{
	char ret=0;
	char board[ROW][COL]={0};
	InitBoard(board,ROW,COL);
	DisplayBoard(board,ROW,COL);
	while(1)
	{
		Playermove(board,ROW,COL);
		DisplayBoard(board,ROW,COL);
		
		ret=Iswin(board,ROW,COL);
		if(ret!='C')
		{
			break;
		}
		
		Computermove(board,ROW,COL);
		DisplayBoard(board,ROW,COL);
		
		ret=Iswin(board,ROW,COL);
		if(ret!='C')
		{
			break;
		}
	}
	if(ret=='*')
	{
		printf("玩家赢\n");
	}
	else if(ret=='#')
	{
		printf("电脑赢\n");
	}
	else printf("平局\n");
}

void test()
{
	int input=0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择");
		scanf("%d",&input);
		switch(input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,请重新选择"); 
				break;
		} 
	}while(input);
}

int main()
{
	test();
	return 0;
}

完整代码

#define ROW 3
#define COL 3
#include
#include
#include
void InitBoard(char board[ROW][COL],int row,int col);
void DisplayBoard(char board[ROW][COL],int row,int col);
void Playermove(char board[ROW][COL],int row,int col);
void Computermove(char board[ROW][COL],int row,int col);
char Iswin(char board[ROW][COL],int row,int col);

void InitBoard(char board[ROW][COL],int row,int col)
{
	int i=0;
	int j=0;
	for(i=0;i=1&&x<=row&&y>=1&&y<=col)
	{
		if(board[x-1][y-1]==' ')
		{
			board[x-1][y-1]='*';
			break;
		}
		else
		{
			printf("该坐标被占用\n");
		}
	}
	else//若x,y大于棋盘的范围 ,则重新输入 
	{
		printf("坐标非法,请重新输入!\n");
	}
	}
}

void Computermove(char board[ROW][COL],int row,int col)
{
	int x=0,y=0;
	printf("电脑走\n");
	
	while(1)
	{
		x=rand()%row;
	    y=rand()%col;
	
	if(board[x][y]==' ')
	{
		board[x][y]='#';
		break;
	}
	}
}
int Isfull(char board[ROW][COL],int row,int col)
{
	int i,j;
	for(i=0;i

你可能感兴趣的:(c语言,蓝桥杯)