Implementación simple de tres ajedrez en lenguaje C

contenido

1. Idea básica

2. Texto

2.1 Generar directorio

               2.1.1 prueba.c

2.2 Inicializar la placa

               2.2.1 prueba.c

               2.2.2 juego.c

               2.2.3 juego.h

2.3 Impresión del tablero de ajedrez

               2.3.1 prueba.c

               2.3.2 juego.c

               2.3.3 juego.h

2.4 Los jugadores juegan al ajedrez

               2.4.1 prueba.c

               2.4.2 juego.c

               2.4.3 juego.h

2.5 Ajedrez por computadora

               2.5.1 prueba.c

               2.5.2 juego.c

               2.5.3 juego.h

2.6 Juzgando la situación

               2.6.1 prueba.c

               2.6.2 juego.c

               2.6.3 juego.h

3. Todo el código del juego.

3.1 archivo prueba.c

3.2 archivo juego.c

3.3 archivo juego.h


1. Idea básica

Veamos una descripción general de toda la plantilla para la implementación de Sanbang.

 Antes de comenzar a escribir el código, primero debemos resumir todo el código.Podemos dividir el código completo en tres partes: Primero: use el archivo test.c para probar la lógica del juego. Segundo: usa el archivo game.c para implementar la lógica del juego. Tercero: use el archivo game.h para declarar la función de implementación del juego. En el siguiente texto, continuaremos utilizando estos tres documentos.

2. Texto

2.1 Generar directorio

Como se puede ver en la plantilla de tres partidos, las primeras cuatro líneas son los elementos del menú de todo el juego, y se le darán al jugador las opciones 1.jugar o 2.salir.

Como se muestra en la figura:

               2.1.1 prueba.c

En el archivo test.c, necesitamos completar dicho código para imprimir el directorio

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

void test()
{
	int input = 0;
	srand((unsigned int)time NULL);
	do
	{
		menu();
		printf("请选择");
		scanf("%d", &input);
		//当用户输入相对应的数字时,我们可以使用switch语句来更好的接收信息
		switch (input)
		{
		case 1:
		//当用户输入1时,开始游戏
		//game();此时此刻就需要调用game()函数来实现整个游戏的过程,此过程下文会讲到
			break;
		case 0:
		//当用户输入0时,则退出游戏	
			printf("退出游戏\n");
			break;
		default:
		//当输入其他信息时,则返回错误
			printf("选择错误\n");
			break;
		}
	}while (input);//为了使游戏循环出现,我们使用 do while循环语句
}
int main()
{
	test();
	return 0;
}

 Algunas personas pueden notar que la primera línea no tiene el familiar archivo de encabezado #include<stdio.h>, pero #include "game.h", que debe enfatizarse aquí, para que nuestro bloque de código se vea más claro. puede poner todas las funciones del archivo de encabezado que deben definirse en el archivo game.h. Cuando necesite usarlo más tarde, solo necesita consultar el archivo de encabezado general.

como muestra la imagen:

2.2 Inicializar la placa

A partir de esta plantilla simple de tres banger, podemos ver que hay un total de cuadrículas de 3 * 3. Para lograr esto, podemos lograrlo creando una matriz bidimensional, es decir, char board[ROW][COL] = { 0 }; aquí ROW representa el número de filas y COL representa el número de columnas. Hay espacios en cada cuadrícula, y el propósito central de este paso es realizar los espacios en blanco, es decir, cada cuadrícula del tablero de ajedrez inicializado está vacía, para facilitar a los jugadores jugar al ajedrez.

               2.2.1 prueba.c

En el archivo test.c, necesitamos implementar un código como este

#include"game.h"
//引用头文件

void game()
{
    //创建二维数组
	char board[ROW][COL] = { 0 };
    //用InitBoard来初始化二维数组
	InitBoard(board,ROW,COL);
  
}

               2.2.2 juego.c

En el archivo game.c, necesitamos escribir el proceso específico de inicialización del tablero de ajedrez como un espacio

Como se muestra en la figura:

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
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] = ' ';
		}
	}
}


//通过创建变量i,j以及使用循环语句对每一块格子初始化为空格

               2.2.3 juego.h

Antes de inicializar la matriz, se debe declarar la función InitBoard, que debe completarse en el archivo game.h, y para poder implementar libremente el juego de varias piezas, no solo tres piezas, debe definir un línea en el archivo game.h. Cuente el tamaño del número de filas y columnas de COL. Después de guardar, debe modificar manualmente el número de filas y columnas muchas veces.

