C语言课程设计(扫雷游戏)报告 .doc

上传人:仙人指路1688 文档编号:2384832 上传时间:2023-02-17 格式:DOC 页数:47 大小:317KB
返回 下载 相关 举报
C语言课程设计(扫雷游戏)报告 .doc_第1页
第1页 / 共47页
C语言课程设计(扫雷游戏)报告 .doc_第2页
第2页 / 共47页
C语言课程设计(扫雷游戏)报告 .doc_第3页
第3页 / 共47页
C语言课程设计(扫雷游戏)报告 .doc_第4页
第4页 / 共47页
C语言课程设计(扫雷游戏)报告 .doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《C语言课程设计(扫雷游戏)报告 .doc》由会员分享,可在线阅读,更多相关《C语言课程设计(扫雷游戏)报告 .doc(47页珍藏版)》请在三一办公上搜索。

1、程序设计基础课程设计扫雷游戏 院 系: 计算机科学技术学院软件工程系 班 级: 姓 名: 学 号: 合 作 者: 指导教师: 2009 年 6 月 28日程序设计基础课程设计任务书一、题目:扫雷游戏二、设计要求(1) (组长)、 和 组成课程设计小组。(2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。(3)查阅相关资料,自学具体课题中涉及到的新知识。(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。(5)所设计的系统应有菜单、动画和音乐。(6)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师

2、评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。课程设计报告的撰写请参照程序设计基础课程设计指导书中的2.5节。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。四、课程设计工作计划2009年6月15日前,指导教师讲课,学生根据题目准备资料,需求分析;2009年6月15日,设计小组进行总体方案设计和任务分工;2009年6月17日2009年6月23日,每人完成自己承担的程序模块并通过独立编译;2009年6月24日2009年6月25日,将各模块集成为一个完整的

3、系统,并录入足够的数据进行调试运行;2009年6月26日6月30日,验收、开始撰写课程设计报告;2009年7月3日前,提交课程设计报告和软件。 指导教师签章: 教研室主任签章 程序设计基础课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2009年 1月 日目 录一 概 述.51.1软件系统概述.51.1.1开发的软件系统的题目:扫雷游戏.51.2课程设计目的 .51.3 课程设计具体要求.5二软件需求分析6三总体方案设计6四详细设计.7五程序的调试与运行结果说明14六课程设计总结.17七结束语 17困难及解决

4、途径:.17心得体会.17八 程序清单.18全部代码及注释.18九 参考文献.47一 概述1.1软件系统概述1.1.1开发的软件系统的题目:扫雷游戏.1.1.2运行环境:WIN-TC.1.1.3功能:我们的游戏可以玩扫雷.1.1.4特点:此游戏具有登陆系统,可输入密码确保安全性,界面美观具有标题栏,菜单,难度选择,排行榜,游戏成功和失败都有不同的音乐和动画。1.1.5规模:我们的程序共计1176行,我负责360行,我负责的模块是一个音乐、开机动画的一部分和五个函数.1. 2课程设计的目的a. 通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固C语言程序设计课程学

5、习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了C语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!b. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。1.3 课程设计的具体要求游戏和功能上尽量模拟windows操作系统中的扫雷游戏,系统界面尽量美观,求有声音提示,难度选择和排行榜。我们是在WINDOWS-XP下进行的。根据

6、此设计题目要求我们意识到在此程序中应会有一些关于画图的程序,声音程序,鼠标的设置程序.对于排行榜还应有一些数组、文件方面的知识.所以我们需要查一下这些方面的知识。我们的老师除了要我们做这个游戏程序以外还要求我们每个人都有自己的音乐和动画。.二 软件需求分析对于我们的软件系统-扫雷游戏,我们应该把界面弄得尽量美观,因为只有美观玩的人才能有兴趣往下玩,所以在画界面时应该往美观与整洁方面努力.同时我们还应该把排行榜弄好,因为具有排行榜才能使玩家更有兴趣去玩.我们还应该设一些难度选择,以供提高玩者欲望.对于那个鼠标的控制应该设置的灵活,只有这样别人才会选你的软件。另外,在游戏成功与失败时分别有不同的音

7、乐与动画,使玩者心情舒畅,想继续挑战下一难度级别的扫雷。三 总体方案设计扫雷游戏是供人玩的游戏,所以界面尽量美观,有难度选择和排行榜。特点: 功能的模块化设计,方便对其系统的完善,提高了程序的可读性。整体框图如下: 登陆(输入密码,姓名)游戏界面功能选择菜单难度选择排行榜开始退出易中难注:游戏成功时 音乐二动画三 游戏失败时 音乐三动画三音乐一动画二音乐一动画一姓名分数四 详细设计*这是我设计的动画部分和音乐,动画(另一部分在 那里)是我和 共同完成,音乐为真心英雄,三朵小花代表我和两个组员,主要表现了不经历风雨,如何见彩虹的理念。接下来是进入登陆界面,首先输入密码,密码为abc(可以改成任意

8、9个字符),有三次输入机会,输入正确时继续输入姓名,输入错误密码时退出该系统,未完 待续我的程序部分代码:void interrupt(*handler)();void interrupt music(); int fr=262,262,262,262,294,330,440,392,330,392,392,392, 523,523,523,523,523,523,330,330,392,523,523,523,523,523, 392,392,392,330,330,294,262,294,294,294,294,294,294,294,330,294,262,294, 262,262,26

9、2,262,294,330,440,392,330,392,392,523,523,523,523,523, 523,330,440,392,392,523,523,523,523,523,440,392,392,440,330, 330,294,262,262,294,294,294,330,330,392,294,330,262,262; int tim=4,4,4,4,4,4,4,4,4,8,2,2,2,2,2,2,4,4,4,4,12,4,4,4,4,8, 4,4,4,4,2,6,2,2,2,2,2,2,4,2,2,4,12,4,4,4,4,4,4,4,4,4,8,4,2,2,2,2,

10、2,2,4, 4,4,4,12,4,4,2,2,8,4,4,4,2,2,2,2,4,2,2,4,4,2,2,4,4,2,2,12,12;/*此音乐为 真心英雄*/void interrupt music() /* 音乐中断函数*/ static int flag=0,note=0,fre,dur; if(flag=(int)(dur*2) flag=0; nosound(); fre=frnote; dur=timnote; sound(fre); note+; if(note=88)note=0; handler(); flag+;void donghua() int gdriver=DET

11、ECT,gmode,i=0,j,k,k1,x,s,en,r,x1,y1; initgraph(&gdriver,&gmode,c:win-tcprojects); handler=getvect(0x1c); /* 调用中断函数,来实现音乐与动画同步*/ setvect(0x1c,music); setcolor(RED); setfillstyle(SOLID_FILL,4); /*绘画太阳与云朵*/ circle(90,90,40); floodfill(89,89,4); setcolor(15); setfillstyle(SOLID_FILL,15); fillellipse(210

12、,90,28,48); fillellipse(190,90,80,24); floodfill(200,95,15); for(j=160;j=480;j+=160) /*绘画小花的茎和叶子*/ setcolor(GREEN); line(j-1,380,j-1,480); line(j,380,j,480); line(j+1,380,j+1,480); setfillstyle(SOLID_FILL,GREEN); fillellipse(j-30,450,30,15); setcolor(BROWN); line(j-60,450,j,450); for(k=0;k=3;k+) /*此

13、部分为绘画小花,通过循环控制颜色变化,来实现动画*/ for(i=0;i=10;i+) for(j=160;j=480;j+=160) setcolor(i%16); setfillstyle(SOLID_FILL,(i+7)%16); circle(j,378,17); floodfill(j,378,i%16); setfillstyle(SOLID_FILL,(i+1)%16); circle(j,339,21); floodfill(j,339,i%16); setfillstyle(SOLID_FILL,(i+2)%16); circle(j-34,365,21); floodfil

14、l(j-34,365,i%16); setfillstyle(SOLID_FILL,(i+5)%16); circle(j+34,365,21); floodfill(j+34,365,i%16); setfillstyle(SOLID_FILL,(i+3)%16); circle(j-24,406,21); floodfill(j-24,406,i%16); setfillstyle(SOLID_FILL,(i+4)%16); circle(j+24,406,21); floodfill(j+24,406,i%16); settextstyle(0,0,4);/*为图形输出设置当前的文本属性

15、横向和竖向,0为横向排列,1为竖向排列。 size 为字体大小:可用interger做参数*/ setcolor(7); outtextxy(120,180,Welcome to play); /*在指定位置显示一字符串*/ setcolor(14); outtextxy(118,178,Welcome to play);/*输出Welcome to play our game!*/ setcolor(7); outtextxy(140,240,our game!); /*在指定位置显示一字符串*/ setcolor(14); outtextxy(138,238,our game!); del

16、ay(800000); setvect(0x1c,handler); nosound(); /*停止音乐*/ closegraph(); /*关闭图形模式,以便进入文本模式输入文本*/void deng_lu() /*此函数为登陆界面函数,在开始动画音乐结束时出现,输入密码为abc,有三次输入机会,输入正确时继续输入姓名,输入错误密码时退出该系统*/ char q10,qq10=abc; int i,ii=1,j,k; textcolor(YELLOW); for(j=0;jdifftime(second,first) /*打破记录情况*/ peonn.time=difftime(second

17、,first); gotoxy(40,22); printf(You break the corse!); for(i=0;pi!=0;i+) peonn.namei=pi; peonn.namei=0; if(nn=0) /* nn=0表示为 易,nn=1表示为 中,nn=2表示为 难*/ fp=fopen(filea,wb); else if(nn=1) fp=fopen(fileb,wb); else if(nn=2) fp=fopen(filec,wb); fwrite(&peonn,sizeof(struct people),1,fp); /*读入文件,存入磁盘*/ fclose(f

18、p); else /*没打破纪录情况*/ gotoxy(40,23); printf(You dont break the corse); void fopenfp() /*点击排行榜时打开文件,输出姓名与分数,此函数在full_window函数中调用*/ fp=fopen(filea,rb); /*打开文件进行读写*/ fread(&peo0,sizeof(struct people),1,fp); gotoxy(15,4); /*将光标移到该位置*/ printf(%-20s,peo0.name); /*从文件中调用结构体*/ printf(%.0f,peo0.time); close(f

19、p); /*关闭文件*/ fp=fopen(fileb,rb); fread(&peo1,sizeof(struct people),1,fp); gotoxy(15,5); printf(%-20s,peo1.name); printf(%.0f,peo1.time); close(fp); fp=fopen(filec,rb); fread(&peo2,sizeof(struct people),1,fp); gotoxy(15,6); printf(%-20s,peo2.name); printf(%.0f,peo2.time); close(fp);void ha_mouse() /*

20、此函数为鼠标函数,通过获取鼠标位置来判断点击功能选择的哪一部分,然后执行各个功能*/ int i,j,k,x=-1,y=-1,flag=0,color; int tx1,ty1,tx2,ty2,tbx; int new_x=ha_x,new_y=ha_y; union REGS inregs,outregs,regs2;/*执行intr_num号中断,用户定义的寄存器值存于结构inregs中, 执行完后将返回的寄存器值存于结构outregs中*/ inregs.x.ax=0x03;/*获取鼠标位置和状态也可以用3*/ while(!bioskey(1) /*直接使用BIOS服务的键盘接口*/

21、int86(0x33,&inregs,&outregs);/*调用鼠标中断,通用8086软中断接口 */ regs2.x.ax=0x06; regs2.x.bx=0x00; int86(0x33,®s2,®s2);/*CX水平位置(最后释放时),DX垂直位置(最后释放时)*/ tx2=regs2.x.cx;/*cx寄存器中存的是横坐标*/ ty2=regs2.x.dx;/*dx寄存器中存的是列坐标*/ if(x!=outregs.x.cx | y!=outregs.x.dx | tbx!=outregs.x.bx) if(flag) for(j=0;j10;j+)/*恢复上次鼠标一

22、定范围内的像素颜色*/ for(i=0;i=639-19 & outregs.x.cx=1 & outregs.x.dx=1 & outregs.x.cx=21 & outregs.x.dx=33 & outregs.x.cx=21 & outregs.x.dx=65 & outregs.x.cx=21 & outregs.x.dx=(ha_x+ha_x+2+mx*10)/2-16 &outregs.x.cx=(ha_y+ha_y-30)/2-9 & outregs.x.dx=new_x & outregs.x.cx+new_y-30 & outregs.x.dx=new_y) / *拖动扫雷

23、图标扫雷*/ if(tg=0) 扫雷部分存储 tg+; for(j=0;j=1+my*10+1+30;j+) for(i=0;i=new_x & x=new_y-30 & y=new_x & x=new_y-30 & y=new_y) tg=0; ha_x=new_x; ha_y=new_y; for(j=0;j=1+my*10+1+30;j+) for(i=0;i=2 & outregs.x.cx=40 & outregs.x.dx=34 & outregs.x.cx=40 & outregs.x.dx=65 & outregs.x.cx=40 & outregs.x.dx=0 & ty2-ha_y-2=0 & (tx2-ha_x-2)/10=0 & (tx2-ha_x-2)/10=0 & (ty2-ha_y-2)/10=m

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号