广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言代码实现简单的扫雷小游戏
  • 535
分享到

C语言代码实现简单的扫雷小游戏

2024-04-02 19:04:59 535人浏览 安东尼
摘要

C语言+EASYX实现扫雷,供大家参考,具体内容如下 主要思路就是通过一个二维数组存储不同的数来代表0到8等具体的图片,再配合鼠标的位置和点击情况,来改变数组某一项的值,而显示不同的

C语言+EASYX实现扫雷,供大家参考,具体内容如下

主要思路就是通过一个二维数组存储不同的数来代表0到8等具体的图片,再配合鼠标的位置和点击情况,来改变数组某一项的值,而显示不同的图片。

水平有限,有些地方的代码过于复杂和繁琐,有待优化;有些功能的实现也不是很完整和合理,敬请指正。


#include <stdio.h> //标准的输入输出头文件。
#include <graphics.h> //EasyX图形界面。
#include <time.h>
#include <stdlib.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")//导入静态库
int f2=0;//标志信号
int flag=0;//标志信号
int ROW = 0; //棋盘行数
int COL = 0;  //棋盘列数
int NUM = 0; //雷的个数
int size; //图片尺寸

HWND hwnd1;
int count = 0;//已掀开的数量;

void BGMPLAY(void)//播放音乐函数
{
 mciSendString(L"open ./image/XXX.mp3 alias bgm",0,0,0);//XX可替换为自己的歌曲
 mciSendString(L"play bgm repeat",0,0,0);
}


struct rayxy//地雷位置
{
 int x;
 int y;
}xy[200];//地雷位置

IMAGE img[21];//存储图像

void welcome()
{
 initgraph( 640, 480);
 loadimage(&img[9], L"./image/开始界面1.jpg", 640, 480);//开始界面
 loadimage(&img[15], L"./image/菜单界面.jpg", 640, 480);//菜单选择界面
 if (!flag)
 {
 putimage(0, 0, &img[9]);
 Sleep(1000);
 }
 cleardevice();
 putimage(0, 0, &img[15]);

 //模式选择
 MOUSEMSG msg = { 0 };
 const int x1=9,y1=8, x2=290,y2=8,x3=9,y3=330,x4=290,y4=330, h=306, w=265;

 int sx = 0, sy = 0;
 //模式选择
 while (1)
 {
 HWND hwnd;

 msg = GetMouseMsg();
 if (msg.uMsg == WM_LBUTTONDOWN)
 {
 sx = msg.x;
 sy = msg.y;
 break;
 }
 }

 if ((sx >= x1 && sy >= y1)&& (sx <= x1+w && sy <= y1+h))
 {
 ROW = 9;
 COL = 9;
 NUM = 10;
 size = 70;
 }
 if ((sx >= x2 && sy >= y2) && (sx <= x2 + w && sy <= y2 + h))
 {
 ROW = 16;
 COL = 30;
 NUM = 99;
 size = 43;
 }
 if((sx >= x3 && sy >= y3) && (sx <= x3 + w && sy <= y3 + h))
 {
 ROW = 16;
 COL = 16;
 NUM = 40;
 size = 48;
 }
 if ((sx >= x4 && sy >= y4) && (sx <= x4 + w && sy <= y4 + h))
 {
 MessageBox(hwnd1, L"敬请期待!!!", L"提示", MB_OK);
 f2 = 1;
 flag = 1;
 Sleep(1000);
 }
 
}//欢迎界面
int map[30][30];//棋盘地图
void imgplay(void)
{
 loadimage(&img[0], L"./image/空白.jpg",size, size);//空白
 loadimage(&img[1], L"./image/1.jpg", size, size);
 loadimage(&img[2], L"./image/2.jpg", size, size);
 loadimage(&img[3], L"./image/3.jpg", size, size);
 loadimage(&img[4], L"./image/4.jpg", size, size);
 loadimage(&img[5], L"./image/5.jpg", size, size);
 loadimage(&img[6], L"./image/6.jpg", size, size);
 loadimage(&img[7], L"./image/7.jpg", size, size);
 loadimage(&img[8], L"./image/8.jpg", size, size);//8
 loadimage(&img[16], L"./image/问号.jpg", size, size);//问号
 loadimage(&img[10], L"./image/覆盖.jpg", size, size);//覆盖
 loadimage(&img[11], L"./image/标记.jpg", size, size);//标记
 loadimage(&img[12], L"./image/地雷.jpg", size, size);//地雷
 loadimage(&img[13], L"./image/胜利.jpg", size, size);//胜利
 loadimage(&img[14], L"./image/问号.jpg", size, size);//问号
 loadimage(&img[16], L"./image/9.jpg", size, size);//9
 loadimage(&img[17], L"./image/0.jpg", size, size);//0
 loadimage(&img[18], L"./image/冒号.jpg", size, size);//冒号
 loadimage(&img[20], L"./image/标记错误.jpg", size, size);/标记错误
}
void gameinit()
{
 int i, j;
 srand((unsigned int)time(NULL));//为随机布雷提供随机数
 for (i = 0; i < ROW + 2; i++)
 {
 for (j = 0; j < COL + 2; j++)
 {
 map[i][j] = 0;
 }
 }
 int r, c, n = 0;
 while (n < NUM)
 {
 r = rand() % ROW + 1;
 c = rand() % COL + 1;
 if (map[r][c] != -1)
 {
 map[r][c] = -1;
 xy[n].x = r;
 xy[n].y = c;
 n++;
 }
 else
 {
 continue;
 }
 }
 for (i = 1; i <= ROW; i++)
 {
 for (j = 1; j <= COL; j++)
 {
 if (map[i][j] != -1)
 {
 for (r = i - 1; r <= i + 1; r++)
  for (c = j - 1; c <= j + 1; c++)
  {
  if (map[r][c] == -1)
  {
  map[i][j]++;
  }
  }
 }
 }
 }
 for (i = 1; i <= ROW; i++)
 {
 for (j = 1; j <= COL; j++)
 {
 map[i][j] += 20;
 }
 }
}

