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

c语言 三子棋小游戏

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

c语言 三子棋小游戏

 c语言   数组基础

#include
#include
#include
#include
#define ROW 3      //宏定义 行为3
#define COL 3      //宏定义 列为3
#define PLAYER 'o'     //玩家棋子用'o'表示
#define COMPUTER 'x'   //电脑棋子用'x'表示
//判断棋盘是否下满
bool ChessBoardFull(char chess_board[ROW][COL])
{
    //遍历数组,判断数组中是否有元素值等于' '
	for (int i = 0; i < ROW; ++i)
	{
		for (int j = 0; j < COL; ++j)
		{
			if (chess_board[i][j] == ' ')
				return false;
		}
	}
	return true;
}
char CheckResult(char chess_board[ROW][COL])
{
	//返回'o',玩家赢;返回'x',电脑赢;返回'h',和棋;返回'c',继续游戏
	//判断行
	for (int i = 0; i < ROW; ++i)
	{
        //判断每行元素是否相等,同时元素不能为' '
		if (chess_board[i][0] != ' ' && chess_board[i][0] ==
			chess_board[i][1] && chess_board[i][0] == chess_board[i][2])
			return chess_board[i][0];
	}
	//判断列
	for (int j = 0; j < COL; ++j)
	{
        //判断每列元素是否相等,同时元素不能为' '
		if (chess_board[0][j] != ' ' && chess_board[0][j] ==
			chess_board[1][j] && chess_board[0][j] == chess_board[2][j])
			return chess_board[0][j];
	}
	//判断对角线
	if (chess_board[1][1] != ' ' &&
		chess_board[1][1] == chess_board[0][0] &&
		chess_board[1][1] == chess_board[2][2])
		return chess_board[1][1];
	if (chess_board[1][1] != ' ' &&
		chess_board[1][1] == chess_board[0][2] &&
		chess_board[1][1] == chess_board[2][0])
		return chess_board[1][1];
	if (ChessBoardFull(chess_board))
	{
		return 'h';
	}
	return 'c';
}
void ComputerMove(char chess_board[ROW][COL])
{
	int x, y;
    //随机数函数
	srand(time(0));
	while (1)
	{
        //电脑随机产生俩个数
		int x = rand() % ROW;
		int y = rand() % COL;
		if (chess_board[x][y] == ' ')
		{
			chess_board[x][y] = COMPUTER;
			break;
		}
	}
}
void PlayerMove(char chess_board[ROW][COL])
{
	printf("玩下下棋.n");
	printf("请输入你要下的坐标:");
	int x, y;
	while (1)
	{
		scanf_s("%d %d", &x, &y);
		//判断坐标有效性
		if (x >= ROW || x < 0 || y >= COL || y < 0)
		{
			printf("输入错误,请重新输入:");
			continue;
		}
		if (chess_board[x][y] == ' ')
		{
			chess_board[x][y] = PLAYER;
			break;
		}
	}
	
}
void DisplayChessBoard(char chess_board[ROW][COL])
{
	for (int i = 0; i < ROW; ++i)
	{
		printf("| %c | %c | %c |n", chess_board[i][0],chess_board[i][1],chess_board[i][2]);
		if (i < ROW - 1)
			printf(" --- --- ---n");
	}
}
void InitChessBoard(char chess_board[ROW][COL])
{
	for (int i = 0; i < ROW; ++i)
	{
		for (int j = 0; j < COL; ++j)
		{
			chess_board[i][j] = ' ';
		}
	}
}
void StartGame()
{
	//定义棋盘
	char chess_board[ROW][COL];
	//初始化棋盘
	InitChessBoard(chess_board);
	//进入游戏
	char winner;
	while (1)
	{
		//显示棋盘
		DisplayChessBoard(chess_board);
		//玩家下棋
		PlayerMove(chess_board);
		//判断结果
		winner=CheckResult(chess_board);
		if (winner != 'c')
			break;
		//电脑下棋
		ComputerMove(chess_board);
		//判断结果
		winner = CheckResult(chess_board);
		if (winner != 'c')
			break;
	}
	//显示结果
	DisplayChessBoard(chess_board);
	if (winner == 'h')
	{
		printf("和棋!n");
	}
	else if (winner == 'o')
	{
		printf("玩家赢!n");
	}
	else if (winner == 'x')
	{
		printf("很遗憾,你输了!n");
	}
}
void menu()
{
	printf("*********************************************n");
	printf("*****************简易三子棋******************n");
	printf("**               [1].Play                  **n");
	printf("**               [0].Exit                  **n");
	printf("*********************************************n");
}
int main()
{
    //system函数 用来设置美化代码框
	system("title 三子棋");
	system("mode con cols=46 lines=40");
	system("color F3");
	int select=1;
	menu();
	while (select)
	{
		printf("请选择:>");
		scanf_s("%d", &select);
		switch (select)
		{
		case 1:
			StartGame();
			menu();
			break;
		case 0:
			printf("退出成功!");
			break;
		default:
			printf("输入错误,请重新输入n");
			break;
		}
	}
	return 0;
}

                                                        

 

 

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

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

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