La realización de tres ajedrez en lenguaje C [explicación súper detallada]

Tabla de contenido

1. Una breve idea de cómo realizar ajedrez de tres golpes.

Dos, los pasos de implementación específicos del código.

 3. Código completo

1. Parte Sanziqi.h

2. Parte Sanziqi.c

 3. parte de prueba.c



1. Una breve idea de cómo realizar ajedrez de tres golpes.

1. En primer lugar, si quieres jugar o salir del juego, necesitas un menú de selección simple.

2. Después de crear el menú, realice el cambio, la declaración del caso y elija jugar o salir.

3. Si se selecciona el juego en la declaración de cambio, se ejecutará el código de la parte del juego.

4. En la parte del juego, primero inicialice una matriz bidimensional con 3 filas y 3 columnas , e inicialice cada elemento de la matriz como un espacio , para que los jugadores siguientes puedan reemplazar los espacios cuando jueguen ajedrez con la computadora.

5. Imprime el tablero de ajedrez. Cada vez que el jugador o la computadora terminen de jugar al ajedrez, el tablero de ajedrez se imprimirá una vez , de modo que sea conveniente observar las posiciones de las piezas de ajedrez en ambos lados después de jugar al ajedrez.

6. Darse cuenta de los pasos específicos de los jugadores y las computadoras que juegan al ajedrez respectivamente.

El jugador juega al ajedrez: el jugador ingresa una coordenada, como 1 1, pero la coordenada del elemento 1 1 en la matriz es 0 0, por lo que es necesario restar uno de la coordenada ingresada por el jugador, que es la real posición del jugador en la matriz

Ajedrez por computadora: la computadora necesita usar rand (archivo de encabezado: stdlib.h) y tiempo (archivo de encabezado: time.h) para jugar al ajedrez, lo que puede hacer que la computadora juegue al ajedrez al azar.

7. Después de implementar el código para que el jugador y la computadora jueguen ajedrez, después de que el jugador y la computadora jueguen ajedrez, es necesario implementar el código para juzgar si el juego ha terminado. Hay cuatro situaciones para juzgar, a saber, el El jugador gana, la computadora gana, empata y continúa jugando al ajedrez.

8. Una vez finalizado el juego, continúa imprimiendo el menú seleccionado y el jugador decide si continúa el juego.


 Antes de comenzar a escribir, tenga en cuenta que cuando implementamos algunos programas pequeños, los escribimos en módulos . Por ejemplo, la implementación de Sanziqi.h, sanziqi.c y test.c se utilizará para implementar tres partes. Para lograr Requisitos específicos, no todos los códigos están escritos en la sección test.c. Tenga en cuenta que este método se utilizará en trabajos futuros o en la escritura de códigos.


Dos, los pasos de implementación específicos del código.

1. Cree tres partes como se muestra a continuación.

2. Consulte el archivo de encabezado en sanziqi.h , solo consulte sanziqi.h en test.c y sanziqi.c



 

3. Cree la declaración de caso de cambio de la función principal y la función de prueba en test.c

4. Crea un menú de selección simple.

5. Dado que tiene 3 filas y 3 columnas, se pueden utilizar definiciones de macro para facilitar cambios posteriores.

 

6. Implementación de la función del juego en test.c ( primero complete el marco y luego impleméntelo )

7. Implemente los requisitos de la función del juego en sanziqi.c ( declarar en sanziqi.h e implementar en sanziqi.c ), la primera imagen a continuación es la declaración y la segunda imagen es la realización de la función.

(1), la realización de la función de inicialización 


 (2), imprimir tablero de ajedrez


 (3), el jugador juega ajedrez


(4), ajedrez por computadora

 Agregue la función de prueba:



(5) Juzgar la función ganadora y perdedora




 3. Código completo

1. Parte Sanziqi.h

#pragma once
#include <stdio.h>
#include <time.h>
#include <stdlib.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);

//判断输赢
char Iswin(char board[ROW][COL], int row, int col);

2. Parte Sanziqi.c

#include "sanziqi.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)//在最后一行不打印分隔行
		{
			for (j = 0; j < col; j++)
			{
				printf("---");
				if (j < col - 1)
				{
					printf("|");//在一行最后一个不打印|,更美观
				}
			}
			printf("\n");
		}
	}
}


//玩家下棋
void Playermove(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请输入想要下棋的坐标:");
		scanf("%d %d", &x, &y);
		printf("玩家下棋:\n");
		if (x >= 1 && x <= 3 && y >= 1 && y <= 3 && board[x - 1][y - 1] == ' ')
		{
			board[x - 1][y - 1] = '*';
			break;
		}
		else
		{
			printf("输入坐标错误,请重新输入!\n");
		}
	}
}



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

	while (1)
	{
		x = rand() % row;//rand()函数会随机生成0~32767之间的数字
		y = rand() % col;//rand()%row和col即随机生成0~2,满足二维数组坐标要求
		if (board[x][y] == ' ')
		{
			printf("电脑下棋:\n");
			board[x][y] = '#';
			break;
		}
	}
}


//判断是否平局
//下满棋盘返回1,未下满则返回0
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;
}


//判断输赢
char 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][0] == board[i][2] && board[i][0] != ' ')
		{
			return board[i][0];
		}
	}

	//判断三列中每一列是否相同
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ' ')
		{
			return board[0][i];
		}
	}

	//判断第一条对角线是否相同
	if (board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] != ' ')
	{
		return board[0][0];
	}

	//判断第二条对角线是否相同
	if (board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[0][2] != ' ')
	{
		return board[0][2];
	}

	//判断是否平局
	if (Isfull(board, ROW, COL) == 1)//由于Isfull函数,不是功能型函数
		                             //只需要在sanziqi.c中实现即可
	{
		return 'P';
	}

	//若都不满足上方条件语句,则表示继续游戏
	return 'A';
}

 3. parte de prueba.c

#include "sanziqi.h"


void game()
{
	char 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);//判断输赢,并用ret接受
		if (ret != 'A')
		{
			break;//这里的ret为判断输赢函数的返回值,A是自己设定的
			      //在判断输赢函数中,返回A则继续下棋,返回P则平局
			      //返回 # 则电脑赢,返回 * 则玩家赢
			      //不返回A说明游戏结束,则在下方判断具体结果
		}

		Computermove(board, ROW, COL);//电脑下棋
		Displayboard(board, ROW, COL);//打印棋盘
		ret = Iswin(board, ROW, COL);//判断输赢,并用ret接受
		if (ret != 'A')
		{
			break;
		}
	}

	if (ret == 'P')
	{
		printf("平局!\n");
	}

	if (ret == '*')
	{
		printf("玩家赢!\n");
	 }

	if (ret == '#')
	{
		printf("电脑赢!\n");
	}
}


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

void test()
{
	int input = 0;
	do
	{
		menu();//菜单
		srand((unsigned int)time(NULL));
		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;
}


Este es el final de la implementación en lenguaje C de tres ajedrez, nos vemos en el próximo blog ♪(^∇^*)

Supongo que te gusta

Origin blog.csdn.net/m0_64411530/article/details/125569110
Recomendado
Clasificación