Langage C pour implémenter le déminage (avec code source)

avant-propos

Le démineur est le même que le backgammon, qui peut bien exercer notre capacité d'analyse logique, et mieux comprendre et appliquer les connaissances que nous avons apprises ( tableaux, boucles et branches, etc. )

Regles du jeu

Je crois que beaucoup de gens ont été exposés à ce jeu à l'école primaire, mais le sujet sait aussi y jouer récemment, regardons les règles du jeu

Cliquez sur le carré avec la souris, si c'est une mine, le jeu échouera ;
si ce n'est pas une mine, le nombre de mines dans les 8 grilles adjacentes sera compté

Réalisation du jeu

Besoin d'utiliser, deux fichiers .c et un fichier .h
insérez la description de l'image ici

Le fichier démineur contient notre fonction d'appel principale, la fonction de jeu contient la partie principale de l'implémentation du jeu, le fichier d'en-tête est utilisé pour stocker les déclarations de fonction, l'inclusion du fichier d'en-tête et les définitions de macro

C'est clair et net, jetant une certaine base pour la future coopération multi-personnes

fonction d'appel

Après de nombreuses utilisations, je pense que vous connaissez déjà bien cette partie

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"//使用时记得包含头文件,用“”’。
menu()
{
    
    
	printf("******************************\n");
	printf("***********1.play ************\n");
	printf("******************************\n");
	printf("***********0.exit ************\n");
	printf("******************************\n");

}
game()
{
    
    
   
}
int main()
{
    
    
	srand((unsigned int)time(NULL));
	int n;
	do
	{
    
    
		menu();
		printf("请输入你的选择\n");
		scanf("%d", &n);
		switch(n)
		{
    
    
		case 1:
			game();
			break;
		case 0:
			printf("你已退出游戏\n");
			break;
		default :
			printf("输入错误\n");
			break;
		}
	} while (n);
	return 0;
}

conception du jeu()

Cette partie est également le cœur du jeu
et est principalement divisée en trois parties

1. Création, initialisation et affichage de l'échiquier
2. Disposition des mines
3. Mines saisies par les joueurs

1. Échiquier

(1) Création de l'échiquier

L'échiquier a besoin d'un tableau à deux dimensions, un tableau est utilisé pour stocker des données et l'autre pour l'affichage.
Par conséquent, pour le créer dans game()
, définissez d'abord une macro (dans le fichier d'en-tête du jeu)
afin que notre échiquier peut être personnalisé en taille, sans faire glisser déplacer tout le corps

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2

Nous prévoyons de créer un échiquier 9*9
, alors créez-le dans game()

    char board_mine[ROWS][COLS] = {
    
     0 };
	char board_show[ROWS][COLS] = {
    
     0 };

Il y aura certainement des amis qui se demanderont
pourquoi ROWS COLS est utilisé ?

insérez la description de l'image ici

(2) L'initialisation de l'échiquier
est créée dans game()

init_board(board_mine, board_show, ROWS, COLS)

Définir la fonction dans le fichier game.c

void init_board(char board_mine[ROWS][COLS], char board_show[ROWS][COLS], int rows, int cols)
{
    
    
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
    
    
		for (j = 0; j < cols; j++)
		{
    
    
			board_mine[i][j] = '0';
			board_show[i][j] = '*';

		}
	}
}

(3) Imprimer l'échiquier
créé dans game()

display_board(board_show, ROW, COL);

Définir la fonction dans le fichier game.c

