当前位置:网站首页>C | Mise en œuvre d'un jeu d'échecs simple

C | Mise en œuvre d'un jeu d'échecs simple

2021-10-14 06:31:09 Ersansui

Je crois que tout le monde a joué aux échecs. , Dans une grille de neuf Palais , Qui a d'abord mis en place une connexion à trois pièces , Celui qui gagne. !
Insérer la description de l'image ici

Aujourd'hui, On va l'utiliser ensemble. C La langue pour réaliser une version simple de Trigo .

Tout d'abord,, Nos idées sont les suivantes: :

1. Imprimer le menu au début du programme , Laissez le joueur choisir de commencer ou de quitter le jeu

2. Le joueur entre dans le jeu après avoir sélectionné le jeu

3. Après avoir décidé de gagner ou de perdre , Retour au menu

Pour une meilleure gestion du Code, Nous avons créé trois fichiers ,Respectivement.:
game.c Mise en œuvre des fonctions de jeu
game.h Déclarations pour les fonctions de jeu
test.c Pour tester les fonctions de jeu associées

Le cadre principal du programme est le suivant: :

Le cadre est placé dans test.cDans le document, Utilisé pour invoquer une fonction de jeu

enum Choose
{
    
	EXIT,
	PLAY
};

int main()
{
    
	int input = 0;
	do
	{
    
		menu();
		scanf("%d", &input);

		switch (input)
		{
    
		case PLAY:
			game();// Après avoir choisi de jouer ,Appelezgame Fonction pour jouer 
			break;
		case EXIT:
			printf("Quitter le jeu\n");
			break;
		default:
			printf(" Mauvais choix ,Veuillez sélectionner à nouveau\n");
			break;

		}

	} while (input);//QuandinputPour0Heure, Lancer la mauvaise voie ,Fin du programme


	return 0;
}

Mise en œuvre de la fonction menu :

L'implémentation de la fonction est placée dans game.cDans le document,Appel pratique,Gestion facile

Et la Déclaration de cette fonction ,Nous avons placégame.hJuste au milieu,On a juste besoin detest.cCité dansgame.h Le fichier d'en - tête est prêt à utiliser cette fonction

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

Mise en œuvre des fonctions de jeu:

Pour notre entretien futur , En même temps, afin de pouvoir mettre à niveau les échecs en cinq échecs ou plus,

Quand nous définissons l'échiquier , N'écrivez pas à mort. ,Peut passerdefine Pour définir la taille

define Définir dans game.hMoyenne

#define ROW 3
#define COL 3

C'est la priorité. gameMise en œuvre de la fonction

gameDans la fonction, Y compris le échiquier (Tableau bidimensionnel) Fonctions créées , Fonction d'initialisation du vérificateur ,Imprimer les fonctions du vérificateur,Fonction du joueur jouant aux échecs,Fonction de l'ordinateur jouant aux échecs, Fonction qui détermine si le échiquier est plein et si le joueur ou l'ordinateur gagne

Parce qu'il y a beaucoup de fonctions , On n'est pas tous là. gameDéfinition interne de la fonction, Réunification game Définition hors fonction ,Adoptiongame Appel de fonction pour compléter le processus de jeu

void game()
{
    
	// Cette fonction est utilisée pour implémenter le jeu d'échecs 

	// Créer un tableau de damiers 
	char board[ROW][COL];

	// Initialisation d'un tableau de damiers 
	Initboard(board,ROW,COL);

	//Imprimer un échiquier
	Printboard(board, ROW, COL);



	while (1)
	{
    

		int ret = 0;
		char tmp = 0;
		// Le joueur entre les coordonnées pour jouer aux échecs 
		Playermove(board, ROW, COL);
		Printboard(board, ROW, COL);

		// Juge si tu as gagné. 
		tmp = Iswin(board, ROW, COL);
		if (tmp == '*')
		{
    
			printf("Le joueur gagne\n");
			break;
		}

		else if (tmp == '#')
		{
    
			printf("L'ordinateur a gagné\n");
			break;
		}

		// Déterminer si l'échiquier est plein 
		ret = Isfull(board, ROW, COL);
		if (1 == ret)
			break;

		//L'ordinateur joue aux échecs
		Computermove(board, ROW, COL);
		Printboard(board, ROW, COL);

		// Juge si tu as gagné. 
		tmp = Iswin(board, ROW, COL);
		if (tmp == '*')
		{
    
			printf("Le joueur gagne\n");
			break;
		}

		else if (tmp == '#')
		{
    
			printf("L'ordinateur a gagné\n");
			break;
		}

		// Déterminer si l'échiquier est plein 
		ret = Isfull(board, ROW, COL);
		if (1 == ret)
			break;
	}


}

