C-Sprache zum Erreichen von Minensuchen [sehr detaillierte Erklärung]

Inhaltsverzeichnis

1. Die Grundidee des Minensuchens

Zweitens die spezifischen Schritte der Codeimplementierung

3. Vollständiger Code

1, saolei.h Teil

2. saolei.c Teil

3. Teil des Tests.c


Es gibt viele Ähnlichkeiten zwischen Minesweeper und Backgammon . Ich glaube, dass Sie nach sorgfältigem Studium des Backgammon-Spiels und anschließender sorgfältiger Lektüre dieses Blogs über ein gutes Verständnis des relevanten Wissens verfügen und es beherrschen werden.


1. Die Grundidee des Minensuchens

1. Erstellen Sie ein Menü

2. Verwirklichen Sie die Switch-Case -Anweisung und wählen Sie, ob Sie das Spiel spielen oder beenden möchten

3. Entscheiden Sie sich, das Spiel zu spielen und den Code des Spiels zu verstehen

4. Der Spielteil erstellt zwei zweidimensionale Arrays, Mine- und Show-Arrays . Das Minen-Array ist ein Array von Bomben , die Position mit einer Bombe ist 1 und die Position ohne Bombe ist 0; das Show-Array ist ein Array zum Finden von Bomben , die unbekannte Position ist '*' und die Nummer der gefundenen Position ist die Anzahl der Bomben um die Zahl herum

5. Initialisieren Sie die beiden zweidimensionalen Arrays, das Mine-Array wird auf „0“ initialisiert und das Show-Array wird auf „*“ initialisiert.

6. Drucken Sie das Schachbrett aus. Drucken Sie das Schachbrett bei jeder Eingabe der Koordinaten einmal aus, damit Sie es beobachten können

7. Erkennen Sie den Vorgang des Anordnens von Minen: Rand (Header-Datei: stdlib.h) und Zeit (Header-Datei: time.h) sind wie bei Backgammon erforderlich , und die kombinierte Verwendung kann dazu führen, dass der Computer Minen zufällig anordnet

8. Erkennen Sie die Funktionsweise der Minenerkennung: Der Spieler gibt eine Koordinate ein. Wenn auf die Mine getreten wird, wird das Spiel daran erinnert, das Spiel zu beenden. Wenn nicht auf die Mine getreten wird, wird die Anzahl der Minen im umgebenden Kreis angezeigt die entsprechende Position im Show-Array

9. Nachdem das Spiel beendet ist, fahren Sie mit dem Drucken des ausgewählten Menüs fort, und der Spieler entscheidet, ob das Spiel fortgesetzt werden soll


Zweitens die spezifischen Schritte der Codeimplementierung

1. Erstellen Sie drei Abschnitte wie unten gezeigt:

2. Verweisen Sie auch auf die Header-Datei in saolei.h. In saolei.c und test.c muss nur auf saolei.h verwiesen werden



3. Erstellen Sie die Switch-Case-Anweisung der Hauptfunktion und der Testfunktion in test.c

 

4. Erstellen Sie ein einfaches Menü

5. Der Minenräumstandard beträgt 9 Zeilen und 9 Spalten. Bei der Berechnung der Anzahl der Minen um die Seitenkoordinaten müssen jedoch die außerhalb der Grenzen liegenden Bereiche ausgeschlossen werden, sodass die Erweiterung beider Arrays um einen Kreis nicht zu Problemen führt Probleme in dieser Hinsicht. Jetzt wird es zu einem zweidimensionalen Array mit 11 Zeilen und 11 Spalten. Verwenden Sie die Makrodefinition , um ROW9, COL9, ROWS11, COLS11 und die festgelegte Anzahl von Minen MINE_COUNT10 zu definieren

