Implementação simples de três xadrez em linguagem C

contente

1. Ideia básica

2. Texto

2.1 Gerar diretório

               2.1.1 teste.c

2.2 Inicialize a placa

               2.2.1 teste.c

               2.2.2 jogo.c

               2.2.3 jogo.h

2.3 Imprimindo o tabuleiro de xadrez

               2.3.1 teste.c

               2.3.2 jogo.c

               2.3.3 jogo.h

2.4 Jogadores jogam xadrez

               2.4.1 teste.c

               2.4.2 jogo.c

               2.4.3 jogo.h

2.5 Xadrez de Computador

               2.5.1 teste.c

               2.5.2 jogo.c

               2.5.3 jogo.h

2.6 Julgando a situação

               2.6.1 teste.c

               2.6.2 jogo.c

               2.6.3 jogo.h

3. Todo o código do jogo

3.1 arquivo test.c

3.2 arquivo game.c

3.3 arquivo game.h


1. Ideia básica

Vamos ter uma visão geral de todo o modelo para a implementação do Sanbang.

 Antes de começar a escrever o código, devemos primeiro resumir todo o código, podemos dividir o código inteiro em três partes: Primeiro: use o arquivo test.c para testar a lógica do jogo. Segundo: use o arquivo game.c para implementar a lógica do jogo. Terceiro: use o arquivo game.h para declarar a função de implementação do jogo. No texto a seguir, continuaremos a usar esses três documentos

2. Texto

2.1 Gerar diretório

Como pode ser visto no modelo de três partidas, as primeiras quatro linhas são os itens de menu de todo o jogo, e o jogador solicita as opções 1.play ou 2.exit.

Como mostrado na figura:

               2.1.1 teste.c

No arquivo test.c, precisamos completar esse código para imprimir o diretório

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

 Algumas pessoas podem notar que a primeira linha não tem o familiar arquivo de cabeçalho #include<stdio.h>, mas #include "game.h", que precisa ser enfatizado aqui, para deixar nosso bloco de código mais claro, você pode colocar todas as funções do arquivo de cabeçalho que precisam ser definidas no arquivo game.h. Quando você precisar usá-lo mais tarde, você só precisa consultar o arquivo de cabeçalho geral.

como mostra a imagem:

2.2 Inicialize a placa

A partir deste modelo simples de três banger, podemos ver que há um total de 3 * 3 grades. Para conseguir isso, podemos fazer isso criando um array bidimensional, ou seja, char board[ROW][COL] = { 0 }; aqui ROW representa o número de linhas e COL representa o número de colunas. Existem espaços em cada grade, e o objetivo central desta etapa é realizar os espaços em branco, ou seja, cada grade do tabuleiro inicializado está vazia, de modo a facilitar o jogo de xadrez.

               2.2.1 teste.c

No arquivo test.c, precisamos implementar um código como este

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

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

               2.2.2 jogo.c

No arquivo game.c, precisamos escrever o processo específico de inicializar o tabuleiro de xadrez como um espaço

Como mostrado na 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 jogo.h

Antes de inicializar o array, a função InitBoard precisa ser declarada, que precisa ser completada no arquivo game.h, e para poder implementar livremente o jogo de várias peças, não apenas três peças, você precisa definir um linha no arquivo game.h. Conte o tamanho do número de linhas e colunas de COL. Após salvar, você precisa modificar manualmente o número de linhas e colunas várias vezes.

Como mostrado na figura:

2.3 Imprimindo o tabuleiro de xadrez

Uma exibição normal do tabuleiro de xadrez é mostrada abaixo:

               2.3.1 teste.c

Depois de inicializar a placa, precisamos imprimir a placa para ver como ela fica após a inicialização. No arquivo test.c, você precisa completar o seguinte 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 jogo.c

Como realizar a impressão do tabuleiro de xadrez? Precisamos pensar em tal problema. No exemplo do tabuleiro de xadrez acima, não é difícil descobrir que o tabuleiro de xadrez é dividido em 9 grades, e a divisão de cada grade tem uma regra, que pode ser dividido em duas categorias. 1: Linha de dados, implementada por |, você pode usar uma instrução de loop para imprimir o conteúdo da classe de dados. 2: Divida a linha, que é realizada por ---| Você também pode usar a instrução loop para imprimir o conteúdo da linha dividida.

O código que precisa ser feito neste arquivo:

#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 jogo.h

Se você deseja imprimir o formato do tabuleiro de xadrez de game.c, agora você precisa declarar esta função em game.h

Como mostrado na figura:

2.4 Jogadores jogam xadrez

Os jogadores jogam xadrez com '*'

Como mostrado na figura:

               2.4.1 teste.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 jogo.c

Para implementar todo o processo da função do jogador de xadrez, você precisa completar o seguinte 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 jogo.h

Antes de definir a função player_move, esta função precisa ser declarada em game.h.

Como mostrado na figura:

2.5 Xadrez de Computador

Quando o jogador termina de jogar xadrez, o computador joga, o princípio é semelhante ao do jogador.

Após a implementação, conforme mostrado na figura:

               2.5.1 teste.c

Para obter o conteúdo mostrado na figura acima, você precisa escrever o seguinte código em 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 jogo.c

Diferente da maneira como os jogadores jogam xadrez, porque os jogadores jogam xadrez com base em suposições subjetivas, e o computador precisa de uma próxima posição aleatória, precisamos usar srand((unsigned int)time NULL); para garantir que o computador jogue um valor aleatório

Então no game.c você precisa 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 precisa ser feito em test.c

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

               2.5.3 jogo.h

O arquivo de cabeçalho de definição correspondente também é indispensável:

2.6 Julgando a situação

Quando o jogador e o computador estão abaixo de um certo nível, é necessário julgar o resultado ou empate

Como mostrado na figura:

Personagens para ganhar ou perder:
// Jogador ganha - '*'
// Computador ganha - '#'
// Média--- 'Q'
// Continua--- 'C'

               2.6.1 teste.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 jogo.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 jogo.h

3. Todo o código do jogo

3.1 arquivo test.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 arquivo game.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 arquivo game.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);

Acho que você gosta

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