Lenguaje C----(simple) juego de tres golpes

Este artículo es una publicación de blog de cuaderno escrita por el autor cuando aprendió por primera vez el lenguaje C. Corríjame si hay algún error. ¡gracias! ! ! !


Tabla de contenido

Este artículo es una publicación de blog de cuaderno escrita por el autor cuando aprendió por primera vez el lenguaje C. Corríjame si hay algún error. ¡gracias! ! ! !

1. Descripción del problema

En segundo lugar, la lógica básica

Tres pasos específicos

1. Introduce la lógica de selección del juego.

2. Cuerpo del juego

3. Crea un tablero de ajedrez

4. Inicializa la placa

5. Imprime y embellece el tablero de ajedrez

6. Los jugadores juegan al ajedrez

7. Ajedrez informático

8. Juez gane o pierda

En cuarto lugar, el cuerpo de la función del juego.

Cinco, el código específico de los tres archivos.

1, fuente.c

2, juego.c

3, juego.h

¡gracias por ver! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !


Etapa de preparación: Hoy usamos programación modular para crear tres archivos.

test.c //usado para probar la lógica del juego

game.c //Implementación de las funciones del juego

game.h //Declaración de funciones en el juego, definición de símbolos.



1. Descripción del problema

Escriba código para implementar un juego de backgammon simple.

En segundo lugar, la lógica básica

1. En primer lugar, debemos escribir un menú de juego para elegir si ingresar o salir del juego.

2. El cuerpo del juego debe estar encapsulado en una función.

3. Crea una matriz bidimensional como un tablero de ajedrez.

4. Imprime mi tablero de ajedrez y embellece la función del tablero de ajedrez.

5. La función del jugador que juega al ajedrez.

6. La función del ajedrez informático

7. La función de juzgar el resultado

8. Regrese al menú y elija ingresar al juego o salir del juego nuevamente

Tres pasos específicos

1. Introduce la lógica de selección del juego.

Escribir código para lograr:

Ingresa 1 --> ingresa al juego;

Introduce 0 --> sal del juego;

Ingrese otros números -> mostrar error de entrada, ¡vuelva a ingresar!

#include "game.h"


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


void test()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//这里是游戏实现的函数
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default :
			printf("输入错误,请重新选择!!!\n");
		}
	}while (input);//这里直接用input也可以
}


int  main()
{
	srand((unsigned int)time(NULL));
	test();
}

Nota: El archivo de encabezado debe incluirse aquí #include<stdio.h>, pero creamos "game.h", podemos incluir #include "game.h" en "test.c" y "game.c". En "game.h" contiene archivos de encabezado de funciones de biblioteca , declaraciones de funciones personalizadas y algunas variables macro personalizadas. De esta forma, algunos archivos de encabezado, macros personalizadas,,,, etc. pueden definirse centralmente y puede reducirse el número de definiciones.

2. Cuerpo del juego

Caso 1 de la función de prueba: una función utilizada es el núcleo de este juego. Implementa todas las funciones del juego en esta función. Los siguientes son los diversos códigos de función en la función del juego. Ahora analicémoslos uno por uno.

void game()
{
	//创建一个棋盘数组
	char board[ROW][COL] = { ' ' };
	//初始化棋盘
	init_board(board, ROW, COL);
	//打印棋盘并美化棋盘
	print_board(board, ROW, COL);
	while (1)
	{

		//玩家下棋
		play_board(board, ROW, COL);
		//电脑下棋
		computer_board(board, ROW, COL);
		//print_board(board, ROW, COL);
		//判断输赢
		//玩家赢返回*
		//电脑赢返回#
		//平局返回p
		//继续返回j
		print_board(board, ROW, COL);
		if (win(board, ROW, COL) == '*')
		{
			printf("玩家赢!!!!\n");
			break;
		}
		else if (win(board, ROW, COL) == '#')
		{
			printf("电脑赢!!!!!\n");
			break;
		}
		else if (win(board, ROW, COL) == 'p')
		{
			printf("你真的菜,平局!!!!\n");
			break;
		}
		else
			printf("请再次下棋!!!\n");

	}
	

}

3. Crea un tablero de ajedrez

