#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TOTAL_NUMBERS 20
#define MINES_COUNT 5
int main() {
int mines[TOTAL_NUMBERS + 1] = {0};
int revealed[TOTAL_NUMBERS + 1] = {0};
int score = 0;
int remaining = TOTAL_NUMBERS - MINES_COUNT;
srand(time(0));
printf("正在生成地雷位置...\n");
int mines_placed = 0;
while (mines_placed < MINES_COUNT) {
int pos = rand() % TOTAL_NUMBERS + 1;
if (!mines[pos]) {
mines[pos] = 1;
mines_placed++;
}
}
printf("欢迎来到数字地雷游戏!\n");
printf("规则:\n");
printf("1. 1-%d中有%d个地雷\n", TOTAL_NUMBERS, MINES_COUNT);
printf("2. 选择数字,如果安全则得分\n");
printf("3. 安全数字会显示周围4个数字中的地雷数量\n");
printf("4. 找出所有%d个安全数字获胜!\n\n", remaining);
while (remaining > 0) {
int guess;
printf("\n当前得分:%d | 剩余安全数字:%d\n", score, remaining);
printf("请输入要选择的数字(1-%d): ", TOTAL_NUMBERS);
scanf("%d", &guess);
if (guess < 1 || guess > TOTAL_NUMBERS) {
printf("无效输入!请输入1-%d之间的数字。\n", TOTAL_NUMBERS);
continue;
}
if (revealed[guess]) {
printf("此数字已被选择过,请选其他数字。\n");
continue;
}
revealed[guess] = 1;
if (mines[guess]) {
printf("\n*** 轰!你踩中了地雷! ***\n");
printf("游戏结束!最终得分:%d\n", score);
return 0;
}
score++;
remaining--;
int near_mines = 0;
int start = (guess - 2 < 1) ? 1 : guess - 2;
int end = (guess + 2 > TOTAL_NUMBERS) ? TOTAL_NUMBERS : guess + 2;
for (int i = start; i <= end; i++) {
if (i != guess && mines[i]) {
near_mines++;
}
}
printf("安全!数字 %d 附近的地雷数: %d\n", guess, near_mines);
}
printf("\n************************************\n");
printf("* 恭喜!你找到了所有安全数字! *\n");
printf("* 最终得分:%d/%d *\n", score, TOTAL_NUMBERS - MINES_COUNT);
printf("************************************\n");
return 0;
}