Fonction d'initialisation du vérificateur :

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

}

Imprimer les fonctions du vérificateur:

Nous pouvons imprimer un échiquier en boucle , Mais soyez conscient des conditions d'impression

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");
		for (j = 0; j < col; j++)
		{
    
			if (i < row - 1)
				printf("--- ");
		}

		printf("\n");
	}
}

Fonction du joueur jouant aux échecs:
Le joueur joue aux échecs en entrant les coordonnées , En même temps, assurez - vous de déterminer si les coordonnées saisies par le joueur se situent dans la plage de taille de l'échiquier. , Vérifiez également si les coordonnées saisies par le joueur correspondent à la position des pièces. .

void Playermove(char board[ROW][COL], int row, int col)
{
    
	int x = 0;
	int y = 0;
	while (1)
	{
    
		printf(" Veuillez entrer :>\n");
		scanf("%d %d", &x, &y);
		//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(" L'emplacement est déjà occupé ,Veuillez saisir à nouveau\n");
		}
		else
		{
    
			printf("Erreur d'entrée,Veuillez saisir à nouveau\n");
		}

	}
}

Fonction de l'ordinateur jouant aux échecs:
L'ordinateur joue aux échecs, Ici, nous utilisons la génération la plus simple de nombres aléatoires , C'est mieux sans design. ( L'ordinateur peut gagner activement , Ou bloquer les joueurs )L'algorithme de( En fait, j'ai des capacités limitées. ,Je ne pensais pasQAQ)

void Computermove(char (*board)[COL], int row, int col)
{
    
	printf("Ordinateur.:>\n");

	while (1)
	{
    
		int x = (rand() % row);
		int y = (rand() % col);
		if (board[x][y] == ' ')
		{
    
			board[x][y] = '#';
			break;
		}
	}
}

Fonction pour déterminer si le échiquier est plein :
Chaque étape du joueur et de l'ordinateur , Cette fonction doit être appelée pour déterminer si le échiquier est plein , Si plein , Renvoie une condition remplie , Faciliter la fin du cycle

int  Isfull(char(*board)[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;
			}
		}
	}
	if (ROW == i)
	{
    
		printf(" Le échiquier est plein. ,Quitter le jeu\n");
		return 1;
	}
}

Fonction pour juger de la victoire ou de la défaite:
Chaque étape du joueur et de l'ordinateur , Cette fonction devrait être appelée , Utilisé pour juger de la victoire ou de la défaite , S'il y a eu une victoire ou une défaite, , Vous devez retourner une condition qui détermine si vous gagnez ou perdez. , Faciliter la fin du cycle

char Iswin(char(*board)[COL], int row, int col)
{
    
	//D'accord
	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];
		}
	}

	//Colonnes
	for (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[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
		return board[1][1];

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

C'est la définition de chaque fonction.

Nous devons juste organiser nos pensées , Mettre la définition de chaque fonction dans gameAvant la fonction, Et mettre toutes les fonctions ci - dessus game.cLes fichiers sont OK., En ce qui concerne la Déclaration de la fonction ci - dessus ,Nous avons placégame.hMoyenne, On a juste besoin de plus. test.cEtgame.c Références respectives game.hC'est bon

Résumé final :

test.c

#include"game.h";
// Test de tricho 

enum Choose
{
    
	EXIT,
	PLAY
};


int main()
{
    
	int input = 0;
	do
	{
    
		menu();
		srand((unsigned int)time(NULL));
		scanf("%d", &input);

		switch (input)
		{
    
		case EXIT:
			printf("Quitter le jeu\n");
			break;
		case PLAY:
			game();
			break;
		default:
			printf("Erreur d'entrée,Veuillez sélectionner à nouveau\n");
			break;
		}

	} while (input);
	return 0;
}

game.c

//Mise en œuvre des fonctions liées au jeu
#include"game.h"


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

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");
		for (j = 0; j < col; j++)
		{
    
			if (i < row - 1)
				printf("--- ");
		}

		printf("\n");
	}
}

