当前位置:网站首页>Conception et mise en œuvre du Code de jeu de Sanqi

Conception et mise en œuvre du Code de jeu de Sanqi

2021-10-14 05:31:02 【Aaronskr】

Introduction au jeu de Trigo

C'est une sorte d'échecs noir et blanc.
Trigo est un jeu folklorique traditionnel,Aussi connu sous le nom de Nine Palace Chess、Fourche circulaire、Un dragon、Kiki, etc.
Connectez les diagonales carrées,Placez trois pièces de chaque côté à tour de rôle,Il suffit de mettre ses trois pièces en ligne,Si l'autre partie perd.Mais,Il y a beaucoup de situations où il y a des échecs.

Les règles

Si les deux avaient maîtrisé la technique, En général, c'est plat. (Et)Les échecs.En général, La deuxième étape est la plus avantageuse au milieu ( Parce que la première étape ne peut pas être au milieu ), En bas dans le coin. , En bas, sur le bord. .Le plus grand avantage est de trouver un endroit où jouer à ce jeu simple et amusant.

Trigo

Idées de conception de jeux

  1. Il faut d'abord une barre de menu , Laissez le joueur choisir d'entrer ou de sortir du jeu .
  2. Options disponibles ici :
    • Entrez dans le jeu
    1. Quitter le jeu

Autres apports - Re - Select(Réalisation du cycle)

Après être entré dans le jeu :

Encapsule les fonctions utilisées par l'implémentation du jeu dans game.cDans le document.

Fonctions de mise en œuvre:

  1. Créer un échiquier .

Comme suit:
 Style Checkerboard
Peut être réalisé par le contrôle cyclique en fonction .

Faire un échiquier divisé en :

  • Initialiser le échiquier .
  • Imprimer le échiquier sur la console .
  1. Simuler le jeu d'échecs :
  • Par le joueur .

Imprimer l'échiquier après la chute pour afficher .

  • Chute aléatoire automatique de l'ordinateur .

Jusqu'à ce que quelqu'un gagne ou joue aux échecs .

  1. Juger de la victoire ou de la perte du jeu .

Par ligne 、Colonnes、 La même forme de chute diagonale distingue la victoire .


Parce qu'un programme doit encapsuler la partie qui implémente la fonctionnalité, C'est pourquoi nous divisons tout le programme en 3Fichiers:

  1. test.cDocumentation - La fonction est d'accéder à la page principale et d'appeler diverses fonctions.
  2. game.cDocumentation - La fonction est la logique de mise en œuvre de chaque fonction , C'est le but de l'encapsulation. : Conserver la logique de mise en œuvre , Afficher uniquement les implémentations fonctionnelles .
  3. game.hDocumentation - La fonction est de stocker les instructions précompilées 、 Instruction de déclaration 、 Variables globales, etc. .


Analyse des codes

1. test.cAnalyse des codes de fichiers.

Commencez le jeu.

Au début du jeu,Pour s'assurer4Point:

  1. Entrée du joueur1 - Entrez dans le jeu.
  2. Entrée du joueur0 - Quitter le jeu.
  3. Le joueur entre autre - Re - Input.
  4. .Une fois le jeu terminé, vous pouvez choisir à nouveau de continuer le jeu.
int main()
{
    
	int input = 0;
	do
	{
    
		menu();
		printf("Veuillez sélectionner:>");
		scanf("%d", &input);
		switch (input)
		{
    
		case 1:
			game();
			break;
		case 0:
			printf(" Vous avez quitté le jeu .\n");
			break;
		default:
			printf("Erreur de sélection,Veuillez saisir à nouveau.\n");
			break;
		}
	} while (input);
	
	return 0;
}

Affichage du menu.

Il suffit d'imprimer un menu simple ici , Si vous avez des connaissances de première ligne, vous pouvez concevoir de meilleures Interfaces .

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

Réalisation des effets du Code :

  1. Entrée du joueur1:

Entrée1L'effet du temps

  1. Entrée du joueur0:

Entrée0L'effet du temps
3. Le joueur entre autre :

 Les joueurs saisissent des effets supplémentaires

Les entrées du joueur sont affichées ci - dessus 0,1, Effets différents à d'autres moments .

Si vous saisissez autre chose , Est entré en boucle ,Jusqu'à l'entrée(0/1)Heure, Entrer ou sortir du jeu .

Entrez dans le jeu.

Après être entré dans le jeu , Doit être réalisé en Encapsulant différentes fonctions , Faire ce que nous voulons :

  1. Initialisation du échiquier.
  2. Réalisation de la fonction d'impression du échiquier .
  3. Jeu de boucle homme - machine jusqu'à ce que les résultats soient séparés .

Le troisième point mérite une attention particulière. :

Parce que je ne sais pas quand les résultats seront partagés ,Donc, après chaque jeu d'échecs, il faut décider si les résultats sont séparés.

Les résultats peuvent être 4Espèce:

  1. Le joueur gagne. – Supposons que les pièces du joueur soient ‘ * ’;
  2. L'ordinateur gagne.. – Supposons que les pièces d'ordinateur soient ‘ # ’;
  3. Tirage au sort. – Retour de la fonction qui détermine la victoire ou la défaite en supposant un tirage au sort ‘ C ’;
    ( Plus de détails sur la mise en œuvre du Code .)
  4. Le jeu continue.. – Supposons que la fonction retourne ‘ Q ’.
    ( C'est - à - dire que l'échiquier n'est pas rempli et qu'il n'y a pas de victoire ou de défaite )
void game()
{
    
	//Le processus de Trigo
	char board[ROW][COL]; //Un tableau d'échiquiers
	//Initialisation du échiquier - board Tous les éléments de 
	InitBoard(board, ROW, COL);

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

	//Jouer aux échecs
	char ret = 0;
	while (1)
	{
    
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
		{
    
			break;
		}
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
		{
    
			break;
		}
	}
	if (ret == '*')
	{
    
		printf("Le joueur gagne\n");
	}
	else if (ret == '#')
	{
    
		printf("L'ordinateur gagne.\n");
	}
	else
	{
    
		printf("Tirage au sort\n");
	}
}

Les fonctions mises en œuvre par différentes fonctions sont décrites ici. :

  • Un échiquier primitif .
InitBoard(board, ROW, COL);

L'ensemble de l'échiquier est réalisé par un tableau bidimensionnel ,L'initialisation d'un échiquier consiste à placer tous les éléments d'un tableau bidimensionnel dans des espaces, Parce que les espaces ne sont pas visibles sur la console .

  • Imprimer un échiquier.
DisplayBoard(board, ROW, COL);

Parce que l'échiquier est initialisé avec tous les espaces ,Est invisible,Donc nous avons besoin de la fonction d'impression de l'échiquier pour faire un peu de contrôle sur l'échiquier, Qu'il soit ce qu'on veut. .

Modèle de mise en œuvre :

 Modèle de Damier

  • Commence à jouer aux échecs. .

La partie d'échecs est divisée en joueurs jouant aux échecs et ordinateurs jouant aux échecs .

  1. Les joueurs jouent aux échecs.
  2. L'ordinateur joue aux échecs.
PlayerMove(board, ROW, COL);  //Les joueurs jouent aux échecs

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

La mise en œuvre logique des deux est différente , Donc encapsulé dans différentes implémentations de fonctions .

Bien sûr.,La fonction d'impression de l'échiquier doit être appelée à nouveau après la mise en œuvre du jeu d'échecs, Apparaît sur l'interface un par un , Ajouter de l'intérêt au Code .

  • Juger la fonction gagnant - perdant.
ret = IsWin(board, ROW, COL);

Cette fonction a besoin d'une valeur de retour pour nous dire le résultat du jeu, Les quatre résultats mentionnés ci - dessus .

1. Le joueur gagne. – Supposons que les pièces du joueur soient ‘ * ’;
2. L'ordinateur gagne.. – Supposons que les pièces d'ordinateur soient ‘ # ’;
3. Tirage au sort. – Retour de la fonction qui détermine la victoire ou la défaite en supposant un tirage au sort ‘ C ’;
4. Le jeu continue.. – Supposons que la fonction retourne ‘ Q ’.
( C'est - à - dire que l'échiquier n'est pas rempli et qu'il n'y a pas de victoire ou de défaite )


2. game.cAnalyse des codes de fichiers.

- Initialisation d'un tableau bidimensionnel,C'est - à - dire initialiser le échiquier.

Il suffit de contrôler la boucle pour traverser tous les éléments d'un tableau 2D entier, Assignez - les comme espaces .

void InitBoard(char board[ROW][COL], int row, int col)
{
    
	int i = 0;
	for (i = 0; i < row; i++)
	{
    
		int j = 0;
		for (int j = 0; j < col; j++)
		{
    
			board[i][j] = ' ';
		}
	}
}

Je vais te le dire.ROWEtCOL Représente la longueur et la largeur de l'échiquier ,Ingame.h C'est déclaré dans le dossier. ,À l'arrière, C'est tout ce qu'il faut ici jusqu'à ce qu'ils soient tous dignes. 3C'est tout., Parce que le jeu d'échecs est 33De.

- Imprimer la fonction Checker.

Réalisation de la fonction d'impression :

  1. Pour imprimer un échiquier, nous devons d'abord imprimer les éléments de chaque tableau, Pour rendre l'affichage attrayant , Peut être contrôlé comme suit: “ %c ”,%c Ajouter un espace à gauche et à droite .
  2. Lorsque le nombre de colonnes est inférieur à 2 Imprimer à l'heure ‘ | ’, Cela crée deux lignes de séparation verticales pour chaque colonne tracée .
  3. Le nombre de lignes actuelles est inférieur à 2 Imprimer à l'heure ‘ — ’,.Ceci imprime une ligne de séparation horizontale entre la deuxième ligne de la première ligne et la troisième ligne de la deuxième ligne,Impression par le deuxième point tout en réalisant la ligne de division transversale
    ‘ - - - | - - - | - - - ’.
  4. Notez qu'une fois chaque ligne imprimée, faites un saut de ligne. .
void DisplayBoard(char board[ROW][COL], int row, int col)
{
    
	int i = 0;
	for (i = 0; i < row; i++)
	{
    
		//Imprimer les données
		int j = 0;
		for (j = 0; j < col; j++)
		{
    
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
    
				printf("|");
			}
		}
		printf("\n");
		//Imprimer les lignes fractionnées
		if (i < row - 1)
		{
    
			for (j = 0; j < col; j++)
			{
    
				printf("---");
				if (j < col - 1)
				{
    
					printf("|");
				}
			}
		}
		printf("\n");
	}
}

Imprimer les effets:

Imprimer les effets
Regardez attentivement ce que vous pouvez voir. : Trois espaces + Un ‘ | ’ ,
Entre la première et la deuxième ligne : Trois fils courts - - - + Un ‘ | ’

- Les joueurs jouent aux échecs.

Attention aux joueurs qui jouent aux échecs :

  1. Du point de vue du joueur 9 Gong est de (1,1) - > (3,3)De, Mais l'indice du tableau 2D du point de vue de notre programmeur est (0,0) -> (2,2)De,Donc la définitionxEty Après les coordonnées , Soustraire un comme indice de tableau .C'est - à - dire:
board[x - 1][y - 1];
  1. La chute du joueur est entrée manuellement dans les coordonnées , Considérez donc la robustesse du Code , C'est - à - dire que les coordonnées saisies par le joueur ne sont pas (1,1)->(3,3) Entre , Les avertissements doivent être émis , Et réinitialiser par cycle .
  2. Il faut faire attention, Jouer aux échecs est un processus itératif bidirectionnel , Si les coordonnées de la chute sont légales , Mais les coordonnées ont été dépassées. , Un avertissement doit également être donné. , Et réinitialiser avec le cycle .
void PlayerMove(char board[ROW][COL], int row, int col)
{
    
	int x = 0;
	int y = 0;
	while (1)
	{
    
		printf("Allez, les joueurs.:\n");
		printf("Veuillez saisir les coordonnées:>");
		scanf("%d %d", &x, &y); // 2 1 --> 1 0
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
    
			if (board[x - 1][y - 1] == ' ')
			{
    
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
    
				printf(" Occupation des coordonnées ,Hors de portée\n");
			}
		}
		else
		{
    
			printf("Coordonnées illégales,Hors de portée\n");
		}
	}
}