void drawgraph()
{
 int i, j;
 for (i = 1; i <= ROW; i++)
 {
 for (j = 1; j <= COL; j++)
 {
 if (map[i][j] == -1)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[12]);//地雷
 }
 else if (map[i][j] >= 0 && map[i][j] <= 8)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[map[i][j]]);//显示数字和空白
 }
 else if (map[i][j] >= 19 && map[i][j] <= 28)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[10]);//覆盖
 }
 else if (map[i][j] >= 29&&map[i][j]<=38)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[11]);//标记
 }
 else if(map[i][j]>=39&&map[i][j]<=48)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[14]);//问号
 }
 if (map[i][j] == -2)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[13]);//胜利
 }
 }
 }
}

void draw(int i, int j)
{
 if (map[i][j] == -1)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[12]);//地雷
 }
 else if (map[i][j] >= 0 && map[i][j] <= 8)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[map[i][j]]);//显示数字和空白
 }
 else if (map[i][j] >= 19 && map[i][j] <= 28)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[10]);//覆盖
 }
 else if (map[i][j] >= 29&&map[i][j]<=38)
 {
 putimage((j - 1) * size, (i - 1) * size, &img[11]);//标记
 }
 else
 {
 putimage((j - 1) * size, (i - 1) * size, &img[14]);//问号
 }
}
void blankopen(int r, int c)
{
 int a, b;
 if (map[r][c] == 20)
 {
 count++;
 map[r][c] -= 20;
 }
 for (a = r - 1; a <= r + 1; a++)
 {
 for (b = c - 1; b <= c + 1; b++)
 {
 if (a >= 1 && a <= ROW && b >= 1 && b <= COL)
 {
 if (map[a][b] >= 20 && map[a][b] <= 28)
 {
  map[a][b] -= 20;
  count++;
 }
 }
 }
 }
}
int playgame()
{
 MOUSEMSG msg = { 0 };
 int r, c;
 //while (1)
 //{
 msg = GetMouseMsg();
 switch (msg.uMsg)
 {
 case WM_LBUTTONDOWN:
 c = msg.x / size + 1;
 r = msg.y / size + 1;
 if (map[r][c] >= 29&&map[r][c]<=38)
 {
 map[r][c] -= 10;
 }
 if (map[r][c] >= 39 && map[r][c] <= 48)
 {
 map[r][c] -= 20;
 }
 if (map[r][c] >= 19 && map[r][c] <= 28)
 {
 if (map[r][c] == 20)
 {
  blankopen(r, c);
 }
 else
 {
  if (map[r][c] != 19)
  count++;
  map[r][c] -= 20;
 }
 }
 if (map[r][c] == 0)
 blankopen(r, c);
 draw(r, c);
 return map[r][c];
 //break;
 case WM_RBUTTONDOWN:
 c = msg.x / size + 1;
 r = msg.y / size + 1;
 if (map[r][c] >= 19 && map[r][c] <= 28)
 {
 map[r][c] += 10;
 }
 else if (map[r][c] >= 29&&map[r][c]<=38)
 {
 map[r][c] += 10;
 }
 else
 {
 map[r][c] -= 20;
 }
 draw(r, c);
 return map[r][c];
 //break;

 }
 //}
}
int timerec(void)
{
 time_t timep;
 struct tm p;
 time(&timep);
 gmtime_s(&p, &timep);
 int t = p.tm_min * 60 + p.tm_sec;
 return t;
}