void display_board(char board[ROWS][COLS], int row, int col)
{
    
    
	int i = 0;
	int j = 0;
	printf("--------扫雷--------\n");
	for (i = 0; i <= row; i++)
	{
    
    
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
    
    
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
    
    

			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("--------扫雷--------\n");

}

2. Disposition des rayons

Créé dans le jeu()

set_board(board_mine, ROW, COL);

Situé dans le fichier game.c

EASY est défini par #define, le nombre de mines utilisées pour organiser est effectué dans le fichier d'en-tête du jeu et
la graine du nombre aléatoire se trouve dans la fonction d'appel principale

	srand((unsigned int)time(NULL));//随机数种子
void set_board(char board_mine[ROWS][COLS], int row, int col)
{
    
    
	int x = 0;
	int y = 0;
	
	int count = EASY;
	while (count)
	{
    
    
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (board_mine[x][y] == '0')
		{
    
    
			board_mine[x][y] = '1';
			count--;
		}
	}
}

3. Vérifiez le mien

Créé dans le jeu()

find_mine(board_mine, board_show, ROW, COL);

implémenté dans game.c

int cal(char board_mine[ROWS][COLS], int x, int y)
{
    
    
	return board_mine[x + 1][y - 1] +
		board_mine[x - 1][y - 1] + 
		board_mine[x][y - 1] + 
		board_mine[x + 1][y] + 
		board_mine[x - 1][y]
		+board_mine[x + 1][y + 1] + 
		board_mine[x][y + 1] + 
		board_mine[x - 1][y + 1] - 8 * '0';
}
void find_mine(char board_mine[ROWS][COLS], char board_show[ROWS][COLS], int row, int col)
{
    
    
	int x = 0;
	int y = 0;
	int win = 0;
	while (win<row*col-EASY)
	{
    
    
		printf("输入要排查的坐标\n");
		scanf("%d %d", &x, &y);
		if (x <= row && x >= 1 && y <= col && y >= 1)
		{
    
    
			if (board_mine[x][y] == '1')
			{
    
    
				printf("你被炸死了\n");
				display_board(board_mine, ROW, COL);
				break;
			}
			else 
			{
    
    
				int ret = cal(board_mine, x, y);
				board_show[x][y] = ret+'0';
				display_board(board_show, ROW, COL);
				win++;
			}
		}
		else
		{
    
    
			printf("坐标非法,重新输入\n");
		}
		
	}
	if (win == row * col - EASY)
	{
    
    
		printf("恭喜你,排雷成功\n");
		display_board(board_mine, ROW, COL);
	}
}

code source

fonction d'appel

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
menu()
{
    
    
	printf("******************************\n");
	printf("***********1.play ************\n");
	printf("******************************\n");
	printf("***********0.exit ************\n");
	printf("******************************\n");

}
game()
{
    
    
    //棋盘的创建
	char board_mine[ROWS][COLS] = {
    
     0 };
	char board_show[ROWS][COLS] = {
    
     0 };
	//棋盘初始化
	init_board(board_mine, board_show, ROWS, COLS);
	//展示棋盘
	/*display_board(board_mine, ROW, COL);*/
	display_board(board_show, ROW, COL);
	//布置雷
	set_board(board_mine, ROW, COL);
	/*display_board(board_mine, ROW, COL);*/
	//排查雷
	find_mine(board_mine, board_show, ROW, COL);

}
int main()
{
    
    
	srand((unsigned int)time(NULL));
	int n;
	do
	{
    
    
		menu();
		printf("请输入你的选择\n");
		scanf("%d", &n);
		switch(n)
		{
    
    
		case 1:
			game();
			break;
		case 0:
			printf("你已退出游戏\n");
			break;
		default :
			printf("输入错误\n");
			break;
		}
	} while (n);
	return 0;
}

jeu.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"
void init_board(char board_mine[ROWS][COLS], char board_show[ROWS][COLS], int rows, int cols)
{
    
    
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
    
    
		for (j = 0; j < cols; j++)
		{
    
    
			board_mine[i][j] = '0';
			board_show[i][j] = '*';

		}
	}
}

void display_board(char board[ROWS][COLS], int row, int col)
{
    
    
	int i = 0;
	int j = 0;
	printf("--------扫雷--------\n");
	for (i = 0; i <= row; i++)
	{
    
    
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
    
    
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
    
    

			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("--------扫雷--------\n");

}

void set_board(char board_mine[ROWS][COLS], int row, int col)
{
    
    
	int x = 0;
	int y = 0;
	
	int count = EASY;
	while (count)
	{
    
    
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (board_mine[x][y] == '0')
		{
    
    
			board_mine[x][y] = '1';
			count--;
		}
	}
}
int cal(char board_mine[ROWS][COLS], int x, int y)
{
    
    
	return board_mine[x + 1][y - 1] +
		board_mine[x - 1][y - 1] + 
		board_mine[x][y - 1] + 
		board_mine[x + 1][y] + 
		board_mine[x - 1][y]
		+board_mine[x + 1][y + 1] + 
		board_mine[x][y + 1] + 
		board_mine[x - 1][y + 1] - 8 * '0';
}
void find_mine(char board_mine[ROWS][COLS], char board_show[ROWS][COLS], int row, int col)
{
    
    
	int x = 0;
	int y = 0;
	int win = 0;
	while (win<row*col-EASY)
	{
    
    
		printf("输入要排查的坐标\n");
		scanf("%d %d", &x, &y);
		if (x <= row && x >= 1 && y <= col && y >= 1)
		{
    
    
			if (board_mine[x][y] == '1')
			{
    
    
				printf("你被炸死了\n");
				display_board(board_mine, ROW, COL);
				break;
			}
			else 
			{
    
    
				int ret = cal(board_mine, x, y);
				board_show[x][y] = ret+'0';
				display_board(board_show, ROW, COL);
				win++;
			}
		}
		else
		{
    
    
			printf("坐标非法,重新输入\n");
		}
		
	}
	if (win == row * col - EASY)
	{
    
    
		printf("恭喜你,排雷成功\n");
		display_board(board_mine, ROW, COL);
	}
}

jeu.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define EASY 10

#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11
void init_board(char board_mine[ROWS][COLS], char board_show[ROWS][COLS], int rows, int cols);
void display_board(char board[ROWS][COLS], int row, int col);
void set_board(char board_mine[ROWS][COLS], int row, int col);
void find_mine(char board_mine[ROWS][COLS], char board_show[ROWS][COLS], int row, int col);

Je crois qu'après avoir lu l'article, vous y gagnerez quelque chose, progressons ensemble

Je suppose que tu aimes

Origine blog.csdn.net/2301_78636079/article/details/132003263
conseillé
Classement