Implementación simple de tres ajedrez (lenguaje C)

1. Ideas de implementación

  1. Defina un tablero de ajedrez de 3*3, use un espacio para representar el espacio vacío, use * para representar las piezas de ajedrez jugadas por el jugador y use # para representar las piezas de ajedrez jugadas por la computadora;
  2. Menú de salida, seleccione el juego o salga del juego según la entrada del usuario (1/0);
  3. Cuando el usuario elige un juego, inicializa el tablero de ajedrez, deja que el jugador juegue la primera pieza y la computadora juega al ajedrez al azar;
  4. Muestra el tablero de ajedrez y solicita las coordenadas;
  5. Determinar si las coordenadas ingresadas por el usuario son legales y, de no ser así, indicar un error y volver a ingresar;
  6. Determine si la coordenada es una coordenada ilegal, es decir, si la posición ya está ocupada, y si está ocupada, generará un error y volverá a ingresar;
  7. Si la posición es legal, coloca las piezas correspondientes en el tablero y comprueba si alguno de los bandos gana;
  8. Si el juego no ha terminado, cambia al turno del siguiente jugador;
  9. Cuando termine el juego, dé salida al ganador o juzgue si es un empate;
  10. Espere la entrada del usuario (1 / 0) para elegir continuar el juego o salir del juego.

2. Implementación del código

Antes de comenzar necesitamos crear tres archivos:

test.c: se utiliza para construir la lógica general de la implementación de tres mafias

game.h: se usa para almacenar los archivos de encabezado y las declaraciones requeridas por la función

game.c — contiene el cuerpo de la función

Entonces puedes completar el código de tres ajedrez.

1. Crea un menú

void mune()
{
    
    
	选择1开始游戏,选择0退出游戏,选择其他则提示选择错误并重新输入
	printf("********************************\n");
	printf("********  三子棋游戏   *********\n");
	printf("********************************\n");
	printf("******** 1. 开始游戏   *********\n");
	printf("******** 0. 退出游戏   *********\n");
	printf("********************************\n");
}

int main()
{
    
    
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
    
    
		mune();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
    
    
		case 1:
			game(); //游戏主体
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default :
			printf("选择错误,重新选择!\n");
			break;
		}
	} while (input);
	return 0;
}

2. Realiza el cuerpo principal del juego.

(1) Defina un tablero de ajedrez de 3*3, inicialice el tablero de ajedrez e imprima: use espacios para representar las vacantes

//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{
    
    
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
    
    
		int j = 0;
		for (j = 0; j < COL; j++)
		{
    
    
			board[i][j] = ' ';
		}
	}
}
//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col)
{
    
    
	int i = 0;
	for (i = 0; i < row; i++)
	{
    
    
		int j = 0;
		for (j = 0; j < col; j++)
		{
    
    
			//打印数据
			printf(" %c ", board[i][j]);
			//打印分割线  '|'
			if (j != col - 1)
				printf("|");
		}
		printf("\n");
		//打印分割线
		if (i != row - 1)
		{
    
    
			j = 0;
			for (j = 0; j < col; j++)
			{
    
    
				printf("___");
				if (j != col - 1)
					printf("|");
			}
			printf("\n");
		}
	}
		printf("\n");
}

Los resultados impresos son los siguientes

inserte la descripción de la imagen aquí

(2) Deja que el jugador coloque la primera ficha

//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col)
{
    
    
	printf("玩家下棋>:\n");
	int x = 0, y = 0;
	while (1)
	{
    
    
		printf("请输入下棋的坐标,中间使用空格>:");
		scanf("%d %d", &x, &y);
		if (x >= 1 & x <= row && y >= 1 && y <= col) //判断是否可以落子
		{
    
    
			if (board[x-1][y-1] = ' ') //可以落子
			{
    
    
				board[x-1][y-1] = '*';
				break;
			}
			else //不能落子
			{
    
    
				printf("坐标被占有,不能落子,重新输入坐标\n");
			}
		}
		else //没有此坐标
		{
    
    
			printf("坐标非法,重新输入\n");
		}
	}
}

(3) La computadora juega al ajedrez al azar

//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{
    
    
	int x = 0; //0~row-1
	int y = 0; //0~col-1

	printf("电脑下棋:>\n");

	while (1)
	{
    
    
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
    
    
			board[x][y] = '#';
			break;
		}
	}
}

El ajedrez informático requiere la función sran((unsigned int)time(NULL) y la función rand(), y el uso de estas dos funciones también necesita incluir los archivos de encabezado #include<stdlib.h> y #include<time.h>, para poder hacer que las coordenadas generadas por rand sean más aleatorias, usamos la función srand() en la función principal

(4) Juzgar ganar o perder

Después de jugar al ajedrez, por supuesto, es necesario juzgar quién gana.
El signo ganador del ajedrez de tres lunas es si una fila o una columna o la línea diagonal son todas piezas del jugador o de la computadora. Si no hay victoria, es necesario juzgar si el tablero de ajedrez está lleno de empates o continuar con el juego.

//判断输赢
//玩家赢 - '*'
//电脑赢 - '#'
//平局  - 'Q'
//继续  - 'C'
char IsWin(char board[ROW][COL], int row, int col)
{
    
    
	int i = 0, j = 0;
	//行
	for (i = 0; i < row; i++)
	{
    
    
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
    
    
			return board[i][0];
		}
	}
	//列
	for (j = 0; j < col; j++)
	{
    
    
		if (board[0][j] == board[1][j] && board[1][j] && board[2][j] && board[0][j] != ' ')
		{
    
    
			return board[0][j];
		}
	}
	//对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
    
    
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
    
    
		return board[1][1];
	}
	//平局
	if (IsFull(board, row, col) == 1)
	{
    
    
		return 'Q';
	}
	//继续
	return 'C';
}

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

