以C语言实现三子棋

三子棋介绍

三子期是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。

三子棋规则

玩家和电脑交替在棋盘中落下一个棋子,直到一方胜利或者平局,则结束游戏。

当棋盘上同一行或者同一列或者对角线的三个棋子都相同时,棋子所属方胜利。

当棋盘已满还未分出胜负,则平局。


代码

game.h

//函数的声明
#include
#include
#include
#define ROW 3
#define COL 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);
char isWin(char chessBoard[ROW][COL]);
int isFull(char chessBoard[ROW][COL]);

game.c

//函数的定义
#include"game.h"
//初始化棋盘
void Initboard(char Board[ROW][COL], int row, int col)

{
	system("color E1");//自己加的颜色的调用 因为对这方面不大熟悉 想了解的可以搜下
	int i = 0, j = 0;
	for ( i = 0; i < ROW; i++)
	{
		for ( j = 0; j < ROW; j++)
		{
			Board[i][j] = ' ';
		}
	}
}
//实际参数和形式参数可以同名   声明定义的函数()内的为形式参数 调用的为实际参数


//打印棋盘
void displayboard(char Board[ROW][COL], int row, int col)
{
	int i,j=0;
	//打印第一行
	for (i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			printf(" %c ", Board[i][j]);
			if (j < COL - 1)
			{
				printf("|");
			}	
		}
		printf("\n");
		//打印分隔行
		if (i < ROW - 1)
		{
			for (int j = 0; j < COL; j++)
			{
				printf("---");
				if (j < COL - 1)
				{
					printf("|");
				}
			}printf("\n");
		}
		
	}
}
//玩家下棋
void playermove(char Board[ROW][COL], int row, int col)
{
	int x=0, y=0;
	while (1)
	{
		printf("玩家走  请输入坐标(行,列)\n");
    	scanf_s("%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
		{
			printf("请输入正确的坐标\n");
		}
	}
	system("pause");
}
//电脑下棋
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]!=' ')
		{
			continue;
		}Board[x][y] = '#';
			break;
	}

}
//判断棋盘是否满
int isFull(char chessBoard[ROW][COL]) {
	for (int row = 0; row < ROW; row++) {
		for (int col = 0; col < COL; col++) {
			if (chessBoard[row][col] == ' ') {
				return 0;
			}
		}
	}
	return 1;
}
//判断输赢
char isWin(char chessBoard[ROW][COL]) 
{ 
	//判断行
	for (int row = 0; row < ROW; row++) {
		if (chessBoard[row][0] != ' '
			&& chessBoard[row][0] == chessBoard[row][1]
			&& chessBoard[row][0] == chessBoard[row][2]) {
			return chessBoard[row][0];
		}
	}
	//判断列
	for (int col = 0; col < COL; col++) {
		if (chessBoard[0][col] != ' '
			&& chessBoard[0][col] == chessBoard[1][col]
			&& chessBoard[0][col] == chessBoard[2][col]) {
			return chessBoard[0][col];
		}
	}
	//斜着
	if (chessBoard[0][0] != ' '
		&& chessBoard[0][0] == chessBoard[1][1]
		&& chessBoard[0][0] == chessBoard[2][2]) {
		return chessBoard[0][0];
	}
	if (chessBoard[2][0] != ' '
		&& chessBoard[2][0] == chessBoard[1][1]
		&& chessBoard[2][0] == chessBoard[0][2]) {
		return chessBoard[2][0];
	}
	//满盘为平局
	if (isFull(chessBoard)) {
		return 'q';
	}
	//iswin回执的依据
	return ' ';
}


test.c

//函数的调用
//测试游戏(主函数)
#include"game.c"
void menu()
{
	printf("********************************\n");
	printf("*********1.play   0.exit********\n");
	printf("********************************\n");
}
void game() 
{
	char  winner = ' ';
	char board[ROW][COL] = {0};
	//初始化棋盘
	Initboard(board, ROW, COL);
	//打印棋盘
	displayboard(board, ROW, COL);
	while (1)
	{
    //玩家下棋
	playermove(board,ROW,COL);
	displayboard(board, ROW, COL);
	winner = isWin(board);
	if (winner != ' ')
	{
		break;
	}
	//电脑下棋
	computermove(board,ROW,COL);system("cls");
	displayboard(board, ROW, COL);
	winner = isWin(board);
	if (winner!=' ')
	{
		break;
	}
	}
	if (winner == '*') {
		printf("恭喜您 您赢了!\n");
	}
	else if (winner == '#') {
		printf("您连人工智障都下不过!\n");
	}
	else {
		printf("您只能和人工智障打平手!!\n");
	}
	
}
void test()
{
	int input = 0;
	srand((unsigned int)time(NULL));//时间戳
	do
	{
		menu();
		printf(" \n请输入( 1 / 0 )\n");
		scanf_s("%d", &input);
		switch (input)
		{
		case 1: printf("开始游戏\n    三子棋\n");
			    system("cls");game(); break;
		case 0: printf("退出游戏 \n"); break;
		default:printf(" 选择错误  请重新输入\n"); break;
		} 
	} while (input); 
}

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

以C语言实现三子棋_第1张图片

以C语言实现三子棋_第2张图片

以C语言实现三子棋_第3张图片

调试软件:visual stidio 2019

说明:1.小比特一枚,但加入了自己的思路

        2.system("cls");(清屏)我也是第一次使用 加在自己觉得还好的思路 欢迎批评指正。

        3.对于c中颜色图形界面的使用可以了解下EasyX

        4.希望大佬可以对我提出一些宝贵的意见(菜鸟在线求公开处刑)

你可能感兴趣的:(C语言,C++,c++,游戏)