首页 > 编程语言 >用c/c++做一个扫雷游戏

用c/c++做一个扫雷游戏

时间:2024-08-29 10:51:30浏览次数:14  
标签:ROWS 游戏 int COLS c++ field 扫雷 col row

“扫雷”想必80  90 年代的都不陌生吧,是当代青年人机必备的益智游戏,今天,我们就用c/c++还原它,记得点赞支持一下,老乔谢谢你们~

使用演示设备:

1.开发环境 visual studio 2022  或  dev c++

2.演示系统 Windows 10

3.演示课目 扫雷游戏

效果展示(演示图):

上代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define ROWS 3
#define COLS 3
#define MINES 1
 
char minefield[ROWS][COLS];
char displayed_field[ROWS][COLS];
 
void initialize_game() {
    int i, j;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            minefield[i][j] = '0';
            displayed_field[i][j] = '*';
        }
    }
 
    srand(time(0));
    int mines_placed = 0;
    while (mines_placed < MINES) {
        int row = rand() % ROWS;
        int col = rand() % COLS;
        if (minefield[row][col] == '1') continue;
        minefield[row][col] = '1';
        mines_placed++;
    }
}
 
void print_field(char field[ROWS][COLS]) {
    int i, j;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            printf("%c ", field[i][j]);
        }
        printf("\n");
    }
}
 
void update_displayed_field(int row, int col) {
    if (minefield[row][col] == '1') {
        printf("你死了,这是一个雷!\n");
        print_field(minefield);
        exit(1);
    }
 
    int neighbors = 0;
    for (int i = row - 1; i <= row + 1; i++) {
        for (int j = col - 1; j <= col + 1; j++) {
            if (i >= 0 && i < ROWS && j >= 0 && j < COLS && minefield[i][j] == '1') {
                neighbors++;
            }
        }
    }
    displayed_field[row][col] = '0' + neighbors;
}
 
void play_game() {
    initialize_game();
    print_field(displayed_field);
 
    while (1) {
        printf("请输入你的位置 (row col): ");
        int row, col;
        scanf("%d %d", &row, &col);
        if (row < 0 || col < 0 || row >= ROWS || col >= COLS) {
            printf("非法位置,请输入有效坐标!\n");
            continue;
        }
        if (displayed_field[row][col] == '*') {
            update_displayed_field(row, col);
            print_field(displayed_field);
        } else {
            printf("你已经访问过这里了!\n");
        }
 
        int won = 1;
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                if (displayed_field[i][j] == '*') {
                    won = 0;
                    break;
                }
            }
            if (!won) break;
        }
        if (won) {
            printf("恭喜你,你赢了!\n");
            print_field(minefield);
            break;
        }
    }
}
 
int main() {
    play_game();
    return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define ROWS 3
#define COLS 3
#define MINES 1
 
char minefield[ROWS][COLS];
char displayed_field[ROWS][COLS];
 
void initialize_game() {
    int i, j;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            minefield[i][j] = '0';
            displayed_field[i][j] = '*';
        }
    }
 
    srand(time(0));
    int mines_placed = 0;
    while (mines_placed < MINES) {
        int row = rand() % ROWS;
        int col = rand() % COLS;
        if (minefield[row][col] == '1') continue;
        minefield[row][col] = '1';
        mines_placed++;
    }
}
 
void print_field(char field[ROWS][COLS]) {
    int i, j;
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            printf("%c ", field[i][j]);
        }
        printf("\n");
    }
}
 
void update_displayed_field(int row, int col) {
    if (minefield[row][col] == '1') {
        printf("你死了,这是一个雷!\n");
        print_field(minefield);
        exit(1);
    }
 
    int neighbors = 0;
    for (int i = row - 1; i <= row + 1; i++) {
        for (int j = col - 1; j <= col + 1; j++) {
            if (i >= 0 && i < ROWS && j >= 0 && j < COLS && minefield[i][j] == '1') {
                neighbors++;
            }
        }
    }
    displayed_field[row][col] = '0' + neighbors;
}
 
