C语言 三子棋的实现详解

三子棋游戏的代码实现

//头文件

//定义棋盘横列大小
#define ROW 3
#define COL 3
#include "game.h"
#include <stdlib.h>
#include <time.h>//在随机数的用到时间
//初始化棋盘函数声明
void InitBoard(char board[ROW][COL],int row,int col);
//打印棋盘函数声明
void displayd(char board[ROW][COL],int row,int col);
//玩家下棋函数声明
void Player(char board[ROW][COL],int row,int col);
//电脑下棋函数声明
void Computer(char board[ROW][COL],int row,int col);
//判断输赢,玩家赢,电脑赢,平局,继续
char Triumph(char board[ROW][COL],int row,int col);

//源文件

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
初始化棋盘函数实现
void InitBoard(int 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 Displayd(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")
//正常打印一行数据,行列可以随便改
		int j=0;
		for(j=0,j<col;j++)//控制行一列的内容
		{
			printf("%c",board[i][j])
			if(j < col-1)//目的使让最后一列少"|"
				printf("|");
		}
		printf("\n");
//打印分割行
			if(i < row-1)//控制行二列的内容
			{
				for(j=0,j<col;j++)
				{
					printf("___");
					if(i < col-1)
						printf("|");
				}
		printf("\n");
			{
	}
}
玩家下棋函数实现
void Player(char board[ROW][COL],int row,int col)
{
	int x=0;
	int y=0;
	printf("玩家先走");
	printf("请输入要下坐标");
	scanf("%d%d",&x,&y)
	//判断函数的是否下在棋盘内
	if(x>=1 && x<=row && y>=1 && y<=row)
	{
		if(board[row][col]==' ')//因为之前都初始化为空格,所以没输入的地方都为空格
		{
			board[row][col]='*';//玩家下得棋子 *
			break;
		}
		else
		{
			printf("已有棋子");
		}
	}
	else
	{
		printf("输入错误,请看清规则);
	}
}
电脑下棋函数实现
void Computer(char board[ROW][COL],int row,int col)
{
	int x=0;
	int y=0;
	printf("电脑走 \n");
	while(1)//如果被占用,电脑自动重新生成随机数
	{
		x=rand()%row;//随机产生0~row的数
		y=rand()%col;//随机产生0~col的数
		if(board[row][col]==' ')
		{
			board[row][col]='#';//电脑下得棋子 #
			break;
		}
	}
}
判断输赢函数实现
char Triumph(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]&&board[i][1]!=' ')//判断每行
		{
			return board[i][1];//返回*
		}
	}
	for(i=0;i<row;i++)
	{
		if(board[0][i]==board[1][i]&&  board[1][i]==board[2][i]&&board[1][i]!=' ')//判断每列
		{
			return board[i][1];//返回*
		}
	}
	if(board[0][0]==board[1][1]&&  board[1][1]==board[2][2]&&board[1][1]!=' ')//判断对角线
	return board[i][1];//返回*
	if(board[0][2]==board[1][1]&&  board[1][1]==board[2][0]&&board[1][1]!=' ')//判断对角线
	return board[i][1];//返回*
判断棋盘是否满来判断平局
//返回1表示满了
//返回0表示未满
int IsFull()
{
	int i=0;
	int j=0;
	for(i=0;i<row;i++)
	{
		for(i=0;j<col;j++)
		{
			if(board[i][j]=' ')
			{
				return 0;//未满
			}
		}
	}
	return 1; //满了
}
	if(1==IsFull(char board[ROW][COL],int row,int col))//平局
	{
	return 'PingJu';
	}
}

//源文件2

#define _CRT_SECURE_NO_WARNINGS 1//使用scanf不安全时使用,或者把这句话放在VS安装路径下vc下vcprojectitems下newc++File.cpp
#include <studio.h>
#include "game.h"//引用头文件
void menu()//游戏选择菜单
{
printf("*************\n")
printf("***1.play  0.exit***\n")
printf("*************\n")
}

void games ()//游戏的实现过程
{
	//定义数组存放行走步骤的棋盘信息
	char board[ROW][COL]={0};//全部空格
	//初始化棋盘
	InitBoard(board,ROW,COL);
	//打印棋盘
	Displayd(board,ROW,COL);
	//下棋
	while(1)
	{
	//玩家下棋
	Player(board,ROW,COL);
	//打印已下棋子
	Displayd(board,ROW,COL);
	//判断输赢
	ret=Triumph(board,ROW,COL);
	if(ret !='PingJu')//表示继续走
	{
		break;
	}
	//电脑下棋
	Computer(board,ROW,COL);
	//打印已下棋子
	Displayd(board,ROW,COL);
	}
	//判断输赢
	if(ret='*')
	{
		printf("玩家赢");
	}
	else if(ret='#')
	{
		printf("电脑赢")
	}
	else
	{
		printf("平局")
	}
}
void test()//游戏初始界面
{
	int num =0
	//设置好随机数种子
	//time(NULL)返回当前时间
	//srand(time(NULL))把时间当成种子,使程序每次运行产生不同的随机数数列
	//(umsigned int)time(NULL),把随机数转换为int型
	srand(((umsigned int)time(NULL));
	do{
		menu();
		printf("请选择:")
		scanf("%d",%num)
	switch(sum)
		{
		case 1: 
			games();//printf("进入游戏");放在函数中
			break;
		case 0: 
			printf("退出游戏");
			break;
		default:
			printf("重新选择游戏");
			break;
		}
  	}while(num)//num为跳出循环
}
	int main()
	{
		test();
		return 0;//再来一把
	}

花神博客生涯三子棋代码详解结束了哦~
接下来会持续更新(⊙o⊙)!
在这里插入图片描述


版权声明:本文为weixin_44899940原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。