void timeplay(int t)
{
 int min=0 ,sec=0;
 printf("%d\n", t);
 min = t / 60;
 putimage((COL - 3) * size, (ROW)*size, &img[18]); 
 switch (min / 10)
 {
 case 0:putimage((COL - 5) * size, (ROW ) * size, &img[17]); break;
 case 1:putimage((COL - 5) * size, (ROW ) * size, &img[1]); break;
 case 2:putimage((COL - 5) * size, (ROW ) * size, &img[2]); break;
 case 3:putimage((COL - 5) * size, (ROW ) * size, &img[3]); break;
 case 4:putimage((COL - 5) * size, (ROW ) * size, &img[4]); break;
 case 5:putimage((COL - 5) * size, (ROW ) * size, &img[5]); break;
 case 6:putimage((COL - 5) * size, (ROW ) * size, &img[6]); break;
 case 7:putimage((COL - 5) * size, (ROW ) * size, &img[7]); break;
 case 8:putimage((COL - 5) * size, (ROW ) * size, &img[8]); break;
 case 9:putimage((COL - 5) * size, (ROW ) * size, &img[16]); break;
 default:putimage((COL - 5) * size, (ROW ) * size, &img[10]); break;
 }
 switch (min % 10)
 {
 case 0:putimage((COL - 4) * size, (ROW ) * size, &img[17]); break;
 case 1:putimage((COL - 4) * size, (ROW ) * size, &img[1]); break;
 case 2:putimage((COL - 4) * size, (ROW ) * size, &img[2]); break;
 case 3:putimage((COL - 4) * size, (ROW ) * size, &img[3]); break;
 case 4:putimage((COL - 4) * size, (ROW ) * size, &img[4]); break;
 case 5:putimage((COL - 4) * size, (ROW ) * size, &img[5]); break;
 case 6:putimage((COL - 4) * size, (ROW ) * size, &img[6]); break;
 case 7:putimage((COL - 4) * size, (ROW ) * size, &img[7]); break;
 case 8:putimage((COL - 4) * size, (ROW ) * size, &img[8]); break;
 case 9:putimage((COL - 4) * size, (ROW ) * size, &img[16]); break;
 default:putimage((COL - 4) * size, (ROW ) * size, &img[10]); break;
 }
 sec = t % 60;
 switch (sec / 10)
 {
 case 0:putimage((COL - 2) * size, (ROW ) * size, &img[17]); break;
 case 1:putimage((COL - 2) * size, (ROW ) * size, &img[1]); break;
 case 2:putimage((COL - 2) * size, (ROW ) * size, &img[2]); break;
 case 3:putimage((COL - 2) * size, (ROW ) * size, &img[3]); break;
 case 4:putimage((COL - 2) * size, (ROW ) * size, &img[4]); break;
 case 5:putimage((COL - 2) * size, (ROW ) * size, &img[5]); break;
 case 6:putimage((COL - 2) * size, (ROW ) * size, &img[6]); break;
 case 7:putimage((COL - 2) * size, (ROW ) * size, &img[7]); break;
 case 8:putimage((COL - 2) * size, (ROW ) * size, &img[8]); break;
 case 9:putimage((COL - 2) * size, (ROW ) * size, &img[16]); break;
 default:putimage((COL - 2) * size, (ROW ) * size, &img[10]); break;
 }
 switch (sec % 10)
 {
 case 0:putimage((COL - 1) * size, (ROW ) * size, &img[17]); break;
 case 1:putimage((COL - 1) * size, (ROW ) * size, &img[1]); break;
 case 2:putimage((COL - 1) * size, (ROW ) * size, &img[2]); break;
 case 3:putimage((COL - 1) * size, (ROW ) * size, &img[3]); break;
 case 4:putimage((COL - 1) * size, (ROW ) * size, &img[4]); break;
 case 5:putimage((COL - 1) * size, (ROW ) * size, &img[5]); break;
 case 6:putimage((COL - 1) * size, (ROW ) * size, &img[6]); break;
 case 7:putimage((COL - 1) * size, (ROW ) * size, &img[7]); break;
 case 8:putimage((COL - 1) * size, (ROW ) * size, &img[8]); break;
 case 9:putimage((COL - 1) * size, (ROW ) * size, &img[16]); break;
 default:putimage((COL - 1) * size, (ROW ) * size, &img[10]); break;
 }
 for (int i = 0; i < COL-5; i++)
 {
 putimage((i) * size, (ROW)*size, &img[20]);
 }
}

