课程设计扫雷(c语言)
课程设计一共两个星期,扫雷要图形界面和鼠标,前一个星期基本啥也没看,合计学习下传说中的api啊~~MFC啊~~~结果都木有成功……
后来发现了easyX……好东西啊!(其实就是把TC的图形库graphics转到了vc中)……
书面文件一律瞎编……
上代码:
#####################################################################################################################
/#include<graphics.h> //画图头文件
#include<conio.h> //输入输出头文件
#define USER_LBUTTONDOWN 101 //宏定义鼠标左键
#define USER_RBUTTONDOWN 102 //宏定义鼠标右键
#define USER_MBUTTONDOWN 103 //宏定义鼠标滑轮
#pragma comment(lib,"Winmm.lib") //载入鼠标文件
#include<math.h> //数学函数生成随机数
#include<memory.h> //数组初始化
int a[50][50]; //数组雷
#include<time.h> //计时
#include<stdio.h> //_stprintf函数头文件
#include<string.h> //字符串头文件
/
//全局变量///
time_t first, second;
TCHAR m_time[33];
int flag=0;
int shengyu;
int high,wide,leishu;
float n,mn,p,q,yy;
int biaoji;
char shenglei[5];
FILE *fp;
int nandu;
struct besttime
{char name[7];float time;char t[5];
}zuih[4];
/
/
int DispatchMessage(MOUSEMSG m, int opt); //鼠标信息处理
void chuangkzh(); //窗口转换过程
int GetMessage(MOUSEMSG m); //获取鼠标信息
void kaishi(); //游戏开始界面
void kaishi2(); //中级界面开始
void kaishi3(); //高级界面开始
int chushi(); //游戏初始化菜单
int saolei(); //扫雷鼠标执行函数
int DispatchMessage2(MOUSEMSG m, int opt); //游戏中鼠标处理
int saolz(MOUSEMSG m); //扫雷中操作
void bulei(); //布雷函数
void panduan(); //判断是否为雷
int nanduxuanxiang(); //难度选项
int DispatchMessage3(MOUSEMSG m, int opt); //鼠标信息处理(难度选项)
int zerodg(int x,int y); //zero递归函数
void zuigaofen(); //最高分鼠标处理
//
//
//
//主函数
void main()
{FILE *fp;int duru=0;fp=fopen("best.dat","rb+");for(int i=0;i<4;i++)if(fread(&zuih[i],sizeof(besttime),1,fp)!=1&&duru!=1){duru=1;printf("file read error!\n");}elsecontinue;fclose(fp);if(duru!=1){initgraph(640,480);chushi();int opt,end=0;MOUSEMSG m;while(end!=1){m = GetMouseMsg();opt = GetMessage(m);end=DispatchMessage(m, opt);}setfont(80,0,"黑体");for(int i=0;i<20;i++){setcolor(WHITE);outtextxy(150,200,"再见");Sleep(25);setcolor(BLACK);outtextxy(150,200,"再见");Sleep(25);}mciSendString("stop mymusic", NULL, 0, NULL);mciSendString("close mymusic", NULL, 0, NULL);cleardevice();closegraph();}
}
///
//主菜单,选择难度
int chushi()
{initgraph(640,480);HCURSOR hcur = (HCURSOR)LoadImage(NULL, "c:\\鼠标.cur", IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE);HWND hwnd = GetHWnd(); // 获取绘图窗口句柄SetClassLong(hwnd, GCL_HCURSOR, (long)hcur); // 设置窗口类的鼠标样式setcolor(GREEN);setfont(80,0,"黑体");outtextxy(200,100,"扫 雷");setfont(30,0,"黑体");outtextxy(450,90,"R"); setcolor(WHITE);setfont(20,0,"黑体");outtextxy(270,250,"1、新游戏");outtextxy(270,280,"2、最高分");outtextxy(270,310,"3、选 项");outtextxy(270,340,"4、帮 助");outtextxy(270,370,"5、退 出");outtextxy(500,410,"by:zmq zzh");outtextxy(500,440,"v:2.0");mciSendString("open 背景音乐.mp3 alias mymusic", NULL, 0, NULL);mciSendString("play mymusic", NULL, 0, NULL);return 0;
}
//
//游戏开始界面,生成格子,着色
void kaishi()
{bulei();biaoji=0;if(wide<=16){n=360/high;mn=360/wide;p=60+n*high;q=60+mn*wide;yy=0;}else{n=360/high;mn=360/16;yy=(wide-16)*mn;initgraph(640+yy,480);}p=60+n*high;q=60+mn*wide;shengyu=0;setlinestyle(PS_SOLID, NULL, 2);setcolor(BLUE);line(60,60,q,60);line(60,p,q,p);line(60,60,60,p);line(q,60,q,p);setfillstyle(RGB(0,0,150));floodfill(70,70,BLUE);setcolor(WHITE);for(float i=60;i<=p;i+=n)line(60,i,q,i);for(i=60;i<=q;i+=mn)line(i,60,i,p);setlinestyle(PS_SOLID, NULL, 10);setcolor(GREEN);line(500+yy,0,500+yy,480);setcolor(WHITE);setfont(20,0,"宋体");outtextxy(510+yy,100,"时 间:0");outtextxy(510+yy,200,"炸弹数:");outtextxy(530+yy,370,"左键开始");outtextxy(530+yy,410,"中键重玩");outtextxy(530+yy,450,"回主菜单");if(wide==9)outtextxy(590+yy,200,"10");if(wide==16)outtextxy(590+yy,200,"40");if(wide==30)outtextxy(590+yy,200,"99");saolei();}//鼠标信息处理(主菜单)
int DispatchMessage(MOUSEMSG m, int opt)
{switch(opt){case USER_LBUTTONDOWN:// 左键if(m.x>=270&&m.x<=370&&m.y>=250&&m.y<=270){flag=0;nandu=1;high=9;wide=9;leishu=10;chuangkzh();kaishi();return 0;}if(m.x>=270&&m.x<=370&&m.y>=280&&m.y<=300){flag=0;chuangkzh();setcolor(GREEN);setfont(25,0,"楷体");outtextxy(150,350,"返回主菜单 重置");setfont(25,0,"黑体");setcolor(WHITE);outtextxy(200,150,"初级:");outtextxy(200,200,"中级:");outtextxy(200,250,"高级:");outtextxy(270,150,zuih[1].name);outtextxy(270,200,zuih[2].name);outtextxy(270,250,zuih[3].name);outtextxy(400,150,zuih[1].t);outtextxy(400,200,zuih[2].t);outtextxy(400,250,zuih[3].t);zuigaofen();}if(m.x>=270&&m.x<=370&&m.y>=310&&m.y<=330){chuangkzh();setcolor(RED);setfont(30,0,"黑体");outtextxy(180,80,"一、初级【 9x 9】");outtextxy(180,180,"二、中级【16x16】");outtextxy(180,280,"三、高级【16x30】");outtextxy(220,380,"返回主菜单");nanduxuanxiang();return 0;}if(m.x>=270&&m.x<=370&&m.y>=340&&m.y<=360){chuangkzh();setbkmode(TRANSPARENT);setfillstyle(WHITE);floodfill(15,15,WHITE);setcolor(BLUE);setfont(50,0,"黑体");outtextxy(245,50,"帮 助");setcolor(BLACK);setfont(20,0,"楷体");outtextxy(120,130,"1、请将《鼠标.cur》文件复制到c盘根目录下");outtextxy(120,160," 再进行游戏,否则可能会影响鼠标效果。");outtextxy(120,190,"2、请将《背景音乐.mp3》同游戏的应用程");outtextxy(120,220," 序员放在一起。可自己更改背景音乐(将音");outtextxy(120,250," 乐改名后更换背景音乐即可)。");outtextxy(120,280,"3、游戏时请勿点击白色表格区域,否则可能会");outtextxy(120,310," 导致失败等不确定情况。");outtextxy(120,340,"4、新手初次编程,游戏中存在漏洞请谅解。");outtextxy(120,370,"5、如有疑问可发送邮件到aszmq@163.com。");setcolor(YELLOW);setfont(40,0,"黑体");outtextxy(270,420,"游戏适度 沉溺伤身");setcolor(RED);setfont(40,0,"隶书");outtextxy(50,420,"返回");setbkmode(OPAQUE);int opt,tiaochu=0;MOUSEMSG m;while(1){m = GetMouseMsg();opt = GetMessage(m);if(opt==USER_LBUTTONDOWN)if(m.x>=50&&m.x<=130&&m.y<=460&&m.y>=420){chuangkzh();main();}} }if(m.x>=270&&m.x<=370&&m.y>=370&&m.y<=390){chuangkzh();return 1;}break;}
return 0;
}
//
//难度选项
int nanduxuanxiang()
{int opt,end=0;MOUSEMSG m;while(end!=1){m = GetMouseMsg();opt = GetMessage(m);end=DispatchMessage3(m, opt);}
return 0;
}
///
//鼠标信息处理(最高分)
void zuigaofen()
{int opt,end=0;MOUSEMSG m;while(end!=1){m = GetMouseMsg();opt = GetMessage(m);if(opt==USER_LBUTTONDOWN){if(m.x>=150&&m.x<=275&&m.y<=375&&m.y>=350){chuangkzh();main();}if(m.x>=435&&m.x<=485&&m.y<=375&&m.y>=350){strcpy(zuih[1].name,"wu");strcpy(zuih[1].t,"999");zuih[1].time=999;strcpy(zuih[2].name,"wu");strcpy(zuih[2].t,"999");zuih[2].time=999;strcpy(zuih[3].name,"wu");strcpy(zuih[3].t,"999");zuih[3].time=999;fp=fopen("best.dat","rb+");for(int i=0;i<4;i++)if(fwrite(&zuih[i],sizeof(besttime),1,fp)!=1)printf("file write error!\n");fclose(fp);chuangkzh();zuigaofen();}elsezuigaofen();}elsezuigaofen();}
}
///
//鼠标处理信息(难度选项)
int DispatchMessage3(MOUSEMSG m, int opt)
{switch(opt){case USER_LBUTTONDOWN:// 左键if(m.x>=180&&m.x<=400&&m.y>=80&&m.y<=110){nandu=1;high=9;wide=9;leishu=10;chuangkzh();kaishi();return 1;}if(m.x>=180&&m.x<=400&&m.y>=180&&m.y<=210){nandu=2;high=16;wide=16;leishu=40;chuangkzh();kaishi();return 1;}if(m.x>=180&&m.x<=400&&m.y>=280&&m.y<=310){nandu=3;high=16;wide=30;leishu=99;chuangkzh();kaishi();return 1;}if(m.x>=220&&m.x<=420&&m.y>=380&&m.y<=410){chuangkzh();main();return 0;}}
}///
//鼠标信息处理(游戏中)
int DispatchMessage2(MOUSEMSG m, int opt)
{switch(opt){case USER_LBUTTONDOWN:// 左键if(m.x>=530+yy&&m.x<=610+yy&&m.y>=450&&m.y<=470){flag=0;chuangkzh();main();}if(m.x>=60&&m.x<=420+yy&&m.y>=60&&m.y<=420){if(flag==0){first=time(NULL);flag=1;}saolz(m);}break;case USER_MBUTTONDOWN:// 中键if(flag==0){first=time(NULL);flag=1;}if(flag==1){second=time(NULL);_stprintf(m_time, _T("%.0lf"), difftime(second,first));setfont(20,0,"黑体");outtextxy(590+yy,100,m_time);if(leishu-biaoji<10&&leishu-biaoji>=0){shenglei[0]=' ';_stprintf(shenglei+1, _T("%d"), leishu-biaoji);}else{_stprintf(shenglei, _T("%d"), leishu-biaoji);}outtextxy(590+yy,200,shenglei);}chuangkzh();kaishi();return 1;break;case USER_RBUTTONDOWN:int x,y;x=(m.x-60)/n+1;y=(m.y-60)/mn+1;if(m.x>=60&&m.x<=420+yy&&m.y>=60&&m.y<=420)if(a[x][y]!=-1){setfillstyle(RED);floodfill(m.x,m.y,WHITE);biaoji++;}saolei();break;}
}//
//窗口变化的简单动画效果
void chuangkzh()
{int lr=0;int i=0,j=640+yy;setlinestyle(PS_SOLID, NULL, 5);while(i!=j){setcolor(WHITE);line(i+5,0,i+5,480);setcolor(BLACK);line(i,0,i,480);Sleep(2);setcolor(WHITE);line(j-5,0,j-5,480);setcolor(BLACK);line(j,0,j,480);Sleep(8);i++;j--;}setcolor(BLACK);line(j+6,0,j+6,480);line(i-4,0,i-4,480);setlinestyle(PS_SOLID, NULL, 1);
}///
// 获取鼠标信息
int GetMessage(MOUSEMSG m)
{//鼠标循环switch(m.uMsg){case WM_LBUTTONDOWN:return USER_LBUTTONDOWN;case WM_RBUTTONDOWN:return USER_RBUTTONDOWN;case WM_MBUTTONDOWN:return USER_MBUTTONDOWN;default:if(flag==1){second=time(NULL);_stprintf(m_time, _T("%.0lf"), difftime(second,first));setfont(20,0,"黑体");outtextxy(590+yy,100,m_time);if(leishu-biaoji<10&&leishu-biaoji>=0){shenglei[0]=' ';_stprintf(shenglei+1, _T("%d"), leishu-biaoji);}else{_stprintf(shenglei, _T("%d"), leishu-biaoji);}outtextxy(590+yy,200,shenglei);}break;}return 0;
}/
//布雷函数
void bulei()
{int x,y;memset(a,0,sizeof(a));srand( (unsigned)time( NULL )*5 );for(int i=1;i<=leishu;i++){x=rand()%wide+1;y=rand()%high+1;if(a[x][y]!=0){i--;continue;}elsea[x][y]=1000;}for(i=1;i<=wide;i++)for(int j=1;j<=high;j++){if(a[i][j]==1000)continue;else{a[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1];a[i][j]/=1000;}}}/
//判断是否为雷函数
void panduan()
{ int C=255;char s[10];zuih[0].time=difftime(second,first);setfont(150,0,"黑体");if(shengyu==high*wide-leishu){chuangkzh();for(int i=0;i<128;i++){setcolor(RGB(C,0,0));outtextxy(170+yy/2,200,"胜利");C-=8;if(C<=0)C=255;Sleep(20);}if(zuih[0].time<zuih[nandu].time)InputBox(zuih[0].name,8,"最高分\n输入用户名※英文字母※");strcpy(zuih[nandu].name,zuih[0].name);zuih[nandu].time=zuih[0].time;_stprintf(zuih[nandu].t, _T("%.0lf"), zuih[nandu].time);fp=fopen("best.dat","rb+");fseek(fp,nandu*sizeof(besttime),0);fwrite(&zuih[nandu],sizeof(besttime),1,fp);fclose(fp);flag=0;chuangkzh();kaishi();}else{chuangkzh();for(int i=0;i<128;i++){setcolor(RGB(C,0,0));outtextxy(170+yy/2,200,"失败");C-=8;if(C<=0)C=255;Sleep(20);}flag=0;chuangkzh();kaishi();}
}//
//扫雷执行函数
int saolei()
{if(shengyu==high*wide-leishu)panduan();int opt,end=0;MOUSEMSG m;while(1){if(flag==1){second=time(NULL);_stprintf(m_time, _T("%.0lf"), difftime(second,first));setfont(20,0,"黑体");outtextxy(590+yy,100,m_time);if(leishu-biaoji<10&&leishu-biaoji>=0){shenglei[0]=' ';_stprintf(shenglei+1, _T("%d"), leishu-biaoji);}else{_stprintf(shenglei, _T("%d"), leishu-biaoji);}outtextxy(590+yy,200,shenglei);}if(MouseHit()){while(end!=1){m = GetMouseMsg();int x,y;x=(m.x-60)/n+1;y=(m.y-60)/mn+1;if(a[x][y]==-1)saolei();opt = GetMessage(m);end=DispatchMessage2(m, opt);}}}
return 0;
}///
//扫雷中操作
int saolz(MOUSEMSG m)
{int x,y,zero=0;int x1,y1;x=(m.x-60)/n+1;y=(m.y-60)/mn+1;if(a[x][y]==-1)saolei();setfillstyle(BLACK);floodfill((x-1)*n+63,(y-1)*mn+63,WHITE);setfont(n-2,0,"黑体");switch(a[x][y]){case 0:a[x][y]=-1;shengyu++;zerodg(x,y);break;case 1:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"1");shengyu++;break;case 2:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"2");shengyu++;break;case 3:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"3");shengyu++;break;case 4:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"4");shengyu++;break;case 5:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"5");shengyu++;break;case 6:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"6");shengyu++;break;case 7:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"7");shengyu++;break;case 8:setcolor(WHITE);outtextxy((x-1)*n+60+n/4,(y-1)*mn+61,"8");shengyu++;break;default:setfillstyle(RED);floodfill(m.x,m.y,WHITE);panduan();break;}a[x][y]=-1;saolei();return 0;
}//zero递归
int zerodg(int x,int y)
{for(int j=y-1;j<y+2;j++)for(int i=x-1;i<x+2;i++)if(i==x&&j==y||j<1||i<1||i>wide||j>high)continue;else{//Sleep(50);setfillstyle(BLACK);floodfill((i-1)*n+63,(j-1)*mn+63,WHITE);switch(a[i][j]){case 0:a[i][j]=-1;shengyu++;zerodg(i,j);break;case 1:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"1");shengyu++;break;case 2:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"2");shengyu++;break;case 3:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"3");shengyu++;break;case 4:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"4");shengyu++;break;case 5:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"5");shengyu++;break;case 6:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"6");shengyu++;break;case 7:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"7");shengyu++;break;case 8:setcolor(WHITE);outtextxy((i-1)*n+60+n/4,(j-1)*mn+61,"8");shengyu++;break;case -1:break;}a[i][j]=-1;}return 0;
}
课程设计一共两个星期,扫雷要图形界面和鼠标,前一个星期基本啥也没看,合计学习下传说中的api啊~~MFC啊~~~结果都木有成功……
后来发现了easyX……好东西啊!(其实就是把TC的图形库graphics转到了vc中)……
课程设计扫雷(c语言)相关推荐
- 扫雷java讲解_java课程设计(扫雷游戏)讲解.doc
java课程设计(扫雷游戏)讲解.doc 成 绩 评 定 表 学生姓名班级学号 专 业课程设计题目基于Java的扫雷游戏软件设计评 语 组长签字: 成绩 日期 2014 年 月 日 课程设计任务书 学 ...
- c语言链表p-%3enext,课程设计报告.c语言程序设计.pdf
课程设计报告.c语言程序设计 学生成绩管理 C语言课程设计报告 学 院 _信息学院_ 专 业 软件工程 班 级 _ _ 学 号 姓 名 课 题 _C语言课程设计_ 指导教师 __ 杨老师 _ 报告成绩 ...
- FPGA课程设计使用VHDL语言
下面是FPGA的课程设计 使用VHDL语言,有程序和报告
- dsp课程设计c语言源码,DSP课程设计-基于C语言实现256点的FFT精选.pdf
DSP课程设计-基于C语言实现256点的FFT精选 XX 大学 J1111111 UNIVERSITY DSP 课 程 设 计 基于CCS 的FFT 算法的C 语言实现和验证 学院名称: 专业班级: ...
- c语言编写万年历课程设计,用C语言编写万年历 C课程设计.pdf
用C语言编写万年历 C课程设计 用用 C++语言编写万年历语言编写万年历 用用 语言编写万年历语言编写万年历 学生姓名:学生姓名: 指导老师:指导老师: 学生姓名学生姓名:: 指导老师指导老师:: 摘 ...
- 计算机程序设计基础课程设计(C语言)[2023-02-28]
计算机程序设计基础课程设计(C语言)[2023-02-28] 计算机程序设计基础课程设计(C语言) 设计任务书 指导专业:机械电子工程 指导教师:高峰 仲惟燕 机械电子工程学院 二〇二二年十二月 &l ...
- 基于c语言单片机秒表课程设计,基于c语言单片机秒表课程设计要点.doc
课程设计报告 课程名称:单片机原理及应用 报告题目:秒表 学生姓名: 所在学院:信息科学与工程学院 专业班级: 学生学号: 指导教师: 2013 年 12 月 25 日 课程设计任务书 报告题目秒表完 ...
- 计算机专业课程设计报告c语言,计算机程序设计(C语言)课程设计报告.doc
计算机程序设计(C语言)课程设计报告.doc 计算机程序设计C语言课程设计报告题目电子动画时钟 学院 机电工程学院专业 班级090109班学号 姓名 指导教师 设计日期 一.概述选题背景 随着社会的进 ...
- c语言课程设计2018,C语言课程设计报告(2018)——学生管理系统(17页)-原创力文档...
兰州交通大学博文学院 <C语言程序设计> 课 程 设 计 报 告 系 别: 交通运输系 班 级: 16交通运输(3)班 姓 名: 学 号: 指导老师: 2018年1月5日 兰州交通大学博文 ...
最新文章
- Android消息机制Handler用法
- NEU 1040 Count
- linux下删除有锁的文件夹,Linux 文件夹右下角有锁,解锁
- 用vue.js写的一个瀑布流的组件
- 字符串 hash 唯一数字_【数字课堂】酒妹带你了解“身份认证技术”
- 单值二叉树:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。
- document.referrer已经可以用于统计搜索来源
- 11个炫酷的Linux终端命令大全
- 服务器系统2003资源监视器在哪里,Win10资源监视器在哪 如何打开资源监视器
- 计算机网络(一)图解:计算机网络五层体系结构
- Linux#使用ll命令
- 联想服务器能够上固态硬盘吗,拯救我的台式机:Lenovo 联想 固态硬盘 入手记
- MATLAB---制作动画并演示
- Windows下常用网络命令
- 从人力资源管理的角度看孙悟空大闹天宫
- Http请求状态码:905
- Android Architecture(Is Activity God?)
- 关于STM32中SPI硬件的NSS配置
- 研究生常用的几种风险评估方法-专家调查法、蒙特卡洛模拟法、计划评审技术、敏感性分析法、决策树法、影响图法、模糊综合评价方法
- Linux下Awk详解(转载)
热门文章
- 竞争性关键词推荐算法设计(中南大学电子商务课程实践)
- 【软件工具】服务器硬件资源监控
- framework是什么东西?
- 美国最极端的经典教育
- 【自考】网络经济与企业管理(一)——泛读
- 通过Ajax批量上传图片(springboot)
- python集合操作 读取_对python读写文件去重、RE、set的使用详解
- jpa dialect设置
- S5CL:通过分层对比学习统一全监督、自监督和半监督学习
- nc63,nc65,ncc1811,ncc1903,ncc1909,ncc2005,ncc202111勒索病毒安全补丁