Juego básico en lenguaje C: implementación de ajedrez de tres piezas (explicaciones detalladas con imágenes y textos, el código se puede copiar)

Creo que todos han tenido la experiencia de jugar de ida y vuelta con sus compañeros en clase. ¿Alguna vez has pensado en escribir un juego de ida y vuelta en una computadora? Bienvenido a este blog y trabajemos con el blogger para implementar una versión simple de ajedrez de tres piezas en lenguaje C.

1. Descripción del problema

Utilice el conocimiento aprendido del lenguaje C para implementar un juego de ajedrez simple de tres piezas.

2. Proceso de implementación básico

Antes de comenzar a escribir código, primero aclaremos la lógica básica de nuestra codificación:

1. Crea una interfaz de menú donde puedas elegir iniciar o salir del juego.
2. Cree un tablero de ajedrez de tres piezas e inicialice un tablero de ajedrez vacío.
3. Imprime el tablero de ajedrez.
4. El jugador hace un movimiento (el jugador ingresa las coordenadas de fila y columna para hacer un movimiento) y lo imprime. 'x' significa que el jugador hace un movimiento. 5. La computadora hace un movimiento (una posición aleatoria) y lo
imprime 'o' significa que la computadora hace un movimiento.
6. Determine el resultado (perder, ganar, empatar), 'q' significa empate.
7. Regrese al paso 2 para continuar la ejecución.

3. Principales pasos de implementación

3.1 Interfaz de menú

int menu(){
    
    
	printf("-------------------------\n");
	printf("--------1.开始游戏--------\n");
	printf("--------0.退出游戏--------\n");
	printf("-------------------------\n");
	int input = 0;
	printf("请输入你的选择:");
	scanf("%d", &input);
	return input;
}

3.2 Crear un tablero de ajedrez

Debido a que lo que estamos implementando es ajedrez de tres piezas, imprimimos un tablero de ajedrez de 3 * 3 y usamos el tipo char para implementarlo.

#define MAX_ROW 3
#define MAX_COL 3
char chessBoard[MAX_ROW][MAX_COL] = {
    
     0 };

Nota: 使用宏定义的原因:

1. Mejore la legibilidad del código y facilite la comprensión del significado MAX_ROWcuando se encuentre en códigos posteriores MAX_COL.
2. Mejorar la escalabilidad: si desea modificar el tamaño del tablero de ajedrez en el futuro, la modificación del código será muy conveniente.

3.3 Inicialización del tablero de ajedrez

Podemos dejarlo en blanco.

void init(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	for (int row = 0; row < MAX_ROW; row++)
	{
    
    
		for (int col = 0; col < MAX_COL; col++)
		{
    
    
			chessBoard[row][col] = ' ';
		}
	}
}

3.4 Imprimir el tablero de ajedrez

Nota: Usamos el área en blanco para imprimir el tablero de ajedrez, por lo que el tablero de ajedrez que vemos solo puede ser negro sin líneas divisorias claras, por lo que debemos agregar algunos símbolos apropiados al imprimir el tablero de ajedrez para hacer nuestro patrón más hermoso (por supuesto, Competente Los veteranos pueden intentar usar la función easyx () para deshacerse de la ventana negra en nuestro pequeño juego), por lo que elegimos un método de impresión más hermoso. La implementación específica es la siguiente:

void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	printf("+---+---+---+\n");
	for (int row = 0; row <MAX_ROW; row++) 
	{
    
    
		printf("| %c | %c | %c |\n", chessBoard[row][0],
			chessBoard[row][1], chessBoard[row][2]);
		printf("+---+---+---+\n");
	}
}

Miremos las representaciones: ¿no son relativamente hermosas?
Insertar descripción de la imagen aquí
El tablero de ajedrez también está listo, es hora de que juguemos al ajedrez ->

3.5 Movimientos del jugador

El jugador ingresa las coordenadas de la fila y la columna para indicar las coordenadas del movimiento y usa 'x' para indicar el movimiento del jugador.

Aviso:

1. El movimiento del jugador debe estar dentro del alcance del tablero de ajedrez.
2. Los jugadores deben colocar piedras en el espacio vacío sobre el tablero de ajedrez.
3. Si las coordenadas ingresadas no son satisfactorias, vuelva a ingresarlas.

void playerMove(char chessBoard[MAX_ROW][MAX_COL]){
    
    
	while (1)
	{
    
    
		int row = 0;
		int col = 0;
		printf("请输入坐标(row col):");
		scanf("%d %d", &row, &col);
		if (row < 1 || row >= MAX_ROW+1 || col < 1 || col >= MAX_COL+1)
		{
    
    
			printf("您的坐标不在合法范围内 [0, 2],请重新输入:\n");
			continue;
		}
		if (chessBoard[row][col] != ' ')
		{
    
    
			printf("您的坐标位置已经有子了!\n");
			continue;
		}
		chessBoard[row-1][col-1] = 'x';
		break;
	}
}

