当前位置:网站首页>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");
}
}
边栏推荐
- recyclerview gridlayout 平分中间空白区域
- 解剖生理学复习题·VIII血液系统
- [DIY]自己设计微软MakeCode街机,官方开源软硬件
- 7、数据权限注解
- (工作记录)2020年3月11日至2021年3月15日
- I've seen many tutorials, but I still can't write a program well. How can I break it?
- Node. Js: express + MySQL realizes registration, login and identity authentication
- Minimum cut edge set of undirected graph
- 【每周一坑】输出三角形
- Gui Gui programming (XIII) - event handling
猜你喜欢
逻辑是个好东西
Force deduction brush question - 98 Validate binary search tree
Comment faire une radio personnalisée
What programming do children learn?
(工作记录)2020年3月11日至2021年3月15日
Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
Why do novices often fail to answer questions in the programming community, and even get ridiculed?
[weekly pit] positive integer factorization prime factor + [solution] calculate the sum of prime numbers within 100
【每周一坑】计算100以内质数之和 +【解答】输出三角形
【计网】第三章 数据链路层(4)局域网、以太网、无线局域网、VLAN
随机推荐
Tencent cloud database public cloud market ranks top 2!
recyclerview gridlayout 平分中间空白区域
JVM_ Common [interview questions]
5. 無線體內納米網:十大“可行嗎?”問題
使用.Net驱动Jetson Nano的OLED显示屏
持续测试(CT)实战经验分享
Continuous test (CT) practical experience sharing
[cloud native and 5g] micro services support 5g core network
Utilisation de l'écran OLED
Basic knowledge of lists
Database - how to get familiar with hundreds of tables of the project -navicat these unique skills, have you got it? (exclusive experience)
[diy] how to make a personalized radio
棋盘左上角到右下角方案数(2)
SSO single sign on
I've seen many tutorials, but I still can't write a program well. How can I break it?
Ideas and methods of system and application monitoring
Node. Js: express + MySQL realizes registration, login and identity authentication
[Yann Lecun likes the red stone neural network made by minecraft]
Cesium Click to draw a circle (dynamically draw a circle)
Deep learning classification network -- zfnet