Como se muestra en la figura:

2.3 Impresión del tablero de ajedrez

A continuación se muestra una pantalla de tablero de ajedrez normal:

               2.3.1 prueba.c

Después de inicializar el tablero, necesitamos imprimir el tablero para ver cómo se ve después de la inicialización. En el archivo test.c, debe completar el siguiente código:

#include"game.h"
//引用头文件

void game()
{
    //创建二维数组
	char board[ROW][COL] = { 0 };


    //用InitBoard函数来初始化二维数组
	InitBoard(board,ROW,COL);


    //用DisplayBoard函数来实现对棋盘的打印
    DisplayBoard(board, ROW, COL);
  
}

               2.3.2 juego.c

¿Cómo realizar la impresión del tablero de ajedrez? Necesitamos pensar en este problema. En el ejemplo de tablero de ajedrez anterior, no es difícil encontrar que el tablero de ajedrez está dividido en 9 cuadrículas, y la división de cada cuadrícula tiene una regla, que se puede dividir en dos categorías. 1: fila de datos, implementada por |, puede usar una declaración de bucle para imprimir el contenido de la clase de datos. 2: Divida la línea, que se realiza mediante ---|. También puede usar la declaración de bucle para imprimir el contenido de la línea dividida.

El código que hay que hacer en este archivo:

#include"game.h"
void DisplayBoard(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++)
		{
			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");
	}
}

               2.3.3 juego.h

Si desea imprimir el formato de tablero de ajedrez de game.c, ahora debe declarar esta función en game.h

Como se muestra en la figura:

2.4 Los jugadores juegan al ajedrez

Los jugadores juegan al ajedrez con '*'

Como se muestra en la figura:

               2.4.1 prueba.c

#include"game.h"

void game()
{
	//数据存储到一个字符的二维数组中,玩家下棋是‘*’ 电脑下棋是‘#’
	char board[ROW][COL] = { 0 };//数组的初始化理想值为空格
	InitBoard(board, ROW, COL);  //对数组进行初始化函数为空格
	DisplayBoard(board, ROW, COL);  //打印三子棋模板
	while (1)                  //进行游戏
	{
		player_move(board, ROW, COL);   //玩家先玩
		DisplayBoard(board, ROW, COL); //每输入一组数组,相应的三子棋模板也要显示出来
		
	}

               2.4.2 juego.c

Para implementar todo el proceso de la función del jugador que juega al ajedrez, debe completar el siguiente código:

#include"ghame.h"
//玩家下棋
void player_move(char board[ROW][COL], int row, int col)
{
	printf("玩家下棋:>");
	int x = 0;
	int y = 0;
	scanf("%d %d", &x, &y);
	while (1)
	{
		if (x > 0 && x <= row && y > 0 & y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("该位置已被占用,请重新输入\n");
				break;
			}
		}
		else
		{
			printf("非法输入,请重新输入\n");
			break;
		}
	}
}

               2.4.3 juego.h

Antes de definir la función player_move, esta función debe declararse en game.h.

Como se muestra en la figura:

2.5 Ajedrez por computadora

Cuando el jugador termina de jugar al ajedrez, la computadora juega, el principio es similar al del jugador.

Después de la implementación, como se muestra en la figura:

               2.5.1 prueba.c

Para lograr el contenido que se muestra en la figura anterior, debe escribir el siguiente código en test.c

