C语言学习教程:用C语言实现简易扫雷

    科技2025-08-31  6

    game.h

    #define _CRT_SECURE_NO_WARNINGS 1

    #include <stdio.h>

    #include <Windows.h>

    #include <time.h>#include <stdlib.h>

    #define ROW 9 //显示棋盘的大小

    #define COL 9#define ROWS ROW+2 //整个棋盘的大小

    #define COLS COL+2

    #define COUNT 10 //雷的数量

    void chushihua(char arr[ROWS][COLS], int rows, int cols,char set);

    void qipanxianshi(char arr[ROWS][COLS], int row, int col);

    void buzhilie(char arr[ROWS][COLS], int row, int col);

    void kaishipailei(char arr1[ROWS][COLS], char arr2[ROWS][COLS],int row, int col);

    text.c

    #include"game.h"

    voidsaolie()

    {

    chararr1[ROWS][COLS] = {0};

    chararr2[ROWS][COLS] = {0};

    //创建两个数组,一个放雷,一个显示

    chushihua(arr1, ROWS, COLS,‘0’);

    chushihua(arr2, ROWS, COLS,’*’);//初始化两个棋盘qipanxianshi(arr2,ROW,COL);//打印一下棋盘

    buzhilie(arr1, ROW, COL);//放置地雷

    qipanxianshi(arr1, ROW, COL);//测试打印一下带雷的棋盘kaishipailei(arr1,arr2,ROW,COL);}

    voidmeun(){

    printf("================================\n");

    printf("=========== 1.开 始 ===========\n");

    printf("=========== 0.退 出 ===========\n");

    printf("================================\n");}

    voidgame()

    {intinput =0;

    srand((unsignedint)time(NULL));

    do

    { meun();

    printf(“请选择:>”);

    scanf("%d", &input);

    switch(input)

    {case1: saolie();break;

    case0:printf(“游戏结束\n”);break;

    default:printf(“输入错误\n”);break; } }while(input);}

    intmain(){ game();return0;}

    game.c

    #include"game.h"

    void chushihua(char arr[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++) { arr[i][j] =set; } }}

    void qipanxianshi(char arr[ROWS][COLS],int row,int col)

    {int i =0;int j =0;for( i =0; i <= col; i++)

    {printf("%d “, i); }printf(”\n");//打印一行的数字,方便玩家找坐标

    for( i =1; i <= row; i++) {printf("%d ", i);//打印每一列的数字

    for( j =1; j <=col; j++) {printf("%c “, arr[i][j]); }printf(”\n"); }}

    void buzhilie(char arr[ROWS][COLS],int row,int col)

    {int count = COUNT;

    while(count) {int x = rand() % row +1;int y = rand() % col +1;

    if(arr[x][y] ==‘0’) { arr[x][y] =‘1’; count–; } }}

    int tnl(char arr1[ROWS][COLS],int x,int y)

    {return arr1[x -1][y] -‘0’+ arr1[x][y -1] -‘0’+

    arr1[x -1][y -1] -‘0’+ arr1[x +1][y] -‘0’+

    arr1[x][y +1] -‘0’+ arr1[x +1][y +1] -‘0’+ arr1[x +1][y -1] -‘0’+ arr1[x -1][y +1] -‘0’;}

    void kaishipailei(char arr1[ROWS][COLS],char arr2[ROWS][COLS],introw,intcol)

    {int num1 =0;int num2 =0;int win =0;

    while(win=1&& num1 <=9&& num2 >=1&& num2 <=9)

    {if(arr1[num1][num2] ==‘1’)

    {printf(“游戏结束,你被炸死了!\n”);break; }

    else{intnum3 = tnl(arr1,num1,num2);

    if(arr2[num1][num2]==’*’)

    { arr2[num1][num2] = num3 +‘0’; win++; }

    else{printf(“该坐标已经排过雷了\n”); }

    system(“cls”); qipanxianshi(arr2, ROW, COL); } }

    else{printf(“坐标不合法,重新输入”); } }

    if(win == row*col - COUNT)

    {printf(“恭喜你把所有雷都排完了\n”);

    printf(“雷阵 1为雷\n”); qipanxianshi(arr1, ROW, COL); }}

    点击了解更多资料,更有免费开源项目和课程等你观看哦!

    Processed: 0.011, SQL: 8