Cómo escribir un ajedrez simple de tres hombres en lenguaje C: explicación detallada

Prefacio

Para escribir un simple ajedrez de tres piezas en lenguaje C, primero tenemos que saber cómo se implementa en la pantalla y su estructura lógica.
Primero, este ajedrez de tres piezas se ve así en la pantalla: el
Inserte la descripción de la imagen aquí
jugador da un paso , y la computadora se mueve Un paso ( este código solo puede hacer que la computadora juegue al azar, no la computadora de manera inteligente ), y finalmente juzgar al ganador o al perder.
Su estructura lógica es la siguiente:
Inserte la descripción de la imagen aquí
aquí configuramos el reproductor en *, la computadora #

Explicación detallada del código

Primero, podemos crear 3 archivos: un archivo de encabezado game.h, dos archivos fuente game.c, test.c
Inserte la descripción de la imagen aquí
game.h se usa para la declaración de cada función, game.c es la implementación del código de cada función, test. c es un ajedrez de tres piezas compuesto por varias funciones

juego.h

#include<stdio.h>
#define ROW 3
#define COL 3
#include<stdlib.h>
#include<time.h>
//函数的声明
void initBoard(char board[ROW][COL], int row, int col);//初始化棋盘
void DisplayBoard(char board[ROW][COL],int row, int col);//打印棋盘
void Playmove(char board[ROW][COL], int row, int col);//玩家下棋
void computermove(char board[ROW][COL], int row, int col);//电脑下棋
//判断输赢
//电脑赢 '#'
//玩家赢 '*'
//平局   '0'
//继续  'c'
int checkwin(char board[ROW][COL], int row, int col);//判断输赢

En game.h, puede declarar algunas variables como (FILA y COL) y archivos de encabezado , y la declaración de la función a definir

juego.c

Primero se necesita la referencia game.c ** # incluir "juego" donde , después de esta referencia, se puede usar game.h dentro de las definiciones de variables y funciones **

Inicializar el tablero de ajedrez

void initBoard(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] = ' ';
		}
	}
}

Impresión de tablero de ajedrez

Primero, necesitamos imprimir un tablero de ajedrez como este
Inserte la descripción de la imagen aquí

void DisplayBoard(char board[ROW][COL], int row, int col)//打印棋盘
{
    
    
	int i = 0;
	for (i = 0; i < row; i++)
	{
    
    
		//打印数据
		/*printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);*/
		int j = 0;
			for (j = 0; j < col; j++)
			{
    
    
				printf(" %c ", board[i][j]);
				//前面将board[i][j]赋值为空格
				//%c左右有两个空格,这样看起来更加美观
				if (j<col - 1)
					printf("|");
					//第三列就不用打印|
			}
			printf("\n");
			//打印分割的行
			/*if (i<row-1)
			printf("---|---|---\n");*/
			if (i < row - 1)//第三行不用打印---|---|---
			{
    
    
				for (j = 0; j < col; j++)
				{
    
    
					printf("---");
					if (j < col - 1)
						printf("|");
				}
				printf("\n");
			}
	}
}

Jugador, jugar al ajedrez

Inserte la descripción de la imagen aquí


void Playmove(char board[ROW][COL], int row, int col)//玩家下棋
{
    
    
	printf("玩家走:>\n");
	printf("请输入一个坐标\n");
	int i = 0;
	int j = 0;
	//判断合法性
	while (1)
	{
    
    
		scanf("%d%d", &i, &j);
		if (i >= 1 && i <= row && j >= 1 && j <= col)
		{
    
    
			//判断棋盘位置是否有位置
			if (board[i-1][j-1] == ' ')
			{
    
    
				//假设输入第一行第一个的坐标为(1,1),我们需要对i-1和j-1才能与二维数组的第一个元素相对应
				board[i-1][j-1] = '*';
				break;
			}
			else
				printf("该出已落棋,请重新选择");
		}
		else
		{
    
    
			printf("坐标非法,请重新选择\n");
		}
	}
}

Ajedrez de computadora

void computermove(char board[ROW][COL], int row, int col)//电脑下棋
{
    
    
	printf("电脑走:>\n");
	while (1)
	{
    
    
	//rand可以生成一个随机数,但需要在前面引用srand函数,前面在主函数已经引用了
		int x = rand() % row;
		int y = rand() % col;
		//x y都模3使x y的随机值为0 1 2
		if (board[x][y] == ' ')
		{
    
    
		//判断是否有位置可以落子
			board[x][y] = '#';
			break;
		}
	}
}

Ganar o perder

int checkwin(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] && board[i][0] != ' ')
		{
    
    
		//若玩家赢,返回*
		//电脑赢,返回#
			return board[i][0];
		}
	}
	for (i = 0; i < col; i++)
	{
    
    
	//判断三列
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
		{
    
    
			return board[0][i];
		}
	}
	//判断对角线
	if (board[0][0] == board[1][1] && board[2][2] == board[1][1] &&board[1][1]!=' ')
	{
    
    
		return board[1][1];
	}
	//判断对角线
	if (board[1][2] == board[1][1] && board[2][1] == board[1][1] && board[1][1]!= ' ')
	{
    
    
		return board[1][1];
	}
	//若棋盘全满则返回1
	//若棋盘满了,但没有一方赢,则平局,返回Q
	if (full(board,row,col))
	{
    
    
		return 'Q';
	}
	//若以上条件都么有满足,则游戏继续,返回'c'
	return 'c';
}

prueba.c

Finalmente, solo necesitamos empalmar las funciones definidas en la función de juego. El
jugador juega al ajedrez e imprime el tablero para determinar si gana o pierde. La computadora juega al ajedrez e imprime el tablero para determinar si gana o pierde hasta el final de el lazo.

#include<stdio.h>
//可以使用game.h上的变量
#include"game.h"
void menu()
{
    
    
	printf("*******************************\n");
	printf("*                             *\n");
	printf("*      1.进入游戏             *\n");
	printf("*      0.退出游戏             *\n");
	printf("*                             *\n");
	printf("*                             *\n");
	printf("*******************************\n");

}
void game()
{
    
    
	char ret = 0;
	char board[ROW][COL];//初始化为空格
	//初始化棋盘,初始化为空格
	initBoard(board,ROW,COL);
	DisplayBoard(board, ROW, COL);
	//ROW行 COL列 这样定义更加灵活
	while (1)
	{
    
    
		//玩家下棋
		Playmove(board, ROW, COL);
	    //判断输赢
		ret = checkwin(board, ROW, COL);
		if (ret != 'c')
		{
    
    
			break;
		}
		DisplayBoard(board, ROW, COL);
		//电脑下棋
		printf("\n");
		computermove(board, ROW, COL);//随机下棋
		
		DisplayBoard(board, ROW, COL);
		printf("\n");
		ret = checkwin(board, ROW, COL);
		if (ret != 'c')
		{
    
    
			break;
		}
		//打印棋盘

		
	}
	if (ret == '#')
		printf("电脑赢了\n");
	else if (ret == '*')
		printf("玩家赢了\n");
	else if (ret == 'Q')
		printf("平局\n");

}
int main()
{
    
    
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
    
    
		//打印一个菜单
		menu();
		printf("请选择:>\n");
		scanf("%d", &input);
		switch (input)
		{
    
    
		case 1:
			game();//三子棋游戏
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
		
	} while (input);
	return 0;
}
El anterior es un blog escrito por el bloguero a través de su propio entendimiento y el lenguaje de su propia organización. Si hay un error, por favor ayúdenme a corregirlo, gracias

Supongo que te gusta

Origin blog.csdn.net/sjp11/article/details/114852455
Recomendado
Clasificación