当前位置:网站首页>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. Nano - Net in wireless body: Top 10 "is it possible?" Questions
- SQL injection 2
- In line elements are transformed into block level elements, and display transformation and implicit transformation
- [weekly pit] positive integer factorization prime factor + [solution] calculate the sum of prime numbers within 100
- 【GET-4】
- OLED屏幕的使用
- 2022 nurse (primary) examination questions and new nurse (primary) examination questions
- Crawler (14) - scrape redis distributed crawler (1) | detailed explanation
- Summary of different configurations of PHP Xdebug 3 and xdebug2
- Guangzhou's first data security summit will open in Baiyun District
猜你喜欢
Rhcsa Road
Jupyter launch didn't respond after Anaconda was installed & the web page was opened and ran without execution
02 basic introduction - data package expansion
Digital triangle model acwing 1018 Minimum toll
[weekly pit] information encryption + [answer] positive integer factorization prime factor
SSO single sign on
Intel 48 core new Xeon run point exposure: unexpected results against AMD zen3 in 3D cache
使用.Net分析.Net达人挑战赛参与情况
5. 无线体内纳米网:十大“可行吗?”问题
Core principles of video games
随机推荐
Qinglong panel white screen one key repair
[diy] how to make a personalized radio
小孩子学什么编程?
Discussion on beegfs high availability mode
【DSP】【第二篇】了解C6678和创建工程
5. Wireless in vivo nano network: top ten "feasible?" problem
Solution to the 38th weekly match of acwing
8086 instruction code summary (table)
I've seen many tutorials, but I still can't write a program well. How can I break it?
BeagleBoneBlack 上手记
New generation garbage collector ZGC
Unity writes a timer tool to start timing from the whole point. The format is: 00:00:00
Why do novices often fail to answer questions in the programming community, and even get ridiculed?
Error analysis ~csdn rebound shell error
知识图谱构建流程步骤详解
2022 nurse (primary) examination questions and new nurse (primary) examination questions
How does kubernetes support stateful applications through statefulset? (07)
“罚点球”小游戏
Linear distance between two points of cesium
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother