C实现三子棋

  三子棋实现的步骤如下:

(1)初始化棋盘;

(2)玩家走;

(3)电脑走;

(4)判断输赢;

(5)判断棋盘是否已满。

具体代码如下:

(1)将棋盘初始化为"  ";

void init_board(char board[ROW][COL],int row,int col)
{  
//	int i=0;
//	int j=0;
//	for(i=0;i<row;i++)
//	{
//		for(j=0;j<col;j++)
//		{
//			board[i][j]=' ';
//		}
//	}
  memset(board,' ',row*col*sizeof(board[0][0]));  
}
(2)显示棋盘
void display_board(char board[ROW][COL],int row,int col)
{
	int i=0;  
    for (i=0;i<row;i++)  
	{
		printf(" — — —\n");   
        printf("|%c |%c |%c |\n", board[i][0],board[i][1],board[i][2]); 
	}   
	printf(" — — —\n"); 
}   
(3)电脑走

computerMove(char board[ROW][COL])
{
	int x=0;
	int y=0;
	while(1)
	{
		x=rand()%3;
	    y=rand()%3;
	    if(board[x][y]==' ')
		{
			board[x][y]='*';
		    break;//while中的break是用于永久终止循环
		}
	}
}

(4)玩家走

playMove(char board[ROW][COL],int row,int col)
{ 
	int x=0;
	int y=0;
	while(1)
	{
		printf("请输入坐标:>");  
        scanf("%d%d",&x,&y);  
        x--;  
        y--;  
		if(((x>=0)&&(x<=2))&&((y>=0)&&(y<=2)))
		{
			if(board[x][y]==' ')
			{  
				board[x][y]='o'; 
		        break;
			    //return;  
			}  
		}
		printf("输入坐标错误");
	}
}
(5)判断输赢

Iswin(char board[ROW][COL],int row,int col)
{
	int i=0;
	for(i=0;i<row;i++)
	{
		if((board[i][0]==board[i][1])&&board[i][1]==board[i][2]!=' ')
			return board[i][1];
	}
	for(i=0;i<row;i++)
	{
		if((board[i][0]==board[i][1])&&board[i][1]==board[i][2]!=' ')
			return board[i][1];
	}
	if((board[0][0]==board[1][1])&&board[1][1]==board[2][2]!=' ')
			return board[1][1];
	if((board[0][2]==board[1][1])&&board[1][1]==board[2][0]!=' ')
			return board[1][i];
	if(IsFull(board,ROW,COL))
	{
		return 'q';
	}
	return ' ';
}
(6)判断棋盘是否已满

IsFull(char board[ROW][COL],int row,int col)  
{
	int i=0;  
    int j=0;  
    for(i=0;i<row;i++) 
	{  
		for(j=0;j<col;j++) 
		{  
			if(board[i][j]==' ')  
				return 0;  
		}  
	}  
	return 1;  
}  
(7)测试代码

#define _CRT_SECURE_NO_WARNINGS 1
#include"sanziqi.h"


menu()
{
	printf("****************\n");
	printf("*****1.play*****\n");
	printf("*****0.exit*****\n");
	printf("****************\n");

}
game()
{
	char board[ROW][COL];
	char ret;
	init_board(board,ROW,COL);
	display_board(board,ROW,COL);
	do
	{
		printf("电脑走>..........\n");
	    computerMove(board);
	    display_board(board,ROW,COL);
	    printf("玩家走>..........\n");
        playMove(board,ROW,COL);
	    display_board(board,ROW,COL);
        ret=Iswin(board,ROW,COL);
		if(ret!=' ')  
		{  
			break;  
		}  
	}while(ret==' ');
	if(ret=='*')
		printf("电脑赢\n");
	else if(ret=='o')
		printf("玩家赢\n");
	else if(ret=='q')
		printf("平局\n");
}
test()
{
	int input=0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d",&input);
		switch(input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("选择错误,请重新输入\n");
				break;
		}

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。以下是一个简单的C语言实现单人三子棋游戏的代码: ```c #include <stdio.h> #include <stdlib.h> #define BOARD_SIZE 3 void init_board(char board[][BOARD_SIZE]); void print_board(char board[][BOARD_SIZE]); int make_move(char board[][BOARD_SIZE], int row, int col, char player_char); int check_win(char board[][BOARD_SIZE], char player_char); int main() { char board[BOARD_SIZE][BOARD_SIZE]; int row, col, win; char player_char = 'X'; init_board(board); print_board(board); while (1) { printf("\nPlayer %c's turn.\n", player_char); printf("Enter row number: "); scanf("%d", &row); printf("Enter column number: "); scanf("%d", &col); if (make_move(board, row, col, player_char)) { print_board(board); win = check_win(board, player_char); if (win) { printf("\nPlayer %c wins!\n", player_char); break; } player_char = (player_char == 'X') ? 'O' : 'X'; } else { printf("Invalid move. Try again.\n"); } } return 0; } void init_board(char board[][BOARD_SIZE]) { int i, j; for (i = 0; i < BOARD_SIZE; i++) { for (j = 0; j < BOARD_SIZE; j++) { board[i][j] = '-'; } } } void print_board(char board[][BOARD_SIZE]) { int i, j; printf("\n"); for (i = 0; i < BOARD_SIZE; i++) { for (j = 0; j < BOARD_SIZE; j++) { printf("%c ", board[i][j]); } printf("\n"); } } int make_move(char board[][BOARD_SIZE], int row, int col, char player_char) { if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE || board[row][col] != '-') { return 0; } board[row][col] = player_char; return 1; } int check_win(char board[][BOARD_SIZE], char player_char) { int i, j; int row_win, col_win, diag_win1, diag_win2; for (i = 0; i < BOARD_SIZE; i++) { row_win = 1; col_win = 1; for (j = 0; j < BOARD_SIZE; j++) { if (board[i][j] != player_char) { row_win = 0; } if (board[j][i] != player_char) { col_win = 0; } } if (row_win || col_win) { return 1; } } diag_win1 = 1; diag_win2 = 1; for (i = 0; i < BOARD_SIZE; i++) { if (board[i][i] != player_char) { diag_win1 = 0; } if (board[i][BOARD_SIZE-1-i] != player_char) { diag_win2 = 0; } } if (diag_win1 || diag_win2) { return 1; } return 0; } ``` 这个程序实现了基本的单人三子棋游戏,并且包括了判断胜负的函数。您可以根据需要修改和扩展此代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值