欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

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

    • 资源ID:2384832       资源大小:317KB        全文页数:47页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    程序设计基础课程设计扫雷游戏 院 系: 计算机科学技术学院软件工程系 班 级: 姓 名: 学 号: 合 作 者: 指导教师: 2009 年 6 月 28日程序设计基础课程设计任务书一、题目:扫雷游戏二、设计要求(1) (组长)、 和 组成课程设计小组。(2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。(3)查阅相关资料,自学具体课题中涉及到的新知识。(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。(5)所设计的系统应有菜单、动画和音乐。(6)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。课程设计报告的撰写请参照程序设计基础课程设计指导书中的2.5节。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。四、课程设计工作计划2009年6月15日前,指导教师讲课,学生根据题目准备资料,需求分析;2009年6月15日,设计小组进行总体方案设计和任务分工;2009年6月17日2009年6月23日,每人完成自己承担的程序模块并通过独立编译;2009年6月24日2009年6月25日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;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困难及解决途径:.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语言程序设计课程学习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了C语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!b. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。1.3 课程设计的具体要求游戏和功能上尽量模拟windows操作系统中的扫雷游戏,系统界面尽量美观,求有声音提示,难度选择和排行榜。我们是在WINDOWS-XP下进行的。根据此设计题目要求我们意识到在此程序中应会有一些关于画图的程序,声音程序,鼠标的设置程序.对于排行榜还应有一些数组、文件方面的知识.所以我们需要查一下这些方面的知识。我们的老师除了要我们做这个游戏程序以外还要求我们每个人都有自己的音乐和动画。.二 软件需求分析对于我们的软件系统-扫雷游戏,我们应该把界面弄得尽量美观,因为只有美观玩的人才能有兴趣往下玩,所以在画界面时应该往美观与整洁方面努力.同时我们还应该把排行榜弄好,因为具有排行榜才能使玩家更有兴趣去玩.我们还应该设一些难度选择,以供提高玩者欲望.对于那个鼠标的控制应该设置的灵活,只有这样别人才会选你的软件。另外,在游戏成功与失败时分别有不同的音乐与动画,使玩者心情舒畅,想继续挑战下一难度级别的扫雷。三 总体方案设计扫雷游戏是供人玩的游戏,所以界面尽量美观,有难度选择和排行榜。特点: 功能的模块化设计,方便对其系统的完善,提高了程序的可读性。整体框图如下: 登陆(输入密码,姓名)游戏界面功能选择菜单难度选择排行榜开始退出易中难注:游戏成功时 音乐二动画三 游戏失败时 音乐三动画三音乐一动画二音乐一动画一姓名分数四 详细设计*这是我设计的动画部分和音乐,动画(另一部分在 那里)是我和 共同完成,音乐为真心英雄,三朵小花代表我和两个组员,主要表现了不经历风雨,如何见彩虹的理念。接下来是进入登陆界面,首先输入密码,密码为abc(可以改成任意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,262,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,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=DETECT,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,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+) /*此部分为绘画小花,通过循环控制颜色变化,来实现动画*/ 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); floodfill(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);/*为图形输出设置当前的文本属性横向和竖向,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!"); delay(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;j<3;j+) cprintf("rnrnrn Please input password:"); for(i=0;(qi=getch()!='r'i+) if(i=9) break; else printf("*"); for(k=0;qqk!='0'k+) if(qk!=qqk) cprintf("rn Your password is wrong!"); break; else ii=0; if(ii=0) break; textcolor(LIGHTCYAN); if(ii=0) cprintf("rnrnrn Please input your name:"); gets(p); else cprintf("rnrn SORRY!YOU MUST EXIT!"); getch(); exit(0); void break_score() /*此函数为当游戏胜利时判断是否打破记录,如果打破记录,将姓名和分数存入磁盘中,以便下次点击排行榜时输出,如果没打破纪录,也同样有提示输出此函数在win函数中调用,另外在initmap()地图初始化函数中有first=time(NULL);语句和在win()函数中有second=time(NULL);语句,以便调用difftime()函数*/ int i; if(peonn.time>difftime(second,first) /*打破记录情况*/ peonn.time=difftime(second,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(fp); else /*没打破纪录情况*/ gotoxy(40,23); printf("You don't 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(fp); /*关闭文件*/ 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() /*此函数为鼠标函数,通过获取鼠标位置来判断点击功能选择的哪一部分,然后执行各个功能*/ 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服务的键盘接口*/ int86(0x33,&inregs,&outregs);/*调用鼠标中断,通用8086软中断接口 */ regs2.x.ax=0x06; regs2.x.bx=0x00; int86(0x33,&regs2,&regs2);/*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;j<10;j+)/*恢复上次鼠标一定范围内的像素颜色*/ for(i=0;i<6;i+) putpixel(x+i,y+j,reji);/*在指定位置画一像素*/ flag=1; /*=扩充功能部分*/ if(outregs.x.bx & 0x01)/*鼠标左键按下-鼠标点击判断*/ if(outregs.x.cx>=639-19 && outregs.x.cx<=638 && outregs.x.dx>=1 && outregs.x.dx<=18)exit(0);/*关闭按钮 判断鼠标在此坐标范围内退出*/ else if(outregs.x.cx>=1 && outregs.x.cx<=32 && outregs.x.dx>=21 && outregs.x.dx<=38) /*主菜单-游戏*/ if(n1=-1) m_save(); /*调用函数*/ else if(n1=1) m_load(); /*调用函数*/ n1=0; n2=-1; menu_window(); else if(outregs.x.cx>=33 && outregs.x.cx<=64 && outregs.x.dx>=21 && outregs.x.dx<=38) /*主菜单-难度*/ if(n1=-1 )m_save(); else if(n1=0) m_load(); n1=1; n2=-1; menu_window(); else if(outregs.x.cx>=65 && outregs.x.cx<=96 && outregs.x.dx>=21 && outregs.x.dx<=38)/*主菜单-排行榜*/ if(n1=-1)m_save(); else if(n1=2)m_load(); n1=2; n2=-1; menu_window(); else if(n1=0 && n2=1) exit(0); /*开局*/ else if(n1=0 && n2=0) | (outregs.x.cx>=(ha_x+ha_x+2+mx*10)/2-16 &&outregs.x.cx<=(ha_x+ha_x+2+mx*10)/2+16&&outregs.x.dx>=(ha_y+ha_y-30)/2-9 && outregs.x.dx<=(ha_y+ha_y-30)/2+8)/*开局*/ dead=0;/*生*/ n1=-1; m_load(); initmap(); else if(n1=1 && n2=0)/*易*/ dead=0;/*生*/ n1=-1; m_load(); hard=0; initmap(); else if(n1=1 && n2=1)/*中*/ dead=0;/*生*/ n1=-1; m_load(); hard=1; initmap(); else if(n1=1 && n2=2)/*难*/ dead=0;/*生*/ n1=-1; m_load(); hard=2; initmap(); /* else if(outregs.x.cx>=new_x && outregs.x.cx<=new_x+1+mx*10+1 && outregs.x.dx>+new_y-30 && outregs.x.dx<=new_y) / *拖动扫雷图标扫雷*/ if(tg=0) 扫雷部分存储 tg+; for(j=0;j<=1+my*10+1+30;j+) for(i=0;i<=mx*10+2;i+) tgraphji=getpixel(ha_x+i,ha_y+j-30); if(tbx&1 && x>=new_x && x<=new_x+1+mx*10+1 && y>=new_y-30 && y<=new_y) setcolor(YELLOW); rectangle(new_x,new_y-29,new_x+1+mx*10,new_y+1+my*10);/* 画一个矩形,void far rectangle(int left, int top, int right, int bottom); */ rectangle(new_x,new_y-30,new_x+1+mx*10+1,new_y+1+my*10+1); new_x+=outregs.x.cx-x; new_y+=outregs.x.dx-y; tg=2; else if(tg=2 && x>=new_x && x<=new_x+1+mx*10+1 && y>=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<=mx*10+2;i+) putpixel(ha_x+i,ha_y+j-30,tgraphji); */ else/*没有点击到按钮*/ if(n1!=-1)m_load(); n1=n2=-1; menu_window(); if(n1=0 && outregs.x.cx>=2 && outregs.x.cx<=31 && outregs.x.dx>=40 && outregs.x.dx<=75)/*游戏下级菜单操作*/ n2=(outregs.x.dx-40)/18; menu_window(); if(n1=1 && outregs.x.cx>=34 && outregs.x.cx<=52 && outregs.x.dx>=40 && outregs.x.dx<=93)/*难度下级菜单操作*/ n2=(outregs.x.dx-40)/18; menu_window(); if(n1=2 && outregs.x.cx>=65 && outregs.x.cx<=93 && outregs.x.dx>=40 && outregs.x.dx<=111)/*排行榜下级菜单操作*/ n2=(outregs.x.dx-40)/18; menu_window(); /*-左键点击控制部分*/ if(tx2-ha_x-2>=0 && ty2-ha_y-2>=0 && (tx2-ha_x-2)/10>=0 && (tx2-ha_x-2)/10<=mx-1 && (ty2-ha_y-2)/10>=0 && (ty2-ha_y-2)/10<=m

    注意事项

    本文(C语言课程设计(扫雷游戏)报告 .doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开