C语言实现扫雷小游戏(扩展版)

本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下

实现的拓展功能如下:

1.设置游戏难度等级
2.保证玩家在第一把踩雷后不被炸死
3.若排雷的地方无雷,自动扩展到有雷的周围,并给出雷数
4.标记(相当于扫雷游戏中的插旗子)
5.取消标记

分析:

1.用二维字符数组mine[ROWS][COLS]来存储雷,现在我们用字符1来表示有雷,字符0表示无雷。用二维字符数组show[ROWS][COLS]将所有的元素初始化为*,并打印作为展现给玩家的。同时用show数组来表示对应的mine数组中周围雷即字符0的个数。
对于边缘的格子无法计算雷的个数,因此需再增加2行2列,防止数组越界。
2.游戏难度等级的设置即就是雷的个数和棋盘大小不同,即就是Putmine中传的COUNT(雷数)不同,棋盘大小不同也就是在初始化、埋雷、扫雷、打印棋盘等函数中传的行、列数不同,由于是控制台程序,没有将一般模式和困难模式的棋盘打印的过大(因为会丑,也容易眼花),正常情况下扫雷的中级模式是40个雷,16*16格,高级模式是99个雷,16*30格.
3.为了保证玩家体验,保证玩家在第一把踩雷后不被炸死,此时只需要判断玩家第一次排查的坐标是否等于雷的坐标,如果是,将雷悄悄移走(重新生成随机数)
4.若排雷的地方无雷,自动扩展到有雷的周围,并给出雷数,此时需要用到递归,直至递归到周围有雷停止,并计算雷数,显示在棋盘上。
5.标记与取消标记这个是很容易实现的,将标记位置改为P(也可以为其他),取消标记改回*即可。

实现效果:

详细代码如下:

test.c

/*
date:2018/12/27
author:Better Me1
program:Mine Clearance
compiler:Visual Studio 2013
拓展功能:
1.设置游戏难度等级
2.保证玩家在第一把踩雷后不被炸死
3.若排雷的地方无雷,自动扩展到有雷的周围,并给出雷数
4.标记(相当于扫雷游戏中的插旗子)
5.取消标记
*/
 
/*测试部分*/
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
#include <stdio.h>
#include <stdlib.h>
 
void menu(){
    printf("************  扫雷小游戏  ************\n");
    printf("******  1.进入游戏  2.退出游戏  ******\n");
    printf("**************************************\n");
}
void menu2(){
    printf("********  请选择要挑战的模式  ********\n");
    printf("********  1.简单模式(10个雷)********\n");
    printf("********  2.一般模式(15个雷)********\n");
    printf("********  3.困难模式(20个雷)********\n");
}
void game(int COUNT ){
    if (COUNT == 10){
        char mine[ROWS][COLS] = { 0 };
        char show[ROWS][COLS] = { 0 };//显示雷,给玩家看
        InitBoard(mine, ROWS, COLS, '0');
        InitBoard(show, ROWS, COLS, '*');//初始化棋盘
        Putmine(mine, ROW-6, COL-6, COUNT);//埋雷
        //DisplayBoard(mine, ROW - 6, COL - 6);
        DisplayBoard(show, ROW-6, COL-6);//打印棋盘
        Findmine(mine, show, ROW-6, COL-6, COUNT);//扫雷
    }
    else if (COUNT == 15){
        char mine[ROWS][COLS] = { 0 };
        char show[ROWS][COLS] = { 0 };//显示雷,给玩家看
        InitBoard(mine, ROWS, COLS, '0');
        InitBoard(show, ROWS, COLS, '*');//初始化棋盘
        Putmine(mine, ROW - 2, COL - 2, COUNT);//埋雷
        //DisplayBoard(mine, ROW - 2, COL - 2);
        DisplayBoard(show, ROW - 2, COL - 2);//打印棋盘
        Findmine(mine, show, ROW - 2, COL - 2, COUNT);//扫雷
    }
    else{
        char mine[ROWS][COLS] = { 0 };
        char show[ROWS][COLS] = { 0 };//显示雷,给玩家看
        InitBoard(mine, ROWS, COLS, '0');
        InitBoard(show, ROWS, COLS, '*');//初始化棋盘
        Putmine(mine, ROW, COL, COUNT);//埋雷
        //DisplayBoard(mine, ROW, COL);
        DisplayBoard(show, ROW, COL);//打印棋盘
        Findmine(mine, show, ROW , COL, COUNT);//扫雷
    }
}
void test(){
    srand((unsigned int)time(0));//随机种子
    int input = 0;
    int input2 = 0;
    int COUNT = 0;
    do{
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        system("cls");
        switch (input){
        case 1:
            while (1){
                menu2();
                printf("请选择:>");
                scanf("%d", &input2);
                switch (input2){
                case 1:
                    COUNT = EASY_COUNT;
                    break;
                case 2:
                    COUNT = USUAL_COUNT;
                    break;
                case 3:
                    COUNT = HARD_COUNT;
                    break;
                default:
                    printf("输入有误,请重新选择!\n");
                    break;
                }
                if (input2 >= 1 && input2 <= 3){
                    break;
                }
            }
            system("cls");
            game(COUNT);
            break;
        case 2:
            printf("退出游戏!\n");
            break;
        default:
            printf("输入有误,请重新选择!\n");
            break;
        }
    } while ((input - 2));
}
void main(){
    test();
    system("pause");
}

