栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

三子棋 (C语言)【超详解】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

三子棋 (C语言)【超详解】

目录

项目的创建:

(1)菜单的实现:

(2)game函数的实现:

1.棋盘的打印:

 2.玩家下棋:

 3.电脑下棋

 4.判断胜负:


项目的创建:

test.c:用于代码的测试;

game.h:用于宏定义,头文件,和函数声明;

game.c:用于函数功能的实现;

(1)菜单的实现:

代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"
void menu()
{
	printf("***************************************n");
	printf("*********1.PLAY      0.EXIT   *********n");
	printf("***************************************n");
	printf("***************************************n");
}

int main()
{
	int input = 0;
	do
	{
		menu();
		srand((unsigned int)time(NULL));
		printf("请选择:>");
		scanf_s("%d", &input);
		switch (input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("游戏退出!");
				break;
			default:
				printf("输入错误,请重新输入!");
				break;
		}
	} while (input);
	return 0;
}

使用do - while 和 switch语句实现一个简单的菜单显示;

效果如下:


(2)game函数的实现:

1.棋盘的打印:

代码:

//打印棋盘
void display(char arr[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf(" %c ", arr[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");
		}
	}
}

运行效果:

 2.玩家下棋:

代码:

首先判定x y的合法性,和坐标是否有被落子,如果均符合要求 ,玩家就落子,否则重新输入坐标。      

//玩家下棋
void player(char arr[ROW][COL])
{
	int x = 0, y = 0;
	while (1)
	{
		printf("输入坐标:>");
		scanf_s("%d %d", &x, &y);
		if (x <= ROW && y <= COL && x > 0 && y > 0  && arr[x - 1][y - 1] == ' ')
		{
			arr[x - 1][y - 1] = '*';
			break;
		}
		else 
		{
			printf("输入错误,请重新输入:n");
		}
	}
}

运行效果:

 3.电脑下棋

代码:

使用随机数生成函数生成电脑的即将要落子的坐标;

//电脑下棋
void computer(char arr[ROW][COL])
{
	
	while (1)
	{
		int x = rand() % 3;
		int y = rand() % 3;
		if (arr[x][y] == ' ' && arr[x][y] != '*')
		{
			arr[x][y] = '#';
			break;
		}

	}

}

运行效果:

 4.判断胜负:

 代码:

其中要对每一行,每一列,斜线进行判断,是玩家赢还是电脑赢,如果棋子落满都没有分出胜负就判断为平局;

//判断输赢
int dgame(char arr[ROW][COL])//和局
{
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
		{
			if (arr[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}
int judge(char arr[ROW][COL])
{
	//判断行
	for (int i = 0; i < ROW; i++)
	{
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '*')
		{
			printf("玩家赢!n");
			return 1;
			break;
		}
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '#')
		{
			printf("电脑赢!n");
			return 1;
			break;
		}
	}
	//判断列
	 for (int i = 0; i < COL; i++)
	{
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '*')
		{
			printf("玩家赢!n");
			return 1;
			break;
		}
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '#')
		{
			printf("电脑赢!n");
			return 1;
			break;
		}
	}
	//判断斜线
	 if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])
	 {
		 if (arr[1][1] == '#')
		 {
			 printf("电脑赢!n");
			 return 1;
		 }
		 else if (arr[1][1] == '*')
		 {
			 printf("玩家赢!n");
			 return 1;
		 }
	 }
	 else if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])
	 {
		 if (arr[1][1] == '#')
		 {
			 printf("电脑赢!n");
			 return 1;
		 }
		 else if (arr[1][1] == '*')
		 {
			 printf("玩家赢!n");
			 return 1;
		 }
	 }
	 else if (1 == dgame(arr))
	 {
		 printf("和局 n");
		 return 1;
	 }
	 return 0;
}

运行效果:

电脑赢:

 玩家赢:


以上就是三子棋的基本实现了,如果帮到你请你带那个赞吧

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029154.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号