6. Die Implementierung der Spielfunktion in test.c ( vervollständigen Sie immer noch zuerst das Framework und implementieren Sie es dann

7. Implementieren Sie die Anforderungen der Spielfunktion in saolei.c ( deklarieren Sie sie in saolei.h und implementieren Sie sie in saolei.c ). Das erste Bild unten ist die Deklaration und das zweite Bild ist die Realisierung der Funktion 

(1), die Implementierung der Array-Initialisierungsfunktion


(2), Schachbrett drucken

Drucken Sie oben und links auf dem 9 × 9-Schachbrett eine Reihe bzw. eine Spalte mit Zahlen , damit die Spieler die genauen Koordinaten der Reihe und Spalte ablesen können

 (3) Legen Sie Minen aus

Fügen Sie die Testfunktion hinzu:



(4) Auf Minen prüfen


In der Minenerkennungsfunktion müssen Sie die Funktion Find_count verwenden , um die Anzahl der Minen wie folgt zu zählen:


3. Vollständiger Code

1, saolei.h Teil

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

#define ROWS 11
#define COLS 11

#define ROW 9
#define COL 9

#define MINE_COUNT 10


//数组的初始化函数
void Init_board(char arr[ROWS][COLS], int rows, int cols, char set);

//打印棋盘
void Display_board(char arr[ROWS][COLS], int row, int col);

//布置地雷的函数
void Set_mine(char mine[ROWS][COLS], int row, int col);

//排查地雷
void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

2. saolei.c Teil

#include "saolei.h"

//数组初始化函数的实现
void Init_board(char arr[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			arr[i][j] = set;
		}
	}
}

//打印棋盘
void Display_board(char arr[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 ", arr[i][j]);
		}
		printf("\n");
	}
}


//布置地雷函数
void Set_mine(char mine[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int ret = MINE_COUNT;
	while (ret)
	{
		x = rand() % 9 + 1;
		y = rand() % 9 + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			ret--;
		}
	}
}



//统计雷的个数
int Find_count(char mine[ROWS][COLS], int x, int y)
{
	return mine[x + 1][y - 1] +
		mine[x][y - 1] +
		mine[x - 1][y - 1] +
		mine[x + 1][y] +
		mine[x - 1][y] +
		mine[x + 1][y + 1] +
		mine[x][y + 1] +
		mine[x - 1][y + 1] - 8 * '0';
}


//排查地雷
void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = 0;
	while (count < row * col - MINE_COUNT)
	{
		printf("请输入想要排查的坐标:");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
		{
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了!\n");
				break;
			}
			else
			{
				count++;
				//Find_count是统计周围雷的个数的函数
				int ret = Find_count(mine, x, y);
				show[x][y] = ret + '0';
				//输入坐标正确后,再打印一次棋盘,方便玩家观察
				Display_board(show, ROW, COL);
			}
		}
		else
		{
			printf("坐标输入错误,请重新输入!\n");
		}
	}
	if (count == row * col - MINE_COUNT)
	{
		printf("恭喜你,排雷成功!\n");
	}
}

3. Teil des Tests.c

#include "saolei.h"

void game()
{
	char mine[ROWS][COLS] = { 0 };
	char show[ROWS][COLS] = { 0 };

	//两个数组的初始化
	//mine数组元素全部初始化为字符0
	//show数组元素全部初始化为字符*
	Init_board(mine, ROWS, COLS, '0');
	Init_board(show, ROWS, COLS, '*');


	//打印棋盘,以便让玩家可以清楚的选择相应的位置对应的坐标
	Display_board(show, ROW, COL);


	//布置地雷
	Set_mine(mine, ROW, COL	);

	//排查地雷
	Find_mine(mine, show, ROW, COL);
	//两个数组都传入是因为排查时两个数组元素都会有相应的改变
	//排查结束,再打印一次地雷棋盘,向玩家展示地雷的位置
	Display_board(mine, ROW, COL);
}


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


void test()
{
	int input = 0;
	do
	{
		menu();
		srand((unsigned int)time(NULL));
		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;
}

Das Obige ist der gesamte Inhalt von Minesweeping in C-Sprache. Wir sehen uns im nächsten Blog ヾ( ̄▽ ̄)Bye~Bye~

Supongo que te gusta

Origin blog.csdn.net/m0_64411530/article/details/125576699
Recomendado
Clasificación