C language based minesweeper game
- 2020-11-26 18:56:44
- OfStack
This article is an example of C language to share the implementation of minesweeper game specific code for your reference, the specific content is as follows
Minesweeper is similar to the framework of the 3 board games I wrote above, for code that is a little more complicated than this. We should apply the same approach, build a framework, clarify our thinking, and then write code
1. First of all, for minesweeper, we should create two 2-dimensional arrays, one for the player to see, the other should be a 2-dimensional array containing the exact location of the mine, only one is not enough.
2. Print out the table that the player can see
3. Let the player input the coordinates to be entered and verify them
4. Determine if there are any mines. If there are any, the game will end directly
5. If there are no errors, hit the number of grenades on the screen
6. To judge the winning or losing, look at the number of squares opened if 71=9*9-10
7. If the number of squares turned over is 71, the game is over and the player wins
Train of thought 1 kind, basically be according to the train of thought that lists oneself to write code reasonably, good
Take the following example:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_COL 9 // Macro definition
#define MAX_ROW 9
#define DEFAULT_MINE_COUNT 10 // Macro definition 1 a 10 A ray
// minesweeper
//1. Create two 2 Dimension array and initialize
//2. print 1 map
//3. The player enters the coordinates to read , The coordinates entered by the player are verified
//4. Determine if the input coordinates are mined , If there is , Then the game is over
//5. If there is no , Count the number of surrounding mines and display it on the screen
//6. Judge the winning or losing , And check the number of open cells ,9*9-10=71;
//7. If you have 71 Turn over all the squares , The game is over , Players win
int menu(){ // Menu display
printf("\n\n=======================\n");
printf("1. Start the game \n");
printf("2. End of the game \n");
printf("=======================\n");
printf(" Please enter the serial number :");
int choice = 0;
scanf("%d",&choice);
return choice;
}
void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]){ // Of the two 2 An array of dimensions is given an initial value , And change the number of deposits
for (int row = 0; row < MAX_ROW; row++){ //for nested (2 Dimensional array )
for (int col = 0; col < MAX_COL; col++){
showMap[row][col] = '*';
}
}
for (int row = 0; row <MAX_ROW; row++){
for (int col = 0; col <MAX_COL; col++){
mineMap[row][col] = '0';
}
}
int n = DEFAULT_MINE_COUNT; // Assign a value to n
while(n > 0){ // Loop and let the computer pick a random number
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (mineMap[row][col] == '1'){ // Met ray
continue;
}
mineMap[row][col] = '1';
n--; // Successive decline , Ensure that only 10 A ray
}
}
void printMap(char theMap[MAX_ROW][MAX_COL]){ // This is the interface that the player can see
printf("1 2 3 4 5 6 7 8 9\n");
printf("-----------------\n");
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; col < MAX_COL; col++){
printf("%c ",theMap[row][col]);
}
printf("\n");
}
printf("-----------------\n");
}
void updateShowMap(char showMap[MAX_ROW][MAX_COL], // Let show around on the open grid 8 The number of mines in each grid
char mineMap[MAX_ROW][MAX_COL],int row, int col){
int count = 0;
for (int r = row - 1; r<= row + 1; r++){
for (int c = col - 1; c <= col + 1; c++){
if (r < 0 || r >= MAX_ROW || c < 0 || c >= MAX_COL){ // check , Let's make it within a given range
continue;
}
if (mineMap[r][c] == '1'){ // There are around , the ++
count++;
}
}
}
showMap[row][col] = count + '0'; // Convert it to 10 Into the system
}
void game(){
char showMap[MAX_ROW][MAX_COL] = { 0 }; // define 2 Dimensional array
char mineMap[MAX_ROW][MAX_COL] = { 0 };
init(showMap, mineMap); //1. The two 2 An array of dimensions is given an initial value , define
int openedBlockCount = 0;
while (1){
printMap(showMap); //2. Display the diagram
int row = 0;
int col = 0;
printf(" Please enter the coordinates you want to turn over (row,col):");
scanf("%d %d",&row, &col); // Give the address
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL){ // Here's a check on the function
printf(" You entered the wrong coordinates !\n");
continue;
}
if (showMap[row][col] != '*'){ // Error reminder
printf(" The current position has been turned over !\n");
continue;
}
if (mineMap[row][col] == '1'){ // Meet with ray , Game over
printf("Game over!\n");
printMap(mineMap); // And print mineMap()
break;
}
updateShowMap( showMap, mineMap, row, col); // Displays the number of surrounding mines on the screen
openedBlockCount++; // The number of cells that have been opened
if (openedBlockCount == MAX_ROW*MAX_COL - DEFAULT_MINE_COUNT){ // Number of cells turned over 71, The player wins
printf(" The game wins !;");
printMap(mineMap); // Print the thunder figure
break;
}
}
}
int main(){
while (1){
int choice = menu(); // Create a menu
if (choice == 1){
game(); // And in the choice=1 Called when the game() function
}else if (choice == 0){
printf("Goodbye!");
break;
}else{
printf(" Your input is incorrect ");
}
}
system("pause");
return 0;
}
Be careful and careful when writing this code, especially on row < =MAX_ROW this part of time, 1 must be careful, I also debugging for a long time in the morning, is because of added equal sign, tired for most of the day, or to type more code.
More interesting classic games to realize the special topic, to share with you:
C++ classic game summary
python classic game summary
python Tetris game collection
JavaScript classic games don't stop playing
java classic game summary
javascript classic game summary