3. Implementación del código final

Contenido del juego.h

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3

//游戏函数声明
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col);
//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col);
//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col);
//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col);

//判断输赢
//玩家赢 - '*'
//电脑赢 - '#'
//平局  - 'Q'
//继续  - 'C'

char IsWin(char board[ROW][COL], int row, int col);

contenido en juego.c

#include "game.h"

//游戏函数的实现
//初始化棋盘
void InitBoard(char board[ROW][COL], int row, int col)
{
    
    
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
    
    
		int j = 0;
		for (j = 0; j < COL; j++)
		{
    
    
			board[i][j] = ' ';
		}
	}
}
//打印棋盘
void DisplayBoard(char board[ROW][COL], int row, int col)
{
    
    
	int i = 0;
	for (i = 0; i < row; i++)
	{
    
    
		int j = 0;
		for (j = 0; j < col; j++)
		{
    
    
			//打印数据
			printf(" %c ", board[i][j]);
			//打印分割线  '|'
			if (j != col - 1)
				printf("|");
		}
		printf("\n");
		//打印分割线
		if (i != row - 1)
		{
    
    
			j = 0;
			for (j = 0; j < col; j++)
			{
    
    
				printf("___");
				if (j != col - 1)
					printf("|");
			}
			printf("\n");
		}
	}
		printf("\n");
}
//玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col)
{
    
    
	printf("玩家下棋>:\n");
	int x = 0, y = 0;
	while (1)
	{
    
    
		printf("请输入下棋的坐标,中间使用空格>:");
		scanf("%d %d", &x, &y);
		if (x >= 1 & x <= row && y >= 1 && y <= col) //判断是否可以落子
		{
    
    
			if (board[x-1][y-1] = ' ') //可以落子
			{
    
    
				board[x-1][y-1] = '*';
				break;
			}
			else //不能落子
			{
    
    
				printf("坐标被占有,不能落子,重新输入坐标\n");
			}
		}
		else //没有此坐标
		{
    
    
			printf("坐标非法,重新输入\n");
		}
	}
}
//电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{
    
    
	int x = 0; //0~row-1
	int y = 0; //0~col-1

	printf("电脑下棋:>\n");

	while (1)
	{
    
    
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
    
    
			board[x][y] = '#';
			break;
		}
	}
}

//判断输赢
//玩家赢 - '*'
//电脑赢 - '#'
//平局  - 'Q'
//继续  - 'C'
char IsWin(char board[ROW][COL], int row, int col)
{
    
    
	int i = 0, j = 0;
	//行
	for (i = 0; i < row; i++)
	{
    
    
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
		{
    
    
			return board[i][0];
		}
	}
	//列
	for (j = 0; j < col; j++)
	{
    
    
		if (board[0][j] == board[1][j] && board[1][j] && board[2][j] && board[0][j] != ' ')
		{
    
    
			return board[0][j];
		}
	}
	//对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
    
    
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
	{
    
    
		return board[1][1];
	}
	//平局
	if (IsFull(board, row, col) == 1)
	{
    
    
		return 'Q';
	}
	//继续
	return 'C';
}

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

Contenidos en test.c

#include "game.h"

void mune()
{
    
    
	选择1开始游戏,选择0退出游戏,选择其他则提示选择错误并重新输入
	printf("********************************\n");
	printf("********  三子棋游戏   *********\n");
	printf("********************************\n");
	printf("******** 1. 开始游戏   *********\n");
	printf("******** 0. 退出游戏   *********\n");
	printf("********************************\n");
}

void game()
{
    
    
	int ret = 0;
	char board[ROW][COL] = {
    
     0 };
	//初始化棋盘
	InitBoard(board, ROW, COL);
	//打印棋盘
	DisplayBoard(board, ROW, COL);
	while (1)
	{
    
    
		//玩家下棋
		PlayerMove(board, ROW, COL);
		//打印棋盘
		DisplayBoard(board, ROW, COL);
		//判断输赢
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
		//电脑下棋
		ComputerMove(board, ROW, COL);
		//打印棋盘
		DisplayBoard(board, ROW, COL);
		//判断输赢
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	//判断 玩家/电脑 输赢或平局
	if (ret == '*')
		printf("玩家赢\n");
	else if (ret == '#')
		printf("电脑赢\n");
	else
		printf("平局\n");
}

int main()
{
    
    
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
    
    
		mune();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
    
    
		case 1:
			game(); //游戏主体
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default :
			printf("选择错误,重新选择!\n");
			break;
		}
	} while (input);
	return 0;
}

realización final

inserte la descripción de la imagen aquí

3. Resumen

Hay muchos detalles en el código de implementación del backgammon, y muchos lugares deben prestar atención a los detalles. Las partes que necesitan especial atención son: cómo se ajustan los bordes al imprimir el tablero y el diseño de la estructura del menú. Necesita saber acerca de las implementaciones de funciones individuales para evitar la duplicación tanto como sea posible en el código.

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/ikun10001/article/details/130554837
Recomendado
Clasificación