Suponiendo que el jugador juega al ajedrez como *, la computadora juega al ajedrez como #, y el lugar donde no se juega al ajedrez se representa con un espacio. Requiere datos que no sean de tipo char

El tablero de ajedrez necesita una matriz bidimensional de 3*3 para representar

char board[ROW][COL] = { ' ' };

Tenga en cuenta que ROW y COL aquí son variables macro personalizadas.

1. Mejorar la compatibilidad del código, por ejemplo: cambiar ROW y COL puede cambiar directamente el tablero de ajedrez.

2. Es fácil de entender y mejora la legibilidad. Cuando vea ROW, puede pensar en él como una fila de un tablero de ajedrez, y COL es una columna.

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 3
#define COL 3

4. Inicializa la placa

Los elementos en la matriz deben ser 'espacio' cuando se juega al ajedrez, aquí hay un doble bucle simple.

La siguiente es la implementación específica.

//初始化棋盘
void init_board(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}

5. Imprime y embellece el tablero de ajedrez

Cuando imprimimos, debido a que los datos en la matriz son todos espacios, no podemos verlos.

Así que agregue algunas líneas para formar un tablero de ajedrez y embellecerlo.

Algunos bucles y juicios están anidados aquí.

void print_board(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)//这个就是打印数据行,
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)//最后一个|不要
			{
				printf("|");
			}
		}
		printf("\n");//注意换行
		if (i < row - 1)//最后一个分割行不要
		{
			for (int z = 0; z < col; z++)//这个循环分割行
			{
				printf("---");
				if (z < col - 1)//同样最后一个|也不要
				{
					printf("|");
				}
			}
		}
		printf("\n");
	}

}

6. Los jugadores juegan al ajedrez

Los jugadores juegan al ajedrez ingresando las coordenadas correspondientes.Aquí, es necesario juzgar primero la legalidad de las coordenadas y también juzgar si hay piezas de ajedrez en este punto.

Si ya hay piezas de ajedrez, imprima las piezas de ajedrez existentes y déjelo volver a entrar.

Si las coordenadas no son válidas, imprima las coordenadas y pídale que las vuelva a imprimir.

La siguiente es la implementación específica de la función.

Presta atención a la estructura del bucle.

//玩家下棋
void play_board(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int 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");
		}
	}
}

7. Ajedrez informático

El código que escribimos es simplemente código

El ajedrez informático es jugar al ajedrez al azar, lo que requiere que se generen dos números aleatorios, y aquí se usan rand, srand y time.

Haga referencia a las funciones srand y time en la función principal (porque aquí solo es necesario hacer referencia a srand una vez)

int  main()
{
	srand((unsigned int)time(NULL));
	test();
}

Aquí, agregue 1 al número aleatorio %3 para generar coordenadas legales, y simplemente juzgue si hay una pieza de ajedrez debajo de las coordenadas.


//电脑下棋
void computer_board(char board[ROW][COL], int row, int col)
{
	while (1)
	{

		int x = rand() % 3 + 1;
		int y = rand() % 3 + 1;
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '#';
				break;
			}
		}
	}
}

Tenga en cuenta que está escrito como una estructura de bucle.

8. Juez gane o pierda

Ganar o perder debe ser juzgado después de cada juego de ajedrez. Solo hay cuatro situaciones cuando se juzga aquí,

la ganancia del jugador regresa *

ganancias de la computadora #

sorteo devuelve p

seguir regresando j

La siguiente es la implementación de la función.

char win(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)//判断三行是否相等
	{
	if (board[i][1] == board[i][0] && board[i][0] == board[i][2] && board[i][1] != ' ')
		{
			return board[i][1];
		}
	}
	for (int 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[2][2] && board[2][2] == board[1][1] && board[0][0] != ' ')
	{
		return board[0][0];
	}
	if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}

	int count = 0;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				count++;
			}
		}
	}
	if (count = 0)
	{
		return 'p';
	}
	else
		return 'j';

}

En cuarto lugar, el cuerpo de la función del juego.

