当前位置:网站首页>C language games - minesweeping
C language games - minesweeping
2022-07-06 20:32:00 【farewell12345】
The game passes 3 Source file implementation
1. The header file game.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS ROW + 2
#define COLS COL + 2
// The number of rows on the chessboard
#define ROW 9
// The number of rows on the chessboard
#define COL 9
// Number of Mines arranged
#define EASY_COUNT 10
// Initialize array
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
// Print array
void DisplayBoard(char board[ROWS][COLS], int row, int col);
// Arrange thunder
void SetMine(char board[ROWS][COLS], int row, int col);
// Check the thunder
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
2. The game logic test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void game()
{
// Create two two-dimensional arrays , A record of the location of the mine , A message used to display thunder
// Record the location of the mine
char mine[ROWS][COLS] = { 0 };
// Show Ray's information
char show[ROWS][COLS] = { 0 };
// Initialize array
InitBoard(mine, ROWS, COLS, '0');
InitBoard(show, ROWS, COLS, '*');
// Print array
//DisplayBoard(mine, ROW, COL);
DisplayBoard(show, ROW, COL);
// Arrange thunder
SetMine(mine, ROW, COL);
//DisplayBoard(mine, ROW, COL);
// Check the thunder
FindMine(mine, show, ROW, COL);
}
void menu()
{
printf("*************************\n");
printf("******** 1. Mine clearance *******\n");
printf("******** 0. sign out *******\n");
printf("*************************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf(" Please enter :");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf(" sign out \n");
break;
default:
printf(" Input error , Please re-enter \n");
break;
}
} while (input);
return 0;
}3. The subject of the game game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
// Initialize array
void InitBoard(char board[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++)
{
board[i][j] = set;
}
}
}
// Print array
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
int i = 0;
int j = 0;
// Print the number of checkerboard columns
for (i = 0; i <= row; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
// Print checkerboard lines
printf("%d ", i);
for (j = 1; j <= col; j++)
{
// Print chessboard information
printf("%c ", board[i][j]);
}
printf("\n");
}
}
// Arrange thunder
void SetMine(char board[ROWS][COLS], int row, int col)
{
int count = EASY_COUNT;
while(count > 0)
{
int i = rand() % row + 1;
int j = rand() % col + 1;
if (board[i][j] == '0')
{
board[i][j] = '1';
count--;
}
}
}
// Calculate the information of surrounding mines
int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
//1+'0'='1' 2+'0'='2' …………
return mine[x - 1][y - 1] +
mine[x - 1][y] +
mine[x - 1][y + 1] +
mine[x][y - 1] +
mine[x][y + 1] +
mine[x + 1][y - 1] +
mine[x + 1][y] +
mine[x + 1][y + 1] - 8 * '0';
}
// Expand ray
void ExpandMine(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)
{
// Recursive constraints
if (x == 0 || y == 0 || x == ROWS - 1 || y == COLS - 1)
{
return;
}
// Judge whether the coordinates have been calculated
if (show[x][y] != '*')
{
return;
}
int count = get_mine_count(mine, x, y);
if (count != 0)
{
show[x][y] = count + '0';
}
else
{
show[x][y] = ' ';
ExpandMine(mine, show, x - 1, y - 1);
ExpandMine(mine, show, x - 1, y);
ExpandMine(mine, show, x - 1, y + 1);
ExpandMine(mine, show, x, y - 1);
ExpandMine(mine, show, x, y + 1);
ExpandMine(mine, show, x + 1, y - 1);
ExpandMine(mine, show, x + 1, y);
ExpandMine(mine, show, x + 1, y + 1);
}
}
// Check the thunder
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
//win Used to judge whether all mines have been discharged
int win = row * col - EASY_COUNT;
do
{
printf(" Please enter the coordinates :");
scanf("%d %d", &x, &y);
// Judge the legitimacy of the input coordinates
if (x > 0 && x <= row && y > 0 && y <= col)
{
if (mine[x][y] == '1')
{
printf(" The game failed \n");
DisplayBoard(mine, ROW, COL);
break;
}
else
{
// Calculate the information of surrounding mines
ExpandMine(mine, show, x, y);
DisplayBoard(show, ROW, COL);
//win--;
}
}
else
{
printf(" Illegal input coordinates , Please re-enter \n");
}
} while (win);
if (win == 0)
{
printf(" congratulations , Mine clearance is successful \n");
}
}边栏推荐
- 5. 无线体内纳米网:十大“可行吗?”问题
- 8086指令码汇总表(表格)
- 【每周一坑】信息加密 +【解答】正整数分解质因数
- BeagleBoneBlack 上手记
- [diy] how to make a personalized radio
- 棋盘左上角到右下角方案数(2)
- Implementation of packaging video into MP4 format and storing it in TF Card
- Enumeration gets values based on parameters
- Maximum likelihood estimation and cross entropy loss
- Gui Gui programming (XIII) - event handling
猜你喜欢

B-杰哥的树(状压树形dp)
![[DIY]如何制作一款個性的收音機](/img/fc/a371322258131d1dc617ce18490baf.jpg)
[DIY]如何制作一款個性的收音機

Force deduction brush question - 98 Validate binary search tree

Anaconda安装后Jupyter launch 没反应&网页打开运行没执行

枚举根据参数获取值
Tencent byte and other big companies interview real questions summary, Netease architects in-depth explanation of Android Development

01 basic introduction - concept nouns

OLED屏幕的使用

Cesium Click to draw a circle (dynamically draw a circle)

5. 無線體內納米網:十大“可行嗎?”問題
随机推荐
Gui Gui programming (XIII) - event handling
Learn to punch in Web
How does kubernetes support stateful applications through statefulset? (07)
5. Wireless in vivo nano network: top ten "feasible?" problem
(work record) March 11, 2020 to March 15, 2021
Rhcsa Road
[DIY]如何制作一款個性的收音機
Introduction of Xia Zhigang
Rhcsa Road
Appx code signing Guide
Recyclerview GridLayout bisects the middle blank area
Application layer of tcp/ip protocol cluster
[DSP] [Part 2] understand c6678 and create project
Catch ball game 1
02 basic introduction - data package expansion
知识图谱之实体对齐二
String length limit?
[cloud lesson] EI lesson 47 Mrs offline data analysis - processing OBS data through Flink
Unity makes AB package
JMeter server resource indicator monitoring (CPU, memory, etc.)