C语言实现三子棋

三子棋是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <windows.h>

#define MAX_ROW 3

#define MAX_COL 3
利用宏定义来定义棋盘的大小,因为井字棋需要一个3*3的棋盘,为了避免魔幻数字(在后续代码中出现,不能很直观的看出是长还是宽)的出现,我们用ROW和COl来代替

void init(char board[MAX_ROW][MAX_COL]) {

	for (int row = 0; row < MAX_ROW; row++) {

		for (int col = 0; col < MAX_COL; col++) {

			board[row][col] = ' ';

		}

	}

	srand((unsigned int)time(0));

}
//给用户打印一个棋盘
void printBoard(char board[MAX_ROW][MAX_COL]) {

	system("cls");

	for (int row = 0; row < MAX_ROW; row++) {

		printf("+--+--+--+\n");

		for (int col = 0; col < MAX_COL; col++) {

			printf("| %c", board[row][col]);

		}

		printf("|");

		printf("\n");

	}

	printf("+--+--+--+\n");

}
//玩家落子函数
void playerMove(char board[MAX_ROW][MAX_COL]) {

	while (1) {

		printf("请玩家落子!");

		printf("请输入你要落子的位置(row col):");

		int row = 0;

		int col = 0;

		scanf("%d %d", &row, &col);

		if (row < 0 || row > MAX_ROW || col < 0 || col > MAX_COL) {

			printf("你的输入有误,请重新输入!\n");

			continue;

		}

		if (board[row][col] != ' ') {

			printf("你输入的位置已经有子,无法继续落子!\n");

			continue;

		}

		board[row][col] = 'x';

		break;

	}





}
//电脑落子函数
void computerMove(char board[MAX_ROW][MAX_COL]) {

	printf("轮到电脑落子!\n");

	while (1) {

		int row = rand() % MAX_ROW;

		int col = rand() % MAX_COL;

		if (board[row][col] == 'x') {

			continue;

		}

		board[row][col] = 'o';

		break;

	}

}
//判断是否和棋
int isFull(char board[MAX_ROW][MAX_COL]) {

	for (int row = 0; row < MAX_ROW; row++) {

		for (int col = 0; col < MAX_COL; col++) {

			if (board[row][col] == ' ')

				return 0;

		}

	}

	return 1;

}
//判断是否连成一条线
char checkWinner(char board[MAX_ROW][MAX_COL]) {

	int row = 0;

	int col = 0;

	for (row = 0; row < MAX_ROW; row++) {

		if (board[row][col] != ' ' && board[row][0] == board[row][1] && board[row][0] == board[row][2]) {

			return board[row][0];

		}

	}

	for (col = 0; col < MAX_COL; col++) {

		if (board[0][col] != ' ' && board[0][col] == board[1][col] && board[0][col] == board[2][col]) {

			return board[0][col];

		}

	}

	if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[0][0] == board[2][2]) {

		return board[0][0];

	}

	if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[0][2] == board[2][0]) {

		return board[0][2];

	}

	if (isFull(board)) {
//棋盘满返回一个q
		return 'q';

	}
//棋盘没满返回一个空字符
	return ' ';

}

int main() {

	char board[MAX_ROW][MAX_COL] = { 0 };

	char winner = ' ';

	init(board);

	while (1) {

		printBoard(board);

		//system("pause");

		playerMove(board);

		checkWinner(board);

		winner = checkWinner(board);

		if (winner != ' ') {

			printBoard(board);

			break;

		}

		computerMove(board);

		winner = checkWinner(board);

		if (winner != ' ') {

			break;

		}

	}

	if (winner == 'x') {

		printf("恭喜你,你赢了!!!");

	}

	else if (winner == 'o') {

		printf("你真菜,竟然输了");

	}

	else {

		printf("你和人工智障五五开");

	}

	return 0;

}

以上就是三子棋的全部内容,欢迎大家提出问题.

  • 1
    点赞
  • 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、付费专栏及课程。

余额充值