0
点赞
收藏
分享

微信扫一扫

C语言小游戏:三子棋(简单版)实现讲解

迪莉娅1979 2022-02-20 阅读 54
c语言

目录

前言

打印菜单

初始化棋盘

打印棋盘

玩家下棋

电脑下棋(重难点)

判断输赢

组合函数来实现游戏

 源代码    


前言

最终实现的样式

              


 

打印菜单

void menu(void)   //由于不需要返回值而且没有参数,所以返回类型和函数参数都是void
{
	printf("**********************\n");
	printf("***** 1、开始游戏 *****\n");          //可以根据自己的喜好来调格式
	printf("***** 0、退出游戏 *****\n");          //在屏幕中间效果可能会更好(我不会)
	printf("**********************\n");
}

 

初始化棋盘


//这里是使用函数的形式来进行初始化,首先要在主函数里面创建一个二维的字符数组
void star_board(char board[ROW][COL],int row,int col)
{
	for (int i = 0; i < row; i++)          //两层的循环分别代表着行和列
	{
		for (int j = 0; j < col; j++)
		{
			board[i][j] = ' ';    //初始化为' '。
		}
	}

 

打印棋盘

void put_board(char board[ROW][COL],int row,int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)                    
				printf("|");                  //每列结束的时候打印 |来区分列
		}
		if (i < row - 1)
		{
			printf("\n");
			printf("------------");           //每行结束的时候打印——————来区分行
			printf("\n");
		}
		else
			printf("\n");

	}
}

 

玩家下棋


//小细节:形参ch是为了将数组中的元素改成自己想要的字符,这样就可以避免重复多次定义函数

void player_move(char board[ROW][COL], int row, int col, char ch)
{
	int x, y;
	printf("玩家下棋,请输入坐标:");
	do {
		scanf("%d%d", &x, &y);
		if (x - 1 > row || y - 1 > col)
		{
			printf("非法输入,请输入正确的坐标:");     //没有输入正确的坐标的时候给与正确的提示
			continue;
		}
		if (board[x - 1][y - 1] == ' ')
		{
			board[x - 1][y - 1] = ch;            //将数组中的元素改为ch
			break;
		}
		else
			printf("该坐标已经被占用,请重新输入坐标:");   //输入已经被下过的坐标的时候给与提示
	} while (1);
	
}

 

电脑下棋(重难点)

void computer_move(char board[ROW][COL], int row, int col, char ch)    //控制电脑的棋子样式
{
	printf("电脑下棋:\n");
	
	while (1)
	{
		int x = rand() % 3;        //使电脑的棋子落在棋盘内
		int y = rand() % 3;
		if (board[x][y] == ' ')        //判断棋盘有没有被下过
		{
			board[x][y] = ch;           //电脑下棋
			break;
		}
	}
}

 

判断输赢

char is_win(char board[ROW][COL], int row, int col)
{
	int count = 0;
	for (int i = 0; i < row; i++)
	{
		if (board[i][0] == '*' && board[i][1] == '*' && board[i][2] == '*')
			return '*';
		if (board[i][0] == '#' && board[i][1] == '#' && board[i][2] == '#')
			return '#';
	}
	if ((board[0][0] == '*' && board[1][1] == '*' && board[2][2] == '*') || (board[0][2]     
    == '*' && board[1][1] == '*' && board[2][0] == '*'))
	{
		return '*';
	}
	if ((board[0][0] == '#' && board[1][1] == '#' && board[2][2] == '#') || (board[0][2] 
    == '#' && board[1][1] == '#' && board[2][0] == '#'))
	{
		return '#';
	}
	for (int i = 0; i < col; i++)
	{
		if (board[0][i] == '*' && board[1][i] == '*' && board[2][i] == '*')
			return '*';
		if (board[0][i] == '#' && board[1][i] == '#' && board[2][i] == '#')
			return '#';
	}
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
				count++;
		}
	}
	if (count == 0)
	{
		printf("游戏平局!!");
		return '&';
	}	
}

 

组合函数来实现游戏

void game()
{
	char board[ROW][COL];
	star_board(board, ROW, COL);        //初始化棋盘
	put_board(board, ROW, COL);          //打印棋盘

	do {
		player_move(board, ROW, COL, '*');        //玩家下棋
		put_board(board, ROW, COL);               //打印棋盘
		if (is_win(board, ROW, COL) == '*')       //判断输赢
		{
			printf("玩家赢!!\n");
			break;
		}
		if (is_win(board, ROW, COL) == '&')       //判断是否平局
		{
			printf("游戏平局!!\n");
			break;
		}
		computer_move(board, ROW, COL, '#');      //电脑下棋
		put_board(board, ROW, COL);               //打印棋盘
		if (is_win(board, ROW, COL) == '#')       //判断输赢
		{
			printf("电脑赢!!\n");
			break;
		}
		if (is_win(board, ROW, COL) == '&')       //判断输赢
		{
			printf("游戏平局!!\n");
			break;
		}
	} while (1);
}

 源代码    

举报

相关推荐

0 条评论