用C语言实现简单 三子棋(井字棋)小游戏

函数头

放在头文件里

#ifndef __GAME_H__
#define __GAME_H__



#define _CRT_SECURE_NO_WARNINGS  1

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

#define ROW 3 //行为3
#define COL 3 //列为3


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);//电脑出棋函数

int IsFull(char board[ROW][COL],int row,int col);//判断棋盘是否满棋
int IsWin(char board[ROW][COL],int row,int col);
void game();



#endif //__GAME_H__

主函数

选择1进入游戏函数 开始游戏
选择零 则退出游戏

#define _CRT_SECURE_NO_WARNINGS  1



#include"game.h"



void mune()
{
	printf("\n\n\n█████████████████████\n");
	printf("█████     经典③子棋游戏     ████\n");
	printf("█████████████████████\n");
	printf("███████   1.开始游戏   ██████\n");
	printf("███████   0.退出游戏   ██████\n");
	printf("█████████████████████\n");

}



int main()
{
	int input = 0;
	do
	{
		srand((unsigned int)time(NULL));//生成随机数函数
		mune( );//游戏菜单函数
		printf("请输入数字进行选择:\n");
		scanf("%d",&input);
		switch(input)
		{
		case 1:
			game( );
			break;
		case 0:
			printf("退出游戏!");
			break;
		default:
			printf("输入错误,请重新输入:\n");
		}
	}while(input);
	return 0;
}




游戏函数
初始化棋盘函数————打印原始棋盘函数————电脑出棋函数—与—玩家出棋函数(循环调用每调用一次判断一次输赢)————判断输赢函数(中间嵌套判断是否棋盘已满的函数决定平局)

#define _CRT_SECURE_NO_WARNINGS  1

#include"game.h"




void game()
{
	char ret = '0';
	char board[ROW][COL] = {0};//创建二维数组
	InitBoard(board,ROW,COL);//调用初始化棋盘的函数
	DisplayBoard(board,ROW,COL);//打印原始棋盘
	//下棋过程
	do
	{
		printf("▁▂▃电脑已出棋~该您出棋啦▃▂▁\n");
		ComputerMove(board,ROW,COL);//电脑出棋
		DisplayBoard(board,ROW,COL);//打印棋盘显示电脑出的棋
		ret = IsWin(board,ROW,COL);//根据判断输赢函数的返回值来决定谁赢谁输
		if(ret !=' ')               //返回空格继续下棋返回0电脑赢,返回x玩家赢
		{                              //返回空格继续下棋  返回p为平局
			break;
		}
		PlayerMove(board,ROW,COL);//到玩家出棋
		DisplayBoard(board,ROW,COL);//打印棋盘
		ret = IsWin(board,ROW,COL);
		if(ret !=' ')
		{
			break;
		}
	}while(ret = ' ');
//不等于空格跳出后判断谁赢
    ret = IsWin(board,ROW,COL);
	if(ret == 'p')
	{
		printf("\n▁▂▃恭喜您和聪明的电脑打成平手啦▃▂▁\n");
	}
	else if(ret == '0')
	{
		printf("\n▁▂▃很遗憾~电脑取得了胜利▃▂▁\n");
	}
	else if(ret == 'X')
	{
		printf("\n▁▂▃恭喜您取得了胜利~再接再厉哦▃▂▁\n");
	}
    

}





void InitBoard(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++)
		{
			board[i][j] = ' ';
		}
	}
}



void DisplayBoard(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 ComputerMove(char board[ROW][COL],int row,int col)
{
	while(1)
	{

	    int x = rand() % row;
	    int y = rand() % col;
	    if(board[x][y] == ' ')
	    {
		    board[x][y] = '0';
		    break;
	    }
	}
}

void PlayerMove(char board[ROW][COL],int row,int col)
{
	int x = 0;
	int y = 0;
	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] = 'X';
				break;
			}
			else
			{
				printf("抱歉~您输入的坐标已经被电脑抢先了一步,请重新输入\n");
			}
        }
		else
		{
			printf("您输入的坐标已经超出棋盘的范围啦~请重新输入哦\n");
		}
		
	}
}


int IsWin(char board[ROW][COL],int row,int col)
{
	int i = 0;
	int j = 0;
	for(i = 0;i<row;i++)
	{
		if(board[i][0] == board[i][1]&&board[i][1] == board[i][2]&&board[i][0] != ' ')
		{
			return board[i][0];
		}
	}
	for(j = 0;j<col;j++)
	{
		if(board[0][j] == board[1][j]&&board[1][j] == board[2][j]&&board[0][j] != ' ')
		{
			return board[0][j];
		}
	}
	if(board[0][0] == board[1][1]&&board[1][1] == board[2][2]&&board[0][0] != ' ')
	{
	 
		return board[0][0];
	}
	else if(board[2][0] == board[1][1]&&board[1][1] == board[0][2]&&board[2][0] != ' ')
		return board[2][0];
	else if(IsFull(board,row,col))
		return 'p';
	else 
		return ' ';
}

int IsFull(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;
}

猜你喜欢

转载自blog.csdn.net/qq_43223415/article/details/83067365