Lenguaje C elemental - tres ajedrez

Hablemos de un juego pequeño hoy. Todos deberían haber jugado al backgammon, es decir, cuando hay caracteres del mismo tamaño en la fila y la columna, o en la diagonal, es una victoria. Hoy escribiremos un código de este tipo para lograr esto Función

Primero creamos dos archivos fuente y un archivo de encabezado

El archivo de encabezado game.h se usa para contener nuestros archivos de encabezado y declaraciones de funciones y algunas definiciones
game.c para implementar el juego
test.c para probar la lógica de nuestro juego

prueba.c

#include<stdio.h>
void menu()
{
    
    
	printf("***************\n");
	printf("****0.exit*****\n");
	printf("****1.play*****\n");
	printf("***************\n");
}
void test()
{
    
    
	int input = 0;
	do
	{
    
    
		menu();//打印菜单
		printf("请选择>");
		scanf("%d", &input);
		switch(input)
		{
    
    
			case 0:
				printf("退出游戏\n");
				break;
			case 1:
				printf("进入游戏\n");
				break;
			default:
				printf("请重新选择\n");
				break;
		}
	} while (input);
}
int main()
{
    
    
	test();
	return 0;
}

Primero implementemos la lógica de un menú de impresión.
inserte la descripción de la imagen aquí
Seleccione 1 para ingresar al juego, seleccione 0 para salir del juego y seleccione otro para volver a seleccionar.
Si usa la función do while, el menú se imprimirá tan pronto como llegue. hasta satisfacer nuestras necesidades
Ahora queremos implementar el juego y seleccionar 1 para completar.

El siguiente paso es crear la función game() para implementar la lógica del juego de tres movimientos.Primero
, necesitamos inicializar el tablero de ajedrez.

prueba.c

void game()
{
    
    
	//存放下棋的数据
	char board[Row][Col ] = {
    
     0 };
	//初始化棋盘为空格
	Initboard(board, Row, Col);
}

juego.h

//初始化棋盘
void Initboard(char board[Row][Col], int row, int col);

juego.c

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

		 
}

Después de inicializar el tablero de ajedrez, queremos imprimir el tablero de ajedrez, e imprimir el tablero de ajedrez es un tres en raya

juego.h

//打印棋盘
void Displayboard(char board[Row][Col], int row, int col);

juego.c

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");
		}
	}
}

prueba.c

//打印棋盘
	Displayboard(board, Row, Col);

Lo siguiente que hacemos es jugar al ajedrez.

juego.h

//玩家下棋
void play_move(char board[Row][Col], int row, int col);

juego.c

void play_move(char board[Row][Col], int row, int col)
{
    
    
	int x = 0;
	int y = 0;
	printf("玩家下棋\n");
	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");
		}
	}

}

prueba.c

play_move(board, Row, Col);
	//打印棋盘
	Displayboard(board, Row, Col);

Una vez que el jugador ha terminado de jugar al ajedrez, iniciamos la computadora para jugar al ajedrez, pero lo que hemos hecho aquí es solo ajedrez aleatorio.

juego.h

void computer_move(char board[Row][Col], int row, int  col);

juego.c

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;
		}
	}
	
}

La computadora que juega al ajedrez y el jugador que juega al ajedrez son un ciclo, y son aleatorios. En este momento, necesitamos usar nuestra función rand, y al mismo tiempo, necesitamos usar srand, y el concepto de sello de tiempo. Estos se mencionan en Adivinar números. Tomemos
Lo siguiente que debemos hacer es pensar en cómo generar x = rand() % row; y = rand() % col;tales coordenadas. Pensando en esto, debemos pensar en cómo juzgar si ganar o perder. Para juzgar si ganar o perder en ajedrez de tres juegos es que la diagonal o la fila y la columna deben ser satisfechas, entonces haremos tal función para lograr

prueba.c

while (1)
	{
    
    
		
		//玩家下棋
		play_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");
	}
	Displayboard(board, Row, Col);//再次打印棋盘
}
*玩家赢
#电脑赢
C平局


Juego de código completo.h

#pragma once


#include<stdio.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 play_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);

juego.c

#define _CRT_SECURE_NO_WARNINGS 1
#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)
		{
    
    
			for (j = 0; j < col; j++)
			{
    
    
				printf("---");
				if (j < col - 1)
				{
    
    
					printf("|");
				}
			}
			printf("\n");
		}
	}
}


void play_move(char board[Row][Col], int row, int col)
{
    
    
	int x = 0;
	int y = 0;
	printf("玩家下棋\n");
	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_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;
		}
	}
	
}

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][0] != ' ')
		{
    
    
			return board[i][0];
		}
	}


}

prueba.c

#define _CRT_SECURE_NO_WARNINGS 1
//测试三子棋逻辑

#include"game.h"
void game()
{
    
    
	char ret = 0;
	//存放下棋的数据
	char board[Row][Col] = {
    
     0 };
	//初始化棋盘为空格
	Initboard(board, Row, Col);
	//打印棋盘
	Displayboard(board, Row, Col);
	while (1)
	{
    
    
		
		//玩家下棋
		play_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");
	}
	Displayboard(board, Row, Col);
}
void menu()
{
    
    
	printf("**************\n");
	printf("****1.play****\n");
	printf("****0.exit****\n");
	printf("**************\n");

}
void test()
{
    
    
	int input = 0;
	do
	{
    
    
		menu();
		printf("请选择>");
		scanf("%d", &input);
		switch (input)
		{
    
    
		case 0:
			printf("退出游戏\n");
			break;
		case 1:
			game();
			break;
		default :
			printf("请重新输入\n");
			break;
		}
	} while (input);
}
int main()
{
    
    
	srand((unsigned int)time(NULL));//时间戳
	test();
	
	return 0;
}

Eso es todo por el mini juego de hoy, hasta la próxima

Supongo que te gusta

Origin blog.csdn.net/2301_76895050/article/details/131548066
Recomendado
Clasificación