int main()
{
 BGMPLAY();//播放初始音乐
 int i = 0, j = 0, MAX = 0;
 srand((unsigned int)time(NULL));
loop:
loop1:
 f2 = 0;
 welcome();
 if (f2)Goto loop1;
 imgplay();
 count = 0;
 hwnd1 = initgraph(COL * size, (ROW+1) * size);
 gameinit();
 MAX = ROW * COL - NUM;
 time_t timep;
 struct tm p;
 time(&timep);
 gmtime_s(&p,&timep);
 int t1 = timerec();
 while (1)
 {
 drawgraph();
 timeplay(timerec() - t1);
 if (playgame() == -1)
 {
 for (i = 0; i < NUM; i++)
 {

 map[xy[i].x][xy[i].y] = -1;

 }
 drawgraph();
 Sleep(1000);
 MessageBox(hwnd1, L"很遗憾!", L"提示", MB_OK);
 int x = MessageBox(hwnd1, L"回到主菜单", L"Minesweeper", MB_OKCANCEL);
 if (x == 1)
 {
 flag = 1;
 goto loop;
 }
 break;
 }
 if (count == MAX)
 {
 for (i = 0; i < NUM; i++)
 {

 map[xy[i].x][xy[i].y] = -2;
 }

 drawgraph();
 Sleep(1000);
 MessageBox(hwnd1, L"Very good!!!", L"提示", MB_OK);
 int y = MessageBox(hwnd1, L"回到主菜单", L"Minesweeper", MB_OKCANCEL);
 if (y)
 {
 flag = 1;
 goto loop;
 }
 else
 {
 break;
 }

 }
 }

}

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

--结束END--

本文标题: C语言代码实现简单的扫雷小游戏

