C语言简单的键盘玩扫雷小游戏(完结)

news/2025/1/10 22:00:32/

1:这次我们会将前面的代码进行整合,和整理,最终使我们的程序可以有效的运行起来。

【1】初始化函数。
void GameInit()
{
    //随机数种子
    srand((unsigned int)time(NULL));
    //数组初始化
    
    for(int i = 0;i < ROW+2;i++)
    {
        for(int j = 0;j < COL+2;j++)
        {
            map[i][j] = 0;
        }    
    }
    //布雷 -1表示雷
    int n = 0; 
    while(n<NUM)
    {
        int r = rand() % ROW + 1;//1--ROW 
        int c = rand() % COL + 1;//1--C0L 
        if(map[r][c] == 0)
        {
            map[r][c] = -1;
            n++;
        }
    }
    //跟据类的分布 填充其他部位雷的数据 
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {//                  遍历二维数组 
            if(map[i][j] != -1)//找到不为雷的元素 
            {
                //遍历九宫格
                for(int m=i-1;m<=i+1;m++)
                {
                    for(int n=j-1;n<=j+1;n++)
                    {
                        if(map[m][n]==-1)
                        {
                            map[i][j]++;
                        }
                    }
                }
            }
        }
    }
}

【2】加密。

void GameDraw()
{
    //加密
    /*
    雷-1-----------19
    空0------------20
    1---------------21
    2---------------22
    3---------------23
    4---------------24
    5---------------25
    6---------------26
    大于等于19的 
    */
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {
            map[i][j]+=20;
        }
    }
    PrintPlay();
}

【3】打印扫雷的界面。

void PrintPlay()
{
    //打印  
    int i,j;
    for(i = 1;i <= ROW;i++)
    {
        for(j = 1;j <= COL;j++)
        {
            if(map[i][j]>=19)
            {
                printf(" *");
            }
            else
            {
                printf("%2d",map[i][j]);
            }
        }
        printf("\n");
    }
}

【4】用户玩输入坐标。

//用户玩输入坐标。
void GameUser()
{
    int z;
    while(z)
    {
        
        int x,y;
        printf("请输入坐标:\n");
        scanf("%d %d",&x,&y);
        if(x<=10&&x>=1&&y<=10&&y>=1)
        {
            //解密
                /*
    雷-1-----------19
    空0------------20
    1---------------21
    2---------------22
    3---------------23
    4---------------24
    5---------------25
    6---------------26
    1 1 1 
    1 1 1
    1 1 1
    大于等于19的 
        
    */
            if(map[x][y]<19)
            {
                printf("已翻开。\n");
            }
            else
            {
                switch(map[x][y])
                {
                    
                    
                    case 19:
                        //    游戏结束
                        map[x][y]-=20;
                        PrintPlay();//打印 
                        printf("你踩到雷了19!\n");
                        z=0;
                        //跳转到结束 
                        break;
                    case 20:
                        //空 
                        //解密 
                        //map[x][y]-=20;
                        //空周围为空的叶打印出来 
                        point(x,y); 
                        PrintPlay();//打印 
                        break;
                    case 21:
                    case 22:
                    case 23:
                    case 24:
                    case 25:
                    case 26:
                    case 27:
                    case 28:
                        //周围有雷
                        //解密输出就可以 
                        map[x][y]-=20;//解密 
                        PrintPlay();//打印 
                        break;
                    default :
                        break;
                }
            }
            
        }
        else
        {
            printf("您输入错误!"); 
        }
    } 
}

【5】:打印周围为空的地方

//打印周周围为空的地方void point(int x,int y)
{
    //遍历九宫格
    for(int m=x-1;m<=x+1;m++)
    {
        for(int n=y-1;n<=y+1;n++)
        {
            if(map[m][n]==20)
            {
                map[m][n]-=20;
                point(m,n);
            }
        }
    }    
}

【6】主函数。

void main()
{
    printf("欢迎来到Q的编程世界:\n");
    //初始化函数     
    GameInit();
    //绘制函数  打印二维数组中所有的元素 
    
    GameDraw();
    //用户玩输入坐标
    GameUser();
    system("pause");
}

【7】:最后把我们的代码,整合一下就得到如下的,C语言简单的键盘玩扫雷小游戏的完整代码:

/*
Q的编程世界 
*/ 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 10//行 
#define COL 10//列 
#define NUM 10//雷的个数
 
int map[ROW+2][COL+2];

//初始化函数
void GameInit()
{
    //随机数种子
    srand((unsigned int)time(NULL));
    //数组初始化
    
    for(int i = 0;i < ROW+2;i++)
    {
        for(int j = 0;j < COL+2;j++)
        {
            map[i][j] = 0;
        }    
    }
    //布雷 -1表示雷
    int n = 0; 
    while(n<NUM)
    {
        int r = rand() % ROW + 1;//1--ROW 
        int c = rand() % COL + 1;//1--C0L 
        if(map[r][c] == 0)
        {
            map[r][c] = -1;
            n++;
        }
    }
    //跟据类的分布 填充其他部位雷的数据 
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {//                  遍历二维数组 
            if(map[i][j] != -1)//找到不为雷的元素 
            {
                //遍历九宫格
                for(int m=i-1;m<=i+1;m++)
                {
                    for(int n=j-1;n<=j+1;n++)
                    {
                        if(map[m][n]==-1)
                        {
                            map[i][j]++;
                        }
                    }
                }
            }
        }
    }
}

void PrintPlay();
//绘制函数  打印二维数组中所有的元素 
void GameDraw()
{
    //加密
    
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {
            map[i][j]+=20;
        }
    }
    PrintPlay();
}