3.6 Movimientos de la computadora (aleatorios)

No podemos completar el juego de ajedrez inteligente con IA simplemente comenzando con el conocimiento del lenguaje C. Solo podemos completar nuestro simple juego de ajedrez de tres piezas mediante movimientos aleatorios.
La computadora genera aleatoriamente coordenadas de fila y columna, y 'o' representa el movimiento de la computadora.
Aviso:

1. Utilice el archivo de encabezado de tiempo en la función principal para utilizar el tiempo como una semilla de número aleatorio para garantizar que las coordenadas de fila y columna obtenidas sean verdaderamente aleatorias.
2. El resto del juego de ajedrez es similar a cómo los jugadores juegan al ajedrez.

void computerMove(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	while (1)
	{
    
    
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (chessBoard[row][col] != ' ')
		{
    
    
			continue;
		}
		chessBoard[row][col] = 'o';
		break;
	}
}

En este momento, ambas partes ya han jugado ajedrez y debemos juzgar si hay una victoria, una derrota o un empate.

3.7 El juicio de victoria o derrota es un empate

Sabemos que después de cada movimiento ocurrirán cuatro situaciones, a saber: el jugador gana, la computadora gana, empata o continúa.
La determinación de la victoria o la derrota es la siguiente:

1. Determinar todas las filas
2. Determinar todas las columnas
3. Determinar dos diagonales

La determinación de un empate es:

1. Si algún elemento de la matriz es " ", entonces no está lleno. Si ninguno de los elementos es " ", entonces está lleno.
2. Si el tablero está lleno y no hay ganador, se considerará empate.

int isFull(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	for (int row = 0; row < MAX_ROW; row++)
	{
    
    
		for (int col = 0; col < MAX_COL; col++)
		{
    
    
			if (chessBoard[row][col] == ' ')
			{
    
    
				return 0;
			}

		}
	}
	return 1;
}

char isWin(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	for (int row = 0; row < MAX_ROW; row++)
	 {
    
    
		if (chessBoard[row][0] != ' '
			&& chessBoard[row][0] == chessBoard[row][1]
			&& chessBoard[row][0] == chessBoard[row][2]) 
		{
    
    
			return chessBoard[row][0];
		}
	}
	for (int col = 0; col < MAX_COL; col++) 
	{
    
    
		if (chessBoard[0][col] != ' '
			&& chessBoard[0][col] == chessBoard[1][col]
			&& chessBoard[0][col] == chessBoard[2][col]) 
		{
    
    
			return chessBoard[0][col];
		}
	}
	
	if (chessBoard[0][0] != ' '
		&& chessBoard[0][0] == chessBoard[1][1]
		&& chessBoard[0][0] == chessBoard[2][2]) 
	{
    
    
		return chessBoard[0][0];
	}
	
	if (chessBoard[2][0] != ' '
		&& chessBoard[2][0] == chessBoard[1][1]
		&& chessBoard[2][0] == chessBoard[0][2]) 
	{
    
    
		return chessBoard[2][0];
	}
	
	if (isFull(chessBoard)) 
	{
    
    
		return 'q';
	}
	
	return ' ';
}

3.8 Función principal del juego

Usamos una función para llamar a otras funciones que necesitamos, de la siguiente manera:

void game() {
    
    
	char chessBoard[MAX_ROW][MAX_COL] = {
    
     0 };
	init(chessBoard);
	char winner = ' ';
	while (1) {
    
    
		system("cls");
		print_chessBoard(chessBoard);
		playerMove(chessBoard);
		winner = isWin(chessBoard);
		if (winner != ' ') {
    
    
			break;
		}
		computerMove(chessBoard);
		winner = isWin(chessBoard);
		if (winner != ' ') {
    
    
			break;
		}
	}
	print_chessBoard(chessBoard);
	if (winner == 'x') {
    
    
		printf("恭喜您, 您赢了!\n");
	}
	else if (winner == 'o') {
    
    
		printf("哈哈,您连人工智障都下不过!\n");
	}
	else {
    
    
		printf("您只能和人工智障打平手!!\n");
	}
}

4. Demostración de resultados

Hacemos una serie de demostraciones aleatorias y los resultados son los siguientes:
Insertar descripción de la imagen aquí

5. Implementación general del código

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_ROW 3
#define MAX_COL 3

//主菜单
int menu() {
    
    
	printf("-------------------------\n");
	printf("--------1.开始游戏--------\n");
	printf("--------0.退出游戏--------\n");
	printf("-------------------------\n");
	int input = 0;
	printf("请输入你的选择:");
	scanf("%d", &input);
	return input;
}