void game()
{
	//创建一个棋盘数组
	char board[ROW][COL] = { ' ' };
	//初始化棋盘
	init_board(board, ROW, COL);
	//打印棋盘并美化棋盘
	print_board(board, ROW, COL);
	while (1)
	{

		//玩家下棋
		play_board(board, ROW, COL);
		//电脑下棋
		computer_board(board, ROW, COL);
		//print_board(board, ROW, COL);
		//判断输赢
		//玩家赢返回*
		//电脑赢返回#
		//平局返回p
		//继续返回j
		print_board(board, ROW, COL);
		if (win(board, ROW, COL) == '*')
		{
			printf("玩家赢!!!!\n");
			break;
		}
		else if (win(board, ROW, COL) == '#')
		{
			printf("电脑赢!!!!!\n");
			break;
		}
		else if (win(board, ROW, COL) == 'p')
		{
			printf("你真的菜,平局!!!!\n");
			break;
		}
		else
			printf("请再次下棋!!!\n");

	}
	

}

Cinco, el código específico de los tres archivos.

1, fuente.c

#include"game.h"


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


void game()
{
	//创建一个棋盘数组
	char board[ROW][COL] = { ' ' };
	//初始化棋盘
	init_board(board, ROW, COL);
	//打印棋盘并美化棋盘
	print_board(board, ROW, COL);
	while (1)
	{

		//玩家下棋
		play_board(board, ROW, COL);
		//电脑下棋
		computer_board(board, ROW, COL);
		//print_board(board, ROW, COL);
		//判断输赢
		//玩家赢返回*
		//电脑赢返回#
		//平局返回p
		//继续返回j
		print_board(board, ROW, COL);
		if (win(board, ROW, COL) == '*')
		{
			printf("玩家赢!!!!\n");
			break;
		}
		else if (win(board, ROW, COL) == '#')
		{
			printf("电脑赢!!!!!\n");
			break;
		}
		else if (win(board, ROW, COL) == 'p')
		{
			printf("你真的菜,平局!!!!\n");
			break;
		}
		else
			printf("请再次下棋!!!\n");

	}
	

}




void test()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default :
			printf("输入错误,请重新选择!!!\n");
		}
	}while (input);
}






int  main()
{
	srand((unsigned int)time(NULL));
	test();
}

2, juego.c

#include"game.h"

//初始化棋盘
void init_board(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}
//打印棋盘并美化棋盘
void print_board(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)//这个就是打印数据行,
		{
			printf(" %c ", board[i][j]);
			if (j < col - 1)//最后一个|不要
			{
				printf("|");
			}
		}
		printf("\n");//注意换行
		if (i < row - 1)//最后一个分割行不要
		{
			for (int z = 0; z < col; z++)//这个循环分割行
			{
				printf("---");
				if (z < col - 1)//同样最后一个|也不要
				{
					printf("|");
				}
			}
		}
		printf("\n");
	}

}

//玩家下棋
void play_board(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int 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 computer_board(char board[ROW][COL], int row, int col)
{
	while (1)
	{

		int x = rand() % 3 + 1;
		int y = rand() % 3 + 1;
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '#';
				break;
			}
		}
	}
}




//判断输赢
//玩家赢返回*
//电脑赢返回#
//平局返回p
//继续返回j


char win(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)//判断三行是否相等
	{
	if (board[i][1] == board[i][0] && board[i][0] == board[i][2] && board[i][1] != ' ')
		{
			return board[i][1];
		}
	}
	for (int 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[2][2] && board[2][2] == board[1][1] && board[0][0] != ' ')
	{
		return board[0][0];
	}
	if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
	{
		return board[1][1];
	}

	int count = 0;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			if (board[i][j] == ' ')
			{
				count++;
			}
		}
	}
	if (count = 0)
	{
		return 'p';
	}
	else
		return 'j';

}

3, juego.h

#pragma once


#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 3
#define COL 3

//舒适化棋盘
void init_board(char bpard[ROW][COL], int row, int col);
//打印棋盘并美化棋盘
void print_board(char board[ROW][COL], int row, int col);
//玩家下棋
void play_board(char board[ROW][COL], int row, int col);
//电脑下棋
void computer_board(char board[ROW][COL], int row, int col);
//判断输赢
char win(char board[ROW][COL], int row, int col);

¡gracias por ver! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

Supongo que te gusta

Origin blog.csdn.net/zxf123567/article/details/123488060
Recomendado
Clasificación