C语言-实现简易三子棋

 文件分类

一般来说,一个项目都是分为这样的三个文件

主函数文件 =》main.c

三子棋头文件 =》MineJapplet.h

三子棋源文件 =》MineJapplet.c

主函数文件 =》

字面意思就是一个程序当中只有一个的main函数文件。

三子棋头文件 =》

主要就是将函数的声明放在其中。

三子棋源文件 =》

主要就是将函数具体实现的代码,也就是函数的定义放在其中。

以上就是编写代码时,对于文件的一个规范。

整体框架梳理

1,玩家进入游戏时,需要有一个菜单界面,给玩家进行选择,并且系统能够进行正确的反馈

2,玩家选择开始游戏进入到游戏界面,需要有一个棋盘给玩家看到下棋后棋子的位置

3,玩家输入坐标下棋,下完棋以后电脑随机进行一个下子。并且玩家与电脑下的子需要在视觉上进行一个区分

4,每次落子以后都要进行一次判断,只要有一方在棋盘上的棋子超过三个相邻,并在一条直线上,那么该方获得胜利,游戏结束。

开始写代码

直接上代码:

MineJapplet.h

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>//随机数
#include<time.h>//时间戳
#define rows 3
#define cols 3

void menu();
void game();
void PrintBoard(char chess[rows][cols]);
void PlayerChess(char chess[rows][cols]);
void ComputerChess(char chess[rows][cols]);
bool PlayerWin(char chess[rows][cols]);
bool ComputerWin(char chess[rows][cols]);
bool IsTie(char chess[rows][cols]);

MineJapplet.c

#include"MineJapplet.h"
void menu()
{
	printf("-------------------------\n");
	printf("-----  1.play game  -----\n");
	printf("-----  2.exit  ----------\n");
	printf("-------------------------\n");
	printf("-------------------------\n");
}

void PrintBoard(char chess[rows][cols])
{
	int r = 0;
	printf("-");
	for ( r = 0; r < rows; r++)
	{
		printf("----");
	}
	printf("\n");

	int i = 0;
	for (i=0; i<rows; i++) 
	{
		int j = 0;
		
		for (j=0; j<cols; j++) 
		{
			if (chess[i][j]==0) 
			{
				printf("|   ");
			}
			else
			{
				printf("| %c ", chess[i][j]);
			}
			if (j==cols-1) 
			{
				printf("|");
			}
		}
		printf("\n");
		printf("-");
		for (r = 0; r < rows; r++)
		{
			printf("----");
		}
		printf("\n");


	}
}

void PlayerChess(char chess[rows][cols])
{
	int a = 0;
	int row = 0;
	int col = 0;
	
	while (true)
	{
		printf("坐标用空格隔开\n");
		printf("请输入坐标落子 =》");
		scanf("%d %d", &row, &col);
		if (0 < row && row < 4 && 0 < col && col < 4 && chess[row-1][col-1]==0)
		{
			chess[row - 1][col - 1] = '*';
			break;
		}
		else
		{
			printf("您的坐标输入有误,请重新输入");
			continue;
		}
	}
	
}

void ComputerChess(char chess[rows][cols])
{
	while (true)
	{
		int row = rand() % rows;
		int col = rand() % cols;
		if (chess[row][col] == 0)
		{
			chess[row][col] = '#';
			break;
		}
	}
}
bool PlayerWin(char chess[rows][cols]) 
{

	int row = 0;
	int col = 0;
	for (row=0;row<rows;row++) 
	{
		for (col=0;col<cols;col++) 
		{
			if ((chess[row][0] + chess[row][1] + chess[row][2]) == 126)
			{
				return true;
			}
			else if((chess[0][col] + chess[1][col] + chess[2][col])==126)
			{
				return true;
			}
		}
	}
	if ((chess[0][0] + chess[1][1] + chess[2][2]) == 126)
	{
		return true;
	}
	if ((chess[0][2] + chess[1][1] + chess[2][0]) == 126)
	{
		return true;
	}
	if (IsTie(chess))
	{
		printf("平局\n");
		return false;
	}
	return false;
}
bool ComputerWin(char chess[rows][cols])
{

	int row = 0;
	int col = 0;
	for (row = 0; row < rows; row++)
	{
		for (col = 0; col < cols; col++)
		{
			if ((chess[row][0] + chess[row][1] + chess[row][2]) == 105)
			{
				return true;
			}
			else if ((chess[0][col] + chess[1][col] + chess[2][col]) == 105)
			{
				return true;
			}
		}
	}
	if ((chess[0][0] + chess[1][1] + chess[2][2]) == 105)
	{
		return true;
	}
	if ((chess[0][2] + chess[1][1] + chess[2][0]) == 105)
	{
		return true;
	}
	if (IsTie(chess))
	{
		printf("平局\n");
		return false;
	}
	return false;
}
bool IsTie(char chess[rows][cols]) 
{
	int i = 0;
	for (i=0;i<rows;i++) 
	{
		int j = 0;
		for (j=0;j<cols;j++) 
		{
			if (chess[i][j]==0) 
			{
				return false;
			}
		}
	}
	return true;
}
void game() 
{
	char chess[rows][cols] = {0};
	int row = 0;
	int col = 0;
	PrintBoard(chess);
	while (true)
	{
		PlayerChess(chess);
		PrintBoard(chess);
		if (PlayerWin(chess)) 
		{
			printf("玩家胜利\n");
			break;
		}
		ComputerChess(chess);
		PrintBoard(chess);
		if (ComputerWin(chess))
		{
			printf("电脑胜利\n");
			break;
		}
	}
	
}

main.c

#include"MineJapplet.h"
int main() 
{
	int a = 0;
	srand((unsigned int)time(NULL));
	do 
	{
		xunhuan:
		menu();
		printf("请输入数字进行游戏 =》");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			game();
			goto xunhuan;
			break;
		case 2:
			printf("---------游戏结束---------");
			break;
		default:
			break;
		}
	} 
	while (0);

	
	return 0;
}

运行效果图

 


这期的写着玩就到这里

老铁们下期再见

  

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麗o麗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值