本文链接: https://www.lsjlt.com/news/122010.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言代码实现简单的扫雷小游戏
    C语言+EASYX实现扫雷,供大家参考,具体内容如下 主要思路就是通过一个二维数组存储不同的数来代表0到8等具体的图片,再配合鼠标的位置和点击情况,来改变数组某一项的值,而显示不同的...
    99+
    2022-11-11
  • 用C语言简单实现扫雷小游戏
    本文实例为大家分享了C语言简单实现扫雷小游戏的具体代码,供大家参考,具体内容如下 设计思路 1. 定义两个二维数组,一个存放炸弹信息,一个隐藏信息后向玩家展示。 2. 玩家每一次选择...
    99+
    2022-11-12
  • 用C语言实现简单扫雷小游戏
    前言 今天学习了制作简易扫雷游戏,代码如下 提示:以下是本篇文章正文内容,下面案例可供参考 一、函数头文件(函数声明) 代码如下(示例): #pragma once #defin...
    99+
    2022-11-12
  • C语言实现扫雷小游戏简单版
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 在vs2019创建新项目,然后添加两个源文件test.c和game.c,接着创建一个头文件game.h。...
    99+
    2022-11-12
  • C语言如何实现简单扫雷小游戏
    本篇内容主要讲解“C语言如何实现简单扫雷小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简单扫雷小游戏”吧!前言今天学习了制作简易扫雷游戏,代码如下提示:以下是本篇文章正文内容...
    99+
    2023-06-20
  • C语言扫雷游戏的简单实现
    今天来用c语言做一个扫雷功能的简单实现,首先创建一个test.c来用于在写代码的途中测试扫雷代码,game.h来存放实现扫雷函数需要用到的头文件,game.c来存放最终的成品。 首先...
    99+
    2022-11-12
  • 基于C语言实现简单的扫雷小游戏
    本文实例为大家分享了C语言实现简单的扫雷小游戏的具体代码,供大家参考,具体内容如下 首先来规划一下扫雷游戏实现的几个步骤: 初始化棋盘:二维数组的遍历及赋值 为了后续代码的简洁方便,...
    99+
    2022-11-12
  • C语言简易实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 经典扫雷游戏规则: 当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,...
    99+
    2022-11-12
  • 用C语言实现简单扫雷游戏
    前言 本文写的是用C语言实现扫雷,用递归实现周围一圈无雷时,自动继续判断下一圈是否有雷,直到四周有地雷的信息。 最终结果展示 初始游戏界面 四周无地雷继续向外展开,直到出现地雷信息...
    99+
    2022-11-12
  • c语言扫雷小游戏源代码
    这期内容当中小编将会给大家带来有关c语言扫雷小游戏源代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。说明:该游戏的实现需要建立三个文件test2.c:整个游戏,开始游戏/退出游戏的大体执行流程game2...
    99+
    2023-06-06
  • C语言实现简易的扫雷小游戏
    这是一个用C语言实现的控制台扫雷小游戏,实现了随机布置炸弹、扫描炸弹、标记炸弹、百分百第一次不被炸死等功能。 编译器:vs2015 功能模块图 源代码 #include<st...
    99+
    2022-11-13
  • C语言实现扫雷小游戏详细代码
    前言 扫雷是一款很经典的电脑小游戏,扫雷就是要把所有非地雷的格子找出即为胜利,输入到地雷格子就算失败。游戏主区域由很多个方格组成,输入一个方格坐标,方格即被打开并显示出方格中的数字,...
    99+
    2022-11-12
  • C语言版简单扫雷游戏
    本文实例为大家分享了C语言版的简单扫雷游戏,供大家参考,具体内容如下 思想 我们在设计的时候,首先将其分为三个部分,分别为头文件game.h游戏界面及主要实现的功能函数部分test....
    99+
    2022-11-12
  • C语言实现扫雷小游戏的示例代码
    目录一、扫雷1.演示效果2.完整代码二、代码解析1.初始化雷盘2.打印雷盘3.布置雷4.排雷5.游戏函数主体6.菜单函数7.头文件、宏定义及主函数一、扫雷 扫雷小游戏主要是利用字符数...
    99+
    2022-11-13
    C语言扫雷游戏 C语言 扫雷 C语言 游戏
  • 基于C语言实现简单扫雷游戏
    在每一个电脑里总有一个固定的小游戏-扫雷,那今天就让我们一起来实现下扫雷。 1.主函数的构建 int main() { int input = 0; do { me...
    99+
    2022-11-12
  • 用C语言实现扫雷小游戏实例代码
    本篇内容主要讲解“用C语言实现扫雷小游戏实例代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用C语言实现扫雷小游戏实例代码”吧!本文实例为大家分享了C语言版扫雷小游戏的具体代码,供大家参考,具...
    99+
    2023-06-20
  • 用C语言实现简单版9*9扫雷小游戏
    目录一.扫雷的规则二.代码实现前的一些问题1.棋盘尺寸=数组尺寸?2.一个数组足矣?三.代码实现0.初步完成头文件1.游戏的入口-菜单2.棋盘的初始化3.展示棋盘4.布置雷5...
    99+
    2022-11-11
  • 基于C语言实现简单的扫雷游戏
    目录效果展示开始的界面选择标记地雷或者选择踩坐标在输入坐标处输入0 0结束游戏踩到炸弹,出现炸弹位置胜利代码test.cgame.hgame扫雷.c效果展示 开始的界面 输入0结束...
    99+
    2022-11-13
  • C语言实现一个简单的扫雷游戏
    前言 扫雷跟上一篇文章的三子棋一样,是C语言基础知识的综合运用的实例,对于巩固我们的基础知识非常重要,同时扫雷作为C语言的一个小项目,锻炼我们的编程思维,也是一个不可多得的实践。 提...
    99+
    2022-11-12
  • 怎么用C语言实现简单扫雷游戏
    本篇内容介绍了“怎么用C语言实现简单扫雷游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.主函数的构建int main(){&...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作