void play_game() {
    initialize_game();
    print_field(displayed_field);
 
    while (1) {
        printf("请输入你的位置 (row col): ");
        int row, col;
        scanf("%d %d", &row, &col);
        if (row < 0 || col < 0 || row >= ROWS || col >= COLS) {
            printf("非法位置,请输入有效坐标!\n");
            continue;
        }
        if (displayed_field[row][col] == '*') {
            update_displayed_field(row, col);
            print_field(displayed_field);
        } else {
            printf("你已经访问过这里了!\n");
        }
 
        int won = 1;
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                if (displayed_field[i][j] == '*') {
                    won = 0;
                    break;
                }
            }
            if (!won) break;
        }
        if (won) {
            printf("恭喜你,你赢了!\n");
            print_field(minefield);
            break;
        }
    }
}
 
int main() {
    play_game();
    return 0;
}

感谢大家的鼓励,我会致力发更多免费,可复制的程序代码记得关注支持喔~

标签:ROWS,游戏,int,COLS,c++,field,扫雷,col,row
From: https://blog.csdn.net/qiaoqiaohonghu/article/details/141637440

相关文章

  • AirSlam C++ 代码学习
    问题1:reserve函数是什么?reserve是C++标准库中std::vector类的一个成员函数,用于预留一定数量的内存空间,以避免在向量增长时频繁进行内存分配和复制操作,从而提高性能。具体来说,reserve(n)会为向量预留至少n个元素的内存空间,但不会改变向量的大小(即不会添加任何元素)。这......
  • 国产游戏行业的挑战与机遇:技术创新引领未来
    引言随着数字经济的蓬勃发展,国产游戏行业已成为中国文化输出的重要窗口之一。在技术创新的驱动下,国产游戏不仅在画面表现、游戏体验上达到了国际先进水平,更在全球化战略中迈出了坚实步伐。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍面临诸多挑战,同时也孕育着无限机遇。......
  • 《C++中的友元:打破封装的神秘力量》
    在C++的编程世界里,友元函数和友元类就像是一把特殊的钥匙,可以打开封装的大门,让特定的函数或类能够访问其他类的私有成员。这一特性在某些情况下具有重要的作用,让我们一起来深入探讨C++中的友元函数和友元类有什么作用。一、热点关注:友元为何引发热议?在面向对象编程中,封......
  • 最简最速!C++版OpenCV安装配置教程Win/Mac!!!
    Clion+OpenCV(C++版)开发环境配置教程Win/Mac        平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上位机性能有限于是决定视觉方面使用C++的OpenCV来节约上位机资源提高运行的速度,在查阅了网上的各种资料后发现这些资料参差不齐......
  • Clion+OpenCV(C++版)开发环境配置教程WinMac
    Clion+OpenCV(C++版)开发环境配置教程Win/Mac        平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上位机性能有限于是决定视觉方面使用C++的OpenCV来节约上位机资源提高运行的速度,在查阅了网上的各种资料后发现这些资料参差不齐有些博......
  • C++入门基础(内容太干,噎住了)
    文章目录1.缺省参数2.函数重载2.1重载条件:1.参数类型不同2.参数个数不同3.参数类型顺序不同 2.2不做重载条件情况:1.返回值相同时2.当全缺省遇见无参数3.引用3.1引用特性:3.2引用的使用1.缺省参数1.缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。......
  • 力扣热题100_贪心算法_45_跳跃游戏
    文章目录题目链接解题思路解题代码题目链接45.跳跃游戏II给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0<=j<=nums[i]......
  • 5步搭建Python Django+Vue剧本杀服务平台,实现线上逻辑推理游戏!
    ......
  • 【C++基础】多种函数重载和运算符重载
    目录一、函数重载1.参数类型不同的重载讲解2.参数个数不同的重载讲解3.参数顺序不同的重载讲解4.默认参数与函数重载讲解二、运算符重载1.运算符重载的基本语法示例讲解函数内部的操作:运算符的使用:2.运算符重载的常见用法2.1重载<<和>>运算符(用于输......
  • 突破编程 C++ 设计模式(组合模式)详尽攻略
    在软件开发中,设计模式为程序员提供了解决特定问题的最佳实践。设计模式不仅提高了代码的可复用性和可维护性,还能帮助团队更好地进行协作。在这篇文章中,我们将深入探讨组合模式——一种结构型设计模式。组合模式允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合......