.Parce qu'il y a une raison pour laquelle les coordonnées d'entrée tombent trop bas ou qu'il est illégal de les ré - entrer, Donc la condition de décision circulaire ici est 1, Jusqu'à ce qu'il tombe. breakSortir de la boucle.

- Réalisation de la fonction de chute de l'ordinateur.

Une explication est nécessaire ici , Le Code est basé sur CMise en œuvre linguistique, La chute de l'ordinateur appartient à la catégorie de l'intelligence artificielle et de l'algorithme ,Pas de discussion.
Ici, la chute d'ordinateur génère un nombre pseudo - aléatoire à travers l'axe temporel pour la chute de coordonnées.

Il n'y a pas de coordonnées illégales dans la chute de l'ordinateur. , Parce que nous pouvons le contrôler en le moulant .

Mais il y a des endroits où les chutes sont occupées. , Donc vous avez aussi besoin d'utiliser la boucle pour ré - randomiser un nombre , Donc le Code de nombres aléatoires devrait être dans le corps de la boucle ,C'est un petit détail.,Attention requise.

void ComputerMove(char board[ROW][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;
		}
	}
}

Si l'emplacement est trouvé avec succès ,Juste... ’ # ' Assigner à cette position de coordonnées ,Et puisbreakFin.

- Juger la fonction gagnant - perdant.

Il y a trois façons de juger une victoire ou une défaite. :

  1. Lignes égales. - Réalisation par boucle .
  2. Colonnes égales . - Réalisation par boucle .
  3. Diagonale égale - Les deux diagonales doivent être considérées .
  4. Une fonction supplémentaire est nécessaire pour déterminer si l'échiquier est plein.
    • Si elle est pleine , Et il n'y a pas de gagnants. ,Renvoie’ Q ’ - Un tirage au sort. .
    • Si elle n'est pas pleine , Et il n'y a pas de gagnants. ,Renvoie’ C ’ - Signifie continuer le jeu .
char IsWin(char board[ROW][COL], int row, int col)
{
    
	//1.Décider de gagner ou de perdre
	//2.Juge l'égalité.
	//3.Le jeu continue.

	//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][2] != ' ')
		{
    
			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[2][i] != ' ')
		{
    
			return board[0][i];
		}
	}
	//Diagonale
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ' ')
	{
    
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')
	{
    
		return board[0][2];
	}
	//Juge l'égalité.
	if (IsFull(board, row, col))
	{
    
		return 'Q';
	}
	//Le jeu continue.
	return 'C';
}

Attention à un petit détail ,Juge, ok、Colonnes、 Quand les diagonales sont égales, jugez qu'elles ne sont pas égales. ’ ', N'est pas un espace ,Parce que nous avons initialisé tous les éléments en espaces quand nous avons initialisé, Sinon, c'est fini. ,DebugCode.

- La fonction appelée pour déterminer si un échiquier est plein dans une fonction de gain ou de perte.

Attention aux questions:
Il suffit de traverser chaque élément d'un tableau 2D , Si vous rencontrez un espace ,Renvoie0, L'échiquier du représentant n'est pas complet , Si aucun espace n'est trouvé après avoir traversé tous les éléments , L'échiquier est plein. ,Retour1.

int IsFull(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; //Insatisfaction
			}
		}
	}
	return 1; //C'est plein.
}

Le problème à noter est que la valeur de retour est 0Ou1, Donc le type de fonction que vous définissez est intType.


3. game.hAnalyse des codes

Ce fichier contient des commandes précompilées, des fonctions de déclaration, etc.

Les commandes de prétraitement comprennent: :

  1. Le fichier contient.
  2. #defineRéférences.
  3. Compilation conditionnelle.
#pragma once

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

#define ROW 3
#define COL 3

//Initialisation du échiquier
void InitBoard(char board[ROW][COL], int row, int col);

//Imprimer un échiquier
void DisplayBoard(char board[ROW][COL], int row, int col);

//Les joueurs jouent aux échecs
void PlayerMove(char board[ROW][COL], int row, int col);

//L'ordinateur joue aux échecs
void ComputerMove(char board[ROW][COL], int row, int col);

//Jugez si le jeu gagne ou perd
//Pour revenir4Un état différent
//Le joueur gagne - '*'
//L'ordinateur gagne. - '#'
//Tirage au sort - 'Q'
//Continue. - 'C'
char IsWin(char board[ROW][COL], int row, int col);

Parce queis_fullLa fonction estgame.c Appelé dans le fichier et est game.c Qui peut être défini dans un fichier , Il n'est donc pas nécessaire game.hDéclaration dans le document.

Résumé