void Playermove(char board[ROW][COL], int row, int col)
{
    
	int x = 0;
	int y = 0;
	while (1)
	{
    
		printf(" Veuillez entrer :>\n");
		scanf("%d %d", &x, &y);
		//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(" L'emplacement est déjà occupé ,Veuillez saisir à nouveau\n");
		}
		else
		{
    
			printf("Erreur d'entrée,Veuillez saisir à nouveau\n");
		}

	}
}

//char board[ROW][COL]
void Computermove(char (*board)[COL], int row, int col)
{
    
	printf("Ordinateur.:>\n");

	while (1)
	{
    
		int x = (rand() % row);
		int y = (rand() % col);
		if (board[x][y] == ' ')
		{
    
			board[x][y] = '#';
			break;
		}
	}
}

int  Isfull(char(*board)[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;
			}
		}
	}
	if (ROW == i)
	{
    
		printf(" Le échiquier est plein. ,Quitter le jeu\n");
		return 1;
	}
}


char Iswin(char(*board)[COL], int row, int col)
{
    
	//D'accord
	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];
		}
	}

	//Colonnes
	for (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[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
		return board[1][1];

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

void game()
{
    
	// Cette fonction est utilisée pour implémenter le jeu d'échecs 

	// Créer un tableau de damiers 
	char board[ROW][COL];

	// Initialisation d'un tableau de damiers 
	Initboard(board,ROW,COL);

	//Imprimer un échiquier
	Printboard(board, ROW, COL);



	while (1)
	{
    

		int ret = 0;
		char tmp = 0;
		// Le joueur entre les coordonnées pour jouer aux échecs 
		Playermove(board, ROW, COL);
		Printboard(board, ROW, COL);

		// Juge si tu as gagné. 
		tmp = Iswin(board, ROW, COL);
		if (tmp == '*')
		{
    
			printf("Le joueur gagne\n");
			break;
		}

		else if (tmp == '#')
		{
    
			printf("L'ordinateur a gagné\n");
			break;
		}

		// Déterminer si l'échiquier est plein 
		ret = Isfull(board, ROW, COL);
		if (1 == ret)
			break;

		//L'ordinateur joue aux échecs
		Computermove(board, ROW, COL);
		Printboard(board, ROW, COL);

		// Juge si tu as gagné. 
		tmp = Iswin(board, ROW, COL);
		if (tmp == '*')
		{
    
			printf("Le joueur gagne\n");
			break;
		}

		else if (tmp == '#')
		{
    
			printf("L'ordinateur a gagné\n");
			break;
		}

		// Déterminer si l'échiquier est plein 
		ret = Isfull(board, ROW, COL);
		if (1 == ret)
			break;
	}


}

game.h

//Déclaration de la fonction de jeu
// Définition de la taille de l'échiquier 

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

void menu();
void game();

C'est bon., C'est la fin du jeu de tricherie.


Conclusion:
La création n'est pas facile,J'espère que tout le monde peut faire quelque chose de bien、Commentaires、Avant、Attention à un dragon!

Votre soutien est ma plus grande motivation pour créer!!

En raison de mes capacités limitées,En cas d'erreur,J'espère que la correction!!

S'il y a une meilleure façon ou une meilleure idée,Les commentaires sont les bienvenus~

Insérer la description de l'image ici

版权声明
本文为[Ersansui]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/10/20211013211538525d.html

随机推荐