void PrintPlay()
{
    //打印  
    int i,j;
    for(i = 1;i <= ROW;i++)
    {
        for(j = 1;j <= COL;j++)
        {
            if(map[i][j]>=19)
            {
                printf(" *");
            }
            else
            {
                printf("%2d",map[i][j]);
            }           
        }
        printf("\n");
    }

}

//打印周圍為空的
void point(int x,int y)
{
    //遍历九宫格
    for(int m=x-1;m<=x+1;m++)
    {
        for(int n=y-1;n<=y+1;n++)
        {
            if(map[m][n]==20)
            {
                map[m][n]-=20;
                point(m,n);
            }
        }
    }    
}
//用户玩输入坐标
void GameUser()
{
    int z;
    while(z)
    {
        
        int x,y;
        printf("请输入坐标:\n");
        scanf("%d %d",&x,&y);
        if(x<=10&&x>=1&&y<=10&&y>=1)
        {
            //解密

            if(map[x][y]<19)
            {
                printf("已翻开。\n");
            }
            else
            {
                switch(map[x][y])
                {
                    
              
                    case 19:
                        //    游戏结束
                        map[x][y]-=20;
                        PrintPlay();//打印 
                        printf("你踩到雷了19!\n");
                        z=0;
                        //跳转到结束 
                        break;
                    case 20:
                        //空 
                        //解密 
                        //map[x][y]-=20;
                        //空周围为空的叶打印出来 
                        point(x,y); 
                        PrintPlay();//打印 
                        break;
                    case 21:
                    case 22:
                    case 23:
                    case 24:
                    case 25:
                    case 26:
                    case 27:
                    case 28:
                        //周围有雷
                        //解密输出就可以 
                        map[x][y]-=20;//解密 
                        PrintPlay();//打印 
                        break;
                    default :
                        break;
                }
            }
            
        }
        else
        {
            printf("您输入错误!"); 
        }
    } 
}

void main()
{
    printf("欢迎来到Q的编程世界:\n");
    //初始化函数     
    GameInit();
    //绘制函数  打印二维数组中所有的元素 
    
    GameDraw();
    //用户玩输入坐标
    GameUser();
    system("pause");
}

下面是运行图片:

 

好嘞,键盘玩扫雷到这里就完结了,拜拜,让我们下次再见吧!!!


http://www.ppmy.cn/news/157879.html

相关文章

那些年用过的机械键盘--游戏人生键盘风云#入坑keychron#

#入坑keychron#时间易逝&#xff0c;岁月流连&#xff1b;忆往昔&#xff0c;岁月如歌&#xff0c;歌如梦&#xff1b;再回首&#xff0c;往事重重&#xff0c;在心中。不曾想如今已然正式踏上奔三的路途&#xff0c;那些年用过的机械键盘&#xff0c;就像游戏伴随着我一样&…

Pygame小工具:模拟键盘 - 虚拟键盘(Keyboard)

宅在家里&#xff0c;沉迷于pygame编程&#xff0c;这篇文章给大家分享一下基于pygame实现一些简单的小功能&#xff0c;这些功能可以很好的嵌入在游戏中增加游戏的交互性。 这篇文章主要讲述用pygame实现虚拟键盘的方式。 目录 1. 效果 & 功能 2. 代码 2.1. 按钮 2.…

PyKeyBoardFairy可以替代你游戏中的卡键盘和鼠标宏

PyKeyBoardFairy 介绍 Python编写的简单版键盘精灵 可以替代你游戏中的卡键盘和鼠标宏。 软件架构 程序唯一依赖外部库: pynput 1.7.3 安装教程 下载程序&#xff0c; git clone https://gitee.com/J_Sky/py-key-board-fairy.git 或是下载压缩包也可以确定系统安装Pytho…

键盘字母游戏

&#xfeff;游戏名称&#xff1a;键盘字母游戏 &#xfeff; <1> 游戏简介&#xff1a;利用键盘字母游戏来帮助使用者熟悉键盘字母的位置&#xff0c;提高手指的灵活性 &#xfeff; <2> 游戏类型&#xff1a;典型的益智游戏 <3> 游戏方式&#xff1a;点击…

Pygame 键盘输入

4.Pygame 键盘输入 所有的游戏都需要玩家与它进行互动体验。这种体验的第一步是获取用户的输入&#xff0c;并使用此输入以来影响游戏世界。 这方面的常见示例是用于移动角色的箭头键、用于各种攻击 (RPG) 的不同键或您使用鼠标选择的不同对话选项等。 介绍 Pygame 跟踪发生…

游戏编程入门(5):使用键盘和鼠标控制游戏

接上文 游戏编程入门&#xff08;4&#xff09;&#xff1a;绘制图形图像 本文内容包括&#xff1a; 如何有效地检测和响应键盘输入如何处理鼠标输入如何开发带有动画图形对象的程序&#xff0c;并且可以使用键盘和鼠标来控制动画图形对象 用户输入设备 输入设备是允许用户与…

【Visual C++】游戏开发笔记十二 游戏输入消息处理(一) 键盘消息处理

本系列文章由zhmxy555编写&#xff0c;转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7390624 作者&#xff1a;毛星云 邮箱&#xff1a; happylifemxy163.com ------------------------------------------------------------------------------------…

键盘游戏

一.游戏目的&#xff1b; 二.游戏操作说明&#xff1b; 三.游戏设计思路&#xff1b; 一.游戏目的&#xff1a; 玩家可以通过键盘游戏熟悉键盘操作&#xff0c;提高打字速度&#xff1b; 二.游戏操作说明&#xff1a; 玩家打开打字游戏网页&#xff0c;点击开始按钮进入…