void game()
{
	//数据存储到一个字符的二维数组中,玩家下棋是‘*’ 电脑下棋是‘#’
	char board[ROW][COL] = { 0 };//数组的初始化理想值为空格
	InitBoard(board, ROW, COL);  //对数组进行初始化函数为空格
	DisplayBoard(board, ROW, COL);  //打印三子棋模板
	while (1)                  //进行游戏
	{
		player_move(board, ROW, COL);   //玩家先玩
		DisplayBoard(board, ROW, COL); //每输入一组数组,相应的三子棋模板也要显示出来
		computer_move(board, ROW, COL);  //电脑再玩
		DisplayBoard(board, ROW, COL);
		
}

               2.5.2 juego.c

A diferencia de la forma en que los jugadores juegan al ajedrez, debido a que los jugadores juegan al ajedrez en base a suposiciones subjetivas, y la computadora necesita una siguiente posición aleatoria, necesitamos usar srand((unsigned int)time NULL); para garantizar que la computadora juegue un valor aleatorio

Luego, en game.c necesitas completar este código:

//电脑下棋用‘#’
void computer_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	printf("电脑下棋\n");
	while (1)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

Este código debe hacerse en test.c

void test()
{
	int input = 0;
	srand((unsigned int)time NULL);     //确保电脑下的位置是个随机数
}

               2.5.3 juego.h

El archivo de encabezado de definición correspondiente también es indispensable:

2.6 Juzgando la situación

Cuando el jugador y la computadora están a un cierto nivel, es necesario juzgar el resultado o dibujar

Como se muestra en la figura:

Caracteres para ganar o perder:
// El jugador gana - '*'
// La computadora gana - '#'
// Promedio--- 'Q'
// Continuar--- 'C'

               2.6.1 prueba.c

char ret = 0;   //全局变量定义ret
void game()
{
	//数据存储到一个字符的二维数组中,玩家下棋是‘*’ 电脑下棋是‘#’
	char board[ROW][COL] = { 0 };//数组的初始化理想值为空格
	InitBoard(board, ROW, COL);  //对数组进行初始化函数为空格
	DisplayBoard(board, ROW, COL);  //打印三子棋模板
	while (1)                  //进行游戏
	{
		player_move(board, ROW, COL);   //玩家先玩
		DisplayBoard(board, ROW, COL); //每输入一组数组,相应的三子棋模板也要显示出来
		ret = is_win(board, ROW, COL);  //开始判断胜利条件
		if (ret != 'C')
		{
			break;
		}
		computer_move(board, ROW, COL);  //电脑再玩
		DisplayBoard(board, ROW, COL);
		ret = is_win(board, ROW, COL);

		if (ret != 'C')
		{
			break;
		}
	}
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢\n");
	}
	else
	{
		printf("平局\n");
	}
}

               2.6.2 juego.c

int is_full(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++)
		{
			if (board[i][j] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}


char is_win(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][1] != ' ')
		{
			return board[i][1];

		}
	}

	//判断胜利条件---三列
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
		{
			return board[1][i];
		}

	}

	//判断胜利条件---对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
	{
		return board[0][0];

	}


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

	}

	//判断平局
	if (is_full(board, row, col) == 1)
	{
		return 'Q';
	}
	//继续
	else
		return 'C';

}

               2.6.3 juego.h

3. Todo el código del juego.

3.1 archivo prueba.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
	printf("***************************************************\n");
	printf("***********           1.play          *************\n");
	printf("***********           0.exit          *************\n");
	printf("***************************************************\n");
}

int ret = 0;
void game()
{
	char board[ROW][COL] = { 0 };
	InitBoard(board,ROW,COL);
	DisplayBoard(board, ROW, COL);
	while (1)
	{
		player_move(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = is_win(board, ROW, COL);
		if (ret != 'C')
		{
			break;
		}
		computer_move(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = is_win(board, ROW, COL);

		if (ret != 'C')
		{
			break;
		}
	}
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢\n");
	}
	else
	{
		printf("平局\n");
	}
}

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

3.2 archivo juego.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
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] = ' ';
		}
	}
}

void DisplayBoard(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++)
		{
			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 player_move(char board[ROW][COL], int row, int col)
{
	printf("玩家下棋:>");
	int x = 0;
	int y = 0;
	scanf("%d %d", &x, &y);
	while (1)
	{
		if (x > 0 && x <= row && y > 0 & y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("该位置已被占用,请重新输入\n");
				break;
			}
		}
		else
		{
			printf("非法输入,请重新输入\n");
			break;
		}
	}
}


void computer_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	printf("电脑下棋\n");
	while (1)
	{
		x = rand() % row;
		y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}
int is_full(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++)
		{
			if (board[i][j] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}


char is_win(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][1] != ' ')
		{
			return board[i][1];

		}
	}
	for (i = 0; i < col; i++)
	{
		if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
		{
			return board[1][i];
		}
			
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
	{
		return board[0][0];

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

	}


	if (is_full(board, row, col) == 1)
	{
		return 'Q';
	}
	else
		return 'C';
	
}

3.3 archivo juego.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 player_move(char board[ROW][COL], int row, int col);
void computer_move(char board[ROW][COL], int row, int col);
char is_win(char board[ROW][COL], int row, int col);

Supongo que te gusta

Origin blog.csdn.net/bit_zyx/article/details/121246184
Recomendado
Clasificación