C'est tout ce qu'il y a dans cet article. , Tout le code source du jeu sera à la fin du texte complet psSection,S'il y a quelque chose de mal ou d'insuffisant à dire, j'espère que tout le monde pourraZone de commentairesLaissez un message, Si vous pensez que le blogueur a bien écrit, vous pouvez rester. - Oui.+Attention+CollectionOh!~

‍*️PS(Code source)

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

void game()
{
    
	//Le processus de Trigo
	char board[ROW][COL]; //Un tableau d'échiquiers
	//Initialisation du échiquier - board Tous les éléments de 
	InitBoard(board, ROW, COL);

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

	//Jouer aux échecs
	char ret = 0;
	while (1)
	{
    
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
		{
    
			break;
		}
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = IsWin(board, ROW, COL);
		if (ret != 'C')
		{
    
			break;
		}
	}
	if (ret == '*')
	{
    
		printf("Le joueur gagne\n");
	}
	else if (ret == '#')
	{
    
		printf("L'ordinateur gagne.\n");
	}
	else
	{
    
		printf("Tirage au sort\n");
	}
}

int main()
{
    
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
    
		menu();
		printf("Veuillez sélectionner:>");
		scanf("%d", &input);
		switch (input)
		{
    
		case 1:
			game();
			break;
		case 0:
			printf("Quitter le jeu\n");
			break;
		default:
			printf("Erreur de sélection\n");
			break;
		}
	} while (input);
	
	return 0;
}
game.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 (int 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]); } printf("\n"); }*/

	//int i = 0;
	//for (i = 0; i < row; i++)
	//{
    
	// //Imprimer les données
	// printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
	// //Imprimer les lignes fractionnées
	// if (i < row - 1)
	// {
    
	// printf("---|---|---\n");
	// }
	//}

	int i = 0;
	for (i = 0; i < row; i++)
	{
    
		//Imprimer les données
		int j = 0;
		for (j = 0; j < col; j++)
		{
    
			printf(" %c ", board[i][j]);
			if (j < col - 1)
			{
    
				printf("|");
			}
		}
		printf("\n");
		//Imprimer les lignes fractionnées
		if (i < row - 1)
		{
    
			for (j = 0; j < col; j++)
			{
    
				printf("---");
				if (j < col - 1)
				{
    
					printf("|");
				}
			}
		}
		printf("\n");
	}
}

void PlayerMove(char board[ROW][COL], int row, int col)
{
    
	int x = 0;
	int y = 0;
	while (1)
	{
    
		printf("Allez, les joueurs.:\n");
		printf("Veuillez saisir les coordonnées:>");
		scanf("%d %d", &x, &y); // 2 1 --> 1 0
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
    
			if (board[x - 1][y - 1] == ' ')
			{
    
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
    
				printf(" Occupation des coordonnées ,Hors de portée\n");
			}
		}
		else
		{
    
			printf("Coordonnées illégales,Hors de portée\n");
		}
	}
}

void ComputerMove(char board[ROW][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[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; //Insatisfaction
			}
		}
	}
	return 1; //C'est plein.
}

char IsWin(char board[ROW][COL], int row, int col)
{
    
	//1.Décider de gagner ou de perdre
	//2.Juge l'égalité.
	//3.Le jeu continue.

	//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][2] != ' ')
		{
    
			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[2][i] != ' ')
		{
    
			return board[0][i];
		}
	}
	//Diagonale
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ' ')
	{
    
		return board[0][0];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[2][0] != ' ')
	{
    
		return board[0][2];
	}
	//Juge l'égalité.
	if (IsFull(board, row, col))
	{
    
		return 'Q';
	}
	//Le jeu continue.
	return 'C';
}
game.h
#pragma once

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

#define ROW 3
#define COL 3

//Initialisation du échiquier
void InitBoard(char board[ROW][COL], int row, int col);

//Imprimer un échiquier
void DisplayBoard(char board[ROW][COL], int row, int col);

//Les joueurs jouent aux échecs
void PlayerMove(char board[ROW][COL], int row, int col);

//L'ordinateur joue aux échecs
void ComputerMove(char board[ROW][COL], int row, int col);

//Jugez si le jeu gagne ou perd
//Pour revenir4Un état différent
//Le joueur gagne - '*'
//L'ordinateur gagne. - '#'
//Tirage au sort - 'Q'
//Continue. - 'C'
char IsWin(char board[ROW][COL], int row, int col);

Réalisation:

Résultats obtenus

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

随机推荐