//初始化棋盘
void init(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	for (int row = 0; row < MAX_ROW; row++)
	{
    
    
		for (int col = 0; col < MAX_COL; col++)
		{
    
    
			chessBoard[row][col] = ' ';
		}
	}
}

//打印棋盘
void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	printf("+---+---+---+\n");
	for (int row = 0; row < MAX_ROW; row++)
	{
    
    
		printf("| %c | %c | %c |\n", chessBoard[row][0],
			chessBoard[row][1], chessBoard[row][2]);
		printf("+---+---+---+\n");
	}
}

//玩家落子
void playerMove(char chessBoard[MAX_ROW][MAX_COL]) {
    
    
	while (1) {
    
    
		int row = 0;
		int col = 0;
		printf("请输入坐标(row col):");
		scanf("%d %d", &row, &col);
		if (row < 1 || row >= MAX_ROW+1 || col < 1 || col >= MAX_COL+1) {
    
    
			printf("您的坐标不在合法范围内 [0, 2],请重新输入:\n");
			continue;
		}
		if (chessBoard[row-1][col-1] != ' ') {
    
    
			printf("您的坐标位置已经有子了!\n");
			continue;
		}
		chessBoard[row-1][col-1] = 'x';
		break;
	}
}

//电脑随机落子
void computerMove(char chessBoard[MAX_ROW][MAX_COL]) 
{
    
    
	while (1) 
	{
    
    
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (chessBoard[row][col] != ' ') 
		{
    
    
			continue;
		}
		chessBoard[row][col] = 'o';
		break;
	}
}

//判断落子后的四种情况
int isFull(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	for (int row = 0; row < MAX_ROW; row++)
	{
    
    
		for (int col = 0; col < MAX_COL; col++)
		{
    
    
			if (chessBoard[row][col] == ' ')
			{
    
    
				return 0;
			}

		}
	}
	return 1;
}
char isWin(char chessBoard[MAX_ROW][MAX_COL])
{
    
    
	for (int row = 0; row < MAX_ROW; row++)
	{
    
    
		if (chessBoard[row][0] != ' '
			&& chessBoard[row][0] == chessBoard[row][1]
			&& chessBoard[row][0] == chessBoard[row][2])
		{
    
    
			return chessBoard[row][0];
		}
	}
	for (int col = 0; col < MAX_COL; col++)
	{
    
    
		if (chessBoard[0][col] != ' '
			&& chessBoard[0][col] == chessBoard[1][col]
			&& chessBoard[0][col] == chessBoard[2][col])
		{
    
    
			return chessBoard[0][col];
		}
	}

	if (chessBoard[0][0] != ' '
		&& chessBoard[0][0] == chessBoard[1][1]
		&& chessBoard[0][0] == chessBoard[2][2])
	{
    
    
		return chessBoard[0][0];
	}

	if (chessBoard[2][0] != ' '
		&& chessBoard[2][0] == chessBoard[1][1]
		&& chessBoard[2][0] == chessBoard[0][2])
	{
    
    
		return chessBoard[2][0];
	}

	if (isFull(chessBoard))
	{
    
    
		return 'q';
	}

	return ' ';
}

//游戏实现总函数
void game() {
    
    
	char chessBoard[MAX_ROW][MAX_COL] = {
    
     0 };
	init(chessBoard);
	char winner = ' ';
	while (1) {
    
    
		system("cls");
		print_chessBoard(chessBoard);
		playerMove(chessBoard);
		winner = isWin(chessBoard);
		if (winner != ' ') {
    
    
			break;
		}
		computerMove(chessBoard);
		winner = isWin(chessBoard);
		if (winner != ' ') {
    
    
			break;
		}
	}
	print_chessBoard(chessBoard);
	if (winner == 'x') {
    
    
		printf("恭喜您, 您赢了!\n");
	}
	else if (winner == 'o') {
    
    
		printf("哈哈,您连人工智障都下不过!\n");
	}
	else {
    
    
		printf("您只能和人工智障打平手!!\n");
	}
}


int main()
{
    
    
	srand((unsigned int)time(0));
	while (1) {
    
    
		int input = menu();
		if (input == 1) {
    
    
			game();
		}
		else if (input == 0) {
    
    
			printf("退出游戏,GOODBYE!!!!!\n");
			break;
		}
		else {
    
    
			printf("输入错误!请重新输入!\n");
			continue;
		}
	}
	system("pause");
	return 0;
}

Resumir

Así es como se implementa el ajedrez simple de tres piezas. Ve y desafía nuestro "retraso artificial". El blogger actualizará la implementación del buscaminas en el futuro. Si estás interesado, no olvides darle al blogger un tres en- ¡una fila!

Supongo que te gusta

Origin blog.csdn.net/m0_65038072/article/details/127479006
Recomendado
Clasificación