game.h

#ifndef _GAME_H_
#define _GAME_H
 
#define EASY_COUNT 10 //简单级,10个雷
#define USUAL_COUNT 15 //普通级,15个雷
#define HARD_COUNT 20 //单级,20个雷
 
 
#define ROW 15//行
#define COL 15 //列
 
#define ROWS ROW+2
#define COLS COL+2
 
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//初始化棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);//打印棋盘
void Putmine(char board[ROWS][COLS], int row, int col, int count);//埋雷
void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col,int count);//扫雷
 
#endif

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
 
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){
    memset(board, set, rows*cols*sizeof(board[0][0]));
}
void DisplayBoard(char board[ROWS][COLS], int row, int col){
    int i, j = 0;
    if (row == ROW - 6){
        printf("------------------------------\n");
    }
    if (row == ROW - 2){
        printf("-----------------------------------------\n");
    }
    if (row == ROW){
        printf("----------------------------------------------\n");
    }
    for (i = 0; i <= row; i++){
        for (j = 0; j <= col; j++){
            if (i == 0 || j == 0){
                if (j == 0){
                    if (i < 10){
                        printf("%d  ", i);
                    }
                    else{
                        printf("%d ", i);
                    }
                }
                else{
                    if (j < 10){
                        printf("%d  ", j);
                    }
                    else{
                        printf("%d ", j);
                    }
                }
            }
            else{
                printf("%c  ", board[i][j]);
            }
        }
        printf("\n");
    }
    if (row == ROW - 6){
        printf("------------------------------\n");
    }
    if (row == ROW - 2){
        printf("-----------------------------------------\n");
    }
    if (row == ROW){
        printf("----------------------------------------------\n");
    }
}
void Putmine(char board[ROWS][COLS], int row, int col, int count){
    int c = 0;//埋好的雷的个数
    int i = 0;
    int j = 0;
    do{
        i = rand() % row + 1;
        j = rand() % col + 1;
        if (board[i][j] =='0'){//保证雷的个数为 count个
            board[i][j] = '1';
            c++;
        }    
    } while (count-c);
}
/*统计雷的个数*/
int MineCount(char mine[ROWS][COLS], int i, int j){
    return (mine[i - 1][j] +
        mine[i - 1][j + 1] +
        mine[i][j + 1] +
        mine[i + 1][j + 1] +
        mine[i + 1][j] +
        mine[i + 1][j - 1] +
        mine[i][j - 1] +
        mine[i - 1][j - 1]) - 8 * '0';
}
void ExpansionMine(char mine[ROWS][COLS], char show[ROWS][COLS], int i, int j, int row, int col){
    if (MineCount(mine, i, j) == 0){
        show[i][j] = ' ';
        //再次遍历周围的雷
        if (i - 1 > 0 && show[i - 1][j] == '*'){
        //    printf("1\n");
            ExpansionMine(mine, show, i - 1, j, row, col);//递归
        }
        if (i - 1 > 0 && j + 1 <= col && show[i - 1][j + 1] == '*'){
            ExpansionMine(mine, show, i - 1, j + 1, row, col);
        }
        if (j + 1 <= col && show[i][j + 1] == '*'){
            ExpansionMine(mine, show, i, j + 1, row, col);
        }
        if (i + 1 <= row && j + 1 <= col && show[i + 1][j + 1] == '*'){
            ExpansionMine(mine, show, i + 1, j + 1, row, col);
        }
        if (i + 1 <= row && show[i + 1][j] == '*'){
            ExpansionMine(mine, show, i + 1, j, row, col);
        }
        if (i + 1 <= row && j - 1 >0 && show[i + 1][j - 1] == '*'){
            ExpansionMine(mine, show, i + 1, j - 1, row, col);
        }
        if (j - 1 > 0 && show[i][j - 1] == '*'){
            ExpansionMine(mine, show, i, j - 1, row, col);
        }
        if (i - 1 > 0 && j - 1 > 0 && show[i - 1][j + 1] == '*'){
            ExpansionMine(mine, show, i - 1, j + 1, row, col);
        }
    }
    else{//周边有雷
        show[i][j] = MineCount(mine, i, j) + '0';
    }
}
void menu3(){
    printf("********   1.标记    2.排查   ********\n");
    printf("请选择:>");
}
void Findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int count){
    int i, j;//行列坐标
    int playcount = 0;//玩家排雷的次数
    int remine = 0;//已标记的或没有排查的坐标;
    while (remine!=count){
        //printf("%d", remine);
        int input = 0;
        printf("***** 1.标记  2.取消标记  3.排查 *****\n");
        printf("请选择:>");
        scanf("%d", &input);
        if (input == 1){
            printf("请输入要标记的坐标(如:a b):>");
            scanf("%d %d", &i, &j);
            if (i >= 1 && i <= row && j >= 1 && j <= col){
                if (show[i][j] == '*'){
                    show[i][j] = 'P';
                    system("cls");
                    DisplayBoard(show, row, col);
                }
                else if (show[i][j] == 'P'){
                    printf("此坐标已被标记过,请重新输入!\n");
                }
                else{
                    printf("此坐标已被排查过,请重新输入!\n");
                }
            }
 
            else{
                printf("坐标输入有误,请重新输入!\n");
            }
        }
        else if (input == 2){
            printf("请输入要取消标记的坐标(如:a b):>");
            scanf("%d %d", &i, &j);
            if (i >= 1 && i <= row && j >= 1 && j <= col){
                if (show[i][j] == 'P'){
                    show[i][j] = '*';
                    system("cls");
                    DisplayBoard(show, row, col);
                }
                else if (show[i][j] == '*'){
                    printf("此坐标还没有被标记过,请重新输入!\n");
                }
                else{
                    printf("此坐标已被排查过,请重新输入!\n");
                }
            }
 
            else{
                printf("坐标输入有误,请重新输入!\n");
            }
        }
        else if (input == 3){
            //printf("%d", remine);
            printf("请输入要排查的坐标(如:a b):>");
            scanf("%d%d", &i, &j);
            if (i >= 1 && i <= row && j >= 1 && j <= col){
                if (show[i][j] == '*'){
                    if (mine[i][j] == '1'){
                        if (playcount == 0){//此时说明玩家首次排雷且踩到雷了
                            mine[i][j] = '0';
                            Putmine(mine, row, col, 1);//重新放雷,保证玩家在第一把不踩雷
                            playcount = 1;
                            ExpansionMine(mine, show, i, j, row, col);//扩展周边的雷
                            DisplayBoard(show, row, col);
                        }
                        else{
                            printf("很遗憾,你被炸死了!\n");
                            printf("雷阵布局如下:\n");
                            DisplayBoard(mine, row, col);
                            break;
                        }
                    }
                    else{
                        ExpansionMine(mine, show, i, j, row, col);//扩展周边的雷
                        system("cls");
                        //DisplayBoard(mine, row, col);
                        DisplayBoard(show, row, col);
                        playcount = 1;
                    }
                }
                else if (show[i][j] == 'P'){
                    printf("此坐标已被标记过,请重新输入!\n");
                }
                else{
                    printf("此坐标已被排查过,请重新输入!\n");
                }
            }
            else{
                printf("坐标输入有误,请重新输入!\n");
            }
        }
        else{
            printf("输入有误,请重新输入!\n");
        }
        remine = 0;//重新统计;
        for (int m = 1; m <= row; m++){
            for (int n = 1; n <= col; n++){
                if ((show[m][n] == '*' )||( show[m][n] == 'P')){
                    remine++;
                }
            }
        }
    }
    //printf("%d", remine);
    if (remine == count){
        printf("恭喜您,排雷成功!\n");
        printf("雷阵布局如下:\n");
        DisplayBoard(mine, row, col);
    }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现第一次防死版扫雷游戏

    目录 前言 一.功能描述 二.实现的步骤 1.菜单的打印函数: 2.初始化雷盘函数: 3.打印雷盘函数: 4.埋雷函数: 5.排雷函数: 6.防止第一次死的函数: 7.展开函数: 总结 前言 扫雷这款经典的游戏想必大多数人都玩过了,今天用C语言实现了扫雷小游戏,小伙伴们快来看看吧. 一.功能描述 扫雷代码有以下功能: 1.若输入的坐标周围没雷,可以直接展开 2.防止第一次玩就直接踩雷,被炸死 3.若输入的坐标周围有雷,会显示周围雷的个数 4.若排雷失败,会展示出雷图的雷分布是怎样的 二.实现的步

  • C语言实现递归版扫雷游戏实例

    目录 思路 清晰的逻辑 菜单 棋盘 布置雷 排雷 判断输赢 text.c实现 game.c实现 game.h实现 递归部分详解 总结 思路 清晰的逻辑 为方便将其分为三个文件:text.c(测试) game.c(函数实现) game.h(头文件声明) 在排雷的时候为了方便,我们需要将每一行每一列对应的行数,列数打印出来. #define LEI 10 #define ROW 10 #define LOW 10 #define ROWS ROW+2 #define LOWS LOW+2 //在定义

  • C语言实现自定义扫雷游戏(递归版)

    本文实例为大家分享了C语言自定义扫雷游戏的具体代码,供大家参考,具体内容如下 实现过程 对于用C语言实现扫雷游戏得实现,可将游戏过程分为两个板块. 实现游戏关键功能得函数 搭建合理得游戏过程 实现游戏关键功能 为了将游戏功能方便管理和键入,首先我们创建一个头文件,mine.h对游戏功能进行声明.然后创建对应的源文件mine.c对这些函数进行定义. 对于游戏功能,我们首先想到的是构建一个目标规格的雷盘,也就是二维数组.为了使游戏更具可玩性,所以雷盘的规格应可以自定义.所以在mine.h头文件中,应

  • C语言扫雷排雷小游戏实现全程

    目录 test.c game.h game.c 详解游戏代码的实现 1初化扫雷区 2打印扫雷区 3 设置雷 4 排雷 4.1展开一片的功能 4.2雷标记功能的实现 游戏过程 test.c 在这个文件中,我们主要是完成游戏逻辑的测试,在这里我们要注意的点,我们建立了二个数组,mine数组我们用来存放布置雷的信息,show数组存放排查出雷的信息.本次排雷区域是9*9的格子,为了防止数组出现越界,我们特意把数组的下标定义大点变为11*11. #define _CRT_SECURE_NO_WARNING

  • C语言实现扫雷游戏详细流程

    目录 前言 头文件部分 主函数部分(源文件) 函数定义(原文件) 1.菜单打印 2.初始化棋盘 3.打印棋盘 4.生成地雷 5.数雷并赋值给trueboard 6.排查雷区 7.展开 8.判断输赢 前言 嘿!是不是写扫雷小游戏的时候发现一个个输入太慢了?是不是想要展开却发现陷入了死递归?让小黄教教你怎么巧妙地解决这个问题吧! 其实总结起来就是一句话“可以让计算机多判断,但是不能让他多算”.只要每次判断一个格子周围雷数的时候赋值到另一个棋盘,后续递归的时候就不判断这个地方的棋盘就解决啦! PS:采

  • C语言实现经典扫雷小游戏完整代码(递归展开 + 选择标记)

    目录 游戏介绍 游戏整体框架 游戏具体功能及实现 1.雷盘的定义 2.雷盘的初始化 3.布置雷 4.排查雷 5.递归式展开一片 6.获取周围雷的个数 7.标记特定位置 8.打印雷盘 游戏完整代码 1.test.c 2.game.h 3.game.c 游戏效果展示 大家好,今天我们将一起用C语言实现一个经典小游戏 – 扫雷,Let is go ! 游戏介绍 扫雷游戏相信大家都玩过,上图就是一个网页版的扫雷,它的规则是玩家选择一个方格,若此方格没有地雷,那么该方格会显示与它相邻的八个方格中雷的个数,

  • C语言详细讲解通过递归实现扫雷的展开

    目录 用户选择菜单 棋盘初始化 布置雷(随机布置) 打印棋盘 玩家下棋 棋盘展开 展开部分思维导图 展开函数最后一个else return 作用 周围雷个数判断 用户选择菜单 void menu() { printf("****************************\n"); printf("******** 1.play **********\n"); printf("******** 0.exit **********\n"); p

  • C语言实现简易的扫雷小游戏

    这是一个用C语言实现的控制台扫雷小游戏,实现了随机布置炸弹.扫描炸弹.标记炸弹.百分百第一次不被炸死等功能. 编译器:vs2015 功能模块图 源代码 #include<stdio.h> #include<stdlib.h> #include<time.h> void show(int cbd[10][10],int u[10][10])  //界面输出函数 {     int i, j;     //for (i = 0; i < 10; i++)  //输出全

  • C语言实现扫雷小游戏(扩展版)

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 实现的拓展功能如下: 1.设置游戏难度等级2.保证玩家在第一把踩雷后不被炸死3.若排雷的地方无雷,自动扩展到有雷的周围,并给出雷数4.标记(相当于扫雷游戏中的插旗子)5.取消标记 分析: 1.用二维字符数组mine[ROWS][COLS]来存储雷,现在我们用字符1来表示有雷,字符0表示无雷.用二维字符数组show[ROWS][COLS]将所有的元素初始化为*,并打印作为展现给玩家的.同时用show数组来表示对应的min

  • C语言实现扫雷小游戏(扩展版可选择游戏难度)

    游戏简介 扫雷,是一款益智类小游戏. 游戏目标是找出所有没有地雷的方格,完成游戏:要是按了有地雷的方格,游戏失败:玩家可标记雷的位置.游戏以完成时间来评高低.有不同的游戏难度可选择. 实现的功能介绍 1.计时 2.初始化雷盘 3.打印雷盘 4.随机设置雷的分布,可选择游戏难易程度 5.统计坐标位置周围的雷数 6.第一次排雷不会被炸死 7.扩展式排雷,展开周围的非雷区 8.给所选坐标位置做标记,或取消标记 该程序分为三个文件: 1.game.h :包含头文件的引用.函数的声明和宏定义 2.game

  • C语言实现扫雷小游戏简单版

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 在vs2019创建新项目,然后添加两个源文件test.c和game.c,接着创建一个头文件game.h. test.c: #include "game.h" void game() { char mine[ROWS][COLS] = { 0 }; char show[ROWS][COLS] = { 0 }; InitBoard(mine, ROWS, COLS, '0'); InitBoard(show, R

  • C语言实现扫雷小游戏的全过程记录

    第一步思考要实现的功能 想必大家都知道扫雷这个小游戏,今天我们来用C语言实现一下,首先要扫雷,我们首先就需要有一个布置了雷的棋盘,然后开始扫雷,玩过扫雷的小伙伴都知道,如果选中的格子旁边没有雷,那么旁边的格子就会自动清空,大概的思路有了,现在我们开始实现. 第二步实现 初级版扫雷 首先创建棋盘的作用是用来存储雷的信息,这时我们思考一下,一个棋盘到底够不够用?棋盘多大才合适?我们打印出来的棋盘肯定是不能出现雷的信息的,不然游戏就无法正常进行了,但是我们雷的信息又需要棋盘存储,这样一想,一个棋盘似乎

  • 利用C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 说明:该游戏的实现需要建立三个文件 test2.c:整个游戏,开始游戏/退出游戏的大体执行流程 game2.c:具体实现扫雷游戏功能的函数定义 game.h:宏定义,函数声明,引用相关C库函数的头文件 test2.c 游戏的大体执行流程 #include"game2.h" //菜单函数 void menu() { printf("**************************\n")

  • C语言实现扫雷小游戏详解

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位置坐标.当用户输入坐标超出棋盘范围或者位置之前已经进行扫雷时,将提示用户重新输入.当用户输入正确坐标时,如果输入位置没雷将会显示当前位置周边有几个雷,直到将所有雷找出后,重新显示菜单.当输入位置有雷时,游戏结束,重新显示菜单. 二.分析与介绍 首先编写程序开始前,我们要清楚知道棋盘时二维的,所以这里

  • 使用C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 游戏规则 在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利, 如果踩到雷,游戏结束 设计思路 1.创建地图并初始化 2.打印地图 两张地图,用一个函数就能实现 3.扫雷 玩家输入要打开的位置. 4.判断是否踩雷 踩雷的话就直接游戏结束 5.更新 showMap 显示以当前位置为中心,周围一共有几个地雷 6.判断游戏是否胜利 如果你打开了不是地雷的所有位置,游戏胜利 源码实现 // An highli

  • 基于C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 game.h 设置头文件 #include<stdio.h> #include<stdlib.h> #include<time.h> #define ROW 9 #define COL 9 #define EASY_COUNT 10 #define ROWS ROW+2 #define COLS COL+2 //初始化 void InitBoard(char board[ROWS][COLS]

  • 用C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 1. 规则 随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷,2就有两个雷······: 最终任务就是点开所有没有雷的格子,则取得更好的分数,如果点开的格子是雷,则游戏结束. 2. 编写思路 2.1 编写选择界面 同上个小游戏一样,首先编写选择界面,输入1为开始游戏,输入2则退出游戏. void Menu() { printf("#######################

  • C语言实现扫雷小游戏完整算法详解(附完整代码)

    目录 前言 1.算法基本思路 2.算法详解 1.初始化数组与打印数组 2.设置雷 3.排查与标记 4.CountMine函数计算周围雷的个数 5.ExpandMine函数递归展开周围所有安全区域 3.完整代码!!! 总结 前言 扫雷是一个常见小游戏,那么如何用C语言实现扫雷呢?学习了二维数组之后,我们可将扫雷的网格区域存储为二维数组,从而使用C语言实现扫雷. 1.算法基本思路 首先,用一个二维数组存储雷的分布,雷的分布在游戏期间从始至终不变,下文称为mine数组.用另一个二维数组存储排查出的雷的

随机推荐