Lenguaje C: ajedrez de tres piezas.

introducción

El ajedrez de tres piezas, también conocido como tres en raya, es un juego de mesa para dos jugadores. El objetivo del juego es conectar tus piezas en línea recta sobre un tablero de 3x3, que pueden ser líneas horizontales, verticales o diagonales.

Hoy implementaremos un juego de ajedrez simple de tres piezas. El tablero tiene solo tres filas y tres columnas, y no hay un segundo jugador. Solo implementa un escenario de juego entre un jugador y la computadora. El juego está implementado en lenguaje C. Para que el código sea más legible, se divide en tres partes, a saber:

  1. juego.h
  2. juego.c
  3. Tres piezas de ajedrez.c

La relación entre las tres partes es así.

 


1. Ajedrez de tres piezas.c

Sanbangqi.c son algunas funciones externas al juego, que llamarán al contenido del archivo de encabezado game.c y a las funciones de game.c.

 Menú de inicio del juego: ingresa 1 para iniciar el juego, ingresa 2 para salir del juego

 La función principal main() llama a la función test(). En la función test(), la entrada es la opción ingresada por el reproductor en la interfaz del menú. srand es un número aleatorio creado usando la función de biblioteca time.h. A continuación, el La función test() utiliza do... ...la instrucción de bucle while implementa el inicio y el final del juego.

Ingrese 1 para iniciar el juego e ingrese la función game () a través de la declaración case1 de la declaración switch en la declaración do... while.

 

 Después de ingresar al juego (), inicialice el tablero de ajedrez y luego imprima el tablero de ajedrez, lo que, por supuesto, se hace en game.c.

#include "game.h"


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

}

void game()
{
	char ret = 0;
	//存放下棋的数据
	char board[ROW][COL] = { 0 };
	//初始化棋盘为全空格
	Initboard(board, ROW, COL);
	//打印棋牌
	Printboard(board, ROW, COL);

	while (1)
	{
		//玩家下棋
		player_move(board, ROW, COL);
		Printboard(board, ROW, COL);

		//判断输赢
		ret = Is_win(board, ROW, COL);

		if (ret != 'C')
		{
			break;
		}

		//电脑下棋
		Computer_board(board, ROW, COL);
		Printboard(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");
	}
	//Printboard(board, ROW, COL);
}

//玩家赢了,游戏是不是要结束
//玩家赢 游戏结束 - '*'
//电脑赢 游戏结束 - '#'
//平局   游戏结束 - 'Q'
//继续           - 'C' 

void test()
{
	int input = 0;
	srand((unsigned int)time(NULL));

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

}

int main()
{
	test();

	return 0;
}

2. juego.c

#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 Printboard(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");

		//打印数据
		//printf(" %c | %c | %c |", board[i][0], board[i][1], board[i][3]);
        
		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)
{
	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("该坐标被占用,请重新输入");
			}
		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}
}

void Computer_board(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;
		}
	}
} 
static is_full(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 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[1][1] != ' ')
		return board[1][1];
	if(board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1] != ' ')
		return board[1][1];

	//判断平局
	if (is_full(board, row, col) == 1)
		return 'Q';

	//继续
	return 'C';
}

3. juego.h

#define ROW 3
#define COL 3
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

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

//打印棋盘
void Printboard(char board[ROW][COL], int row, int col);

//玩家下棋
void player_move(char board[ROW][COL], int row, int col);

//输入棋盘中的位置
void Computer_board(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/cdtu_mid/article/details/131852597
Recomendado
Clasificación