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

    13070036 段杰 小狼课设报告.doc

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

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

    13070036 段杰 小狼课设报告.doc

    小狼下100层 学 号 13070036姓 名 段杰指导教师 陈彩 2014年4月目录小狼下100层1目录21 需求分析31.1功能与数据需求31.1.1 显示用户界面31.1.2打开音乐31.1.5 计分31.1.6 键盘操作31.1.7按钮操作31.2 界面需求41.2.1输入用户名界面。41.2.2游戏界面51.2.3 结束界面51.3 开发与运行环境61.4 其他方面需求62 概要设计62.1 主要数据结构72.2 程序总体结构83 详细设计83.1主要函数流程图83.2板的生成和删除94 测试104.1 游戏开启测试104.2 游戏运行测试104.2.1边界测试105 用户手册115.1 应用程序功能的详细说明115.2 应用程序运行环境的要求115.3 应用程序的安装与运行方法115.4 程序界面、交互方式和操作方法116 总结提高126.1课程设计总结126.2对本课程意见与建议13附录:源代码141 需求分析小狼下100层,每下一层木板分数增加,木板不停生成。死亡后记录积分并排名。1.1功能与数据需求 程序功能:输入用户名、生成游戏界面、开始游戏、计分、保存、游戏开始及退出、排行榜、结束、键盘及鼠标操作。1.1.1 显示用户界面利用drawInterface和drawMenu和drawButton绘制游戏界面利用drawwolf,drawStep画出狼和板。1.1.2打开音乐 显示开始界面之后,利用playsound打开音乐并播放音乐 1.1.4按开始键游戏开始游戏进入游戏界面,画好界面,信息显示区和控制区,产生狼和板,狼接触边界则游戏失败。记录得分之后显示排行榜。1.1.5 计分 狼每下一层算5分,接触板后才进行分数增加。1.1.6 键盘操作可控制狼的方向1.1.7按钮操作游戏有开始、暂停和结束键,可以暂停和退出游戏。游戏中退出不记录积分。1.2 界面需求游戏界面:进行游戏结束界面:排行榜显示 1.2.1输入用户名界面。 记录用户信息。1.2.2游戏界面游戏时的界面1.2.3 结束界面 按游戏结束的界面。1.3 开发与运行环境 本游戏开发环境为vc+6.0 ,运行环境为vc+6.0 环境 添加EasyX库 使用预编译的头文件,选择不使用补偿页眉1.4 其他方面需求 Vc+6.0上要安装easyx软件2 概要设计 2.1 主要数据结构 struct Coordinate int x; int y;/坐标struct personchar name20;int score;/玩家信息struct Step Coordinate cor; int length; / 长度 stepType StepType; / 台阶类型 int n; / 第几阶 Step *nextNode; / 下一结点; / 用来存储台阶的链表struct Wolf Coordinate cor; / 坐标 int life; / 待定 int State; / 1:在台子上;2:往下掉 IMAGE img;2.2 程序总体结构void initInterface(Coordinate but , buttonState butsta); / 初始化void drawInterface(Coordinate but , buttonState butsta); / 界面void drawMenu(Coordinate but , buttonState butsta); / 菜单void drawButton(Coordinate cd , buttonState butSta , char *text); / 按钮void drawMessage(char *name , int score , int time ); / 信息void drawStep(Step *step); / 台阶void drawWolf(Wolf wolf); / 狼void disposeStep(Step *step); / 台阶void CreatStepNode(Step *step); / 创建节点void DeleteStepNode(Step *step); / 删除结点void Next(Step *step , Wolf *wolf); /板和狼下一步计算void DispatchCMD(Wolf *wolf); /停止响应void DispatchKeyboardMessage(Wolf *wolf); void DispatchMouseMessage(); int savescore(person player);/存得分int showscore();/显示排行榜void judge(buttonState butsta, Wolf *wolf , Step *step, int *score,person player);/ 判断void PAUSE();3 详细设计3.1主要函数流程图3.2板的生成和删除4 测试4.1 游戏开启测试 本测试目的: 确定游戏能在PC上正常开启 测试:本游戏能在win7以下的操作系统中运行,高于win7的操作系统暂时还不能运行vc6.0应用程序。确定游戏能够运行时,可将程序代码直接导入到vc+6.0中,并点击运行(run)即可运行此游戏。或者用户确定游戏BGI路径与源代码中的路径相同,则可直接双击游戏的EXE文件,也可运行游戏。4.2 游戏运行测试4.2.1边界测试本测试目的: 确定游戏界面中的边界处是否可以正常运行 测试:用户进入游戏后,按照用户手册可进行测试,查看兔子到边界处是否能够正常使用 按开始键开始 按 狼开始动 到边界处是否正常运动 板能否正常生成 图形是否有缺损 游戏中是否有隐藏的bug 经测试,游戏运行正常。4.2.2按钮测试本测试目的:测试暂停,退出,结束键是否可以正常使用测试:用户进入游戏后,按照用户手册可进行测试。按开始键,待游戏开始后按暂停键暂停,再按继续键继续,结束键结束本盘游戏,再按开始键开始,再按退出键退出游戏。看游戏是否可按预设的那样执行。经测试,游戏运行正常。5 用户手册5.1 应用程序功能的详细说明本应用程序名为“层下100层”是一款能在在vc+6.0环境下运行的益智小游戏。使用于win7,等操作系统。游戏主题是一个狼在不断生成并上升的木板中下降。触碰到游戏壁则死亡,记录游戏积分并排行 5.2 应用程序运行环境的要求 本游戏开发环境为vc+6.0,运行环境为vc+6.0 环境生成可执行文件后可以用windows7,windows X等系统运行。5.3 应用程序的安装与运行方法 本益智小游戏不需要安装,玩家可将程序代码直接导入到vc+6.0环境中,并点击编译,运行,即可运行此游戏。或者用户确定游戏BGI路径与源代码中的路径相同,则可直接双击游戏的EXE文件,也可运行游戏。5.4 程序界面、交互方式和操作方法按钮区域游戏信息狼板 6 总结提高6.1课程设计总结这次C语言课程设计,我收获很大,本来上学期c语言学的就比较基础,在加上自己课下练习不够,起初,做课设很是费劲,不知道从何下手,后来跟着easyx上的教程一步一步的学,渐渐有了点信心,通过学习网上别人介绍的方法,和看别人编的小程序,心里才渐渐有些想法。通过一段时间的学习,我发现其实编游戏也不是很难,重要的是要有想法,思路清晰之后再开始编,会更快更好。而且在设计时要分块写,调用方便而且改起来也方便。有的时候,总是找不到错误在哪里,真的想放弃。但是现在回想起来,如果那时放弃那么又怎能开发出来呢。通过这次的的课设,我想编程既要有头脑,又要有耐心,遇到问题时,应及时与同学,老师交流,或者想放一放干些别的,也许事情就可解决。编程并不可一蹴而就,是一个慢慢学习理解的过程,不能着急,耐心一点。但是也要注意时间的掌握,要合理安排课设的时间。在本次设计中,我觉得自己在c语言中复杂问题的处理上有了很大提高,对整体结构的把握上也有了一定的提升。而且我觉得自己应多学习高级的算法,使自己的程序更加系统,更便于理解。这次的程序设计,我更要感谢老师和同学的帮助,在大家的帮助下我才能完成此次课设。6.2对本课程意见与建议 我希望课设能安排几节来是讲一讲怎么做游戏,先讲一讲基础的知识,再让我们做,这样可以节约很多时间。 我希望能够在最后几周,多安排几次答疑时间,以便更好地解决我们的问题。 附录:源代码#include <conio.h>#include <graphics.h>#include <time.h>#include <stdio.h>#include<windows.h>#pragma comment(lib,"winmm.lib")#define SPEED#define step_wide 30 / 台阶的厚度#define BUTTON_HEIGHT 50 / 按钮的高#define BUTTON_WEIGHT 80 / 按钮的宽度#define level 10 /难度【流畅度】/enum gameStateReady = 1,Run = 2,Pause = 3,Exit = 0;/游戏运行状态enum buttonStateavailable,notavailable,selected;/按钮的状态,可选.不可选,被选中enum stepTypeSafe,Spine,HEAD;/struct Coordinate int x; int y;struct personchar name20;int score;struct Step Coordinate cor; / 坐标 int length; / 长度 stepType StepType; / 台阶类型 int n; / 第几阶 Step *nextNode; / 下一结点; / 用来存储台阶的链表struct Wolf Coordinate cor; / 坐标 int life; / 待定 int State; / 1:在台子上;2:往下掉 IMAGE img;gameState GameSta = Ready; / 绘制界面void initInterface(Coordinate but , buttonState butsta); / 初始化void drawInterface(Coordinate but , buttonState butsta); / 界面void drawMenu(Coordinate but , buttonState butsta); / 菜单void drawButton(Coordinate cd , buttonState butSta , char *text); / 按钮void drawMessage(char *name , int score , int time ); / 信息void drawStep(Step *step); / 台阶void drawWolf(Wolf wolf); / 狼void disposeStep(Step *step); / 台阶void CreatStepNode(Step *step); / 创建节点void DeleteStepNode(Step *step); / 删除结点void Next(Step *step , Wolf *wolf); void DispatchCMD(Wolf *wolf); void DispatchKeyboardMessage(Wolf *wolf); void DispatchMouseMessage(); int savescore(person player);int showscore();/ 判断void judge(buttonState butsta, Wolf *wolf , Step *step, int *score,person player);void PAUSE();int main() char sScore20; person player; Coordinate but3; buttonState butsta3; char PlayerID20 = "NULL" int Score = 0; int Time = 0; Wolf wolf;/ 初始化链表 Step step; step.cor.x = 0; step.cor.y = 0; step.n = 0; step.length = 0; step.StepType = HEAD; step.nextNode = NULL; initInterface(but,butsta); initgraph(640, 480); InputBox(player.name, 10, "输入用户名" , "开始"); setbkcolor(WHITE); settextcolor(BLACK); outtextxy(340,420,player.name); PlaySound("bgm1.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP); srand(unsigned)time(NULL); /初始化界面,图形界面,随机数种子 BeginBatchDraw(); loadimage(&wolf.img, _T("picwolf.jpg"),30,30); while(GameSta) if( Ready = GameSta ) Score = 0; DeleteStepNode(&step); cleardevice(); drawInterface(but,butsta); FlushBatchDraw(); CreatStepNode(&step); / 狼 wolf.cor.x = step.nextNode->cor.x + step.nextNode->length/2-30; wolf.cor.y = step.nextNode->cor.y-30; wolf.State = 1; while( Ready = GameSta) DispatchMouseMessage(); cleardevice(); while(Pause = GameSta) DispatchMouseMessage(); DispatchCMD( &wolf ); drawInterface( but,butsta ); / 刷新界面 disposeStep( &step ); drawStep(&step); drawWolf(wolf); char sss ="用户名:" outtextxy(525,240,sss); outtextxy(525,290,player.name); outtextxy(525,340,sScore); FlushBatchDraw(); judge( butsta , &wolf , &step , &Score, player); sprintf(sScore,"得分:%d",Score); Sleep( level ); Next( &step , &wolf ); / 关闭 closegraph(); PAUSE(); getch(); return 0;void initInterface(Coordinate but , buttonState butsta) / 按钮位置状态 for(int i = 0 ; i < 3 ; i+) buti.x = 535; buti.y = 20 + i * 90; butstai = available; void drawInterface(Coordinate but , buttonState butsta) / 设置字体 settextstyle(22,0,"楷体",0,0,FW_BLACK,false,false,false); / 显示按钮 drawMenu(but,butsta); setcolor(BLACK); line(520,0,520,480); line(520,220,640,220);void drawMenu(Coordinate but , buttonState butsta) / 输出按钮信息 switch(GameSta) case Ready: drawButton(but0,butsta0,"开 始"); drawButton(but1,butsta1,"退 出"); break; case Run: drawButton(but0,butsta0,"暂 停"); drawButton(but1,butsta1,"退 出"); break; case Pause: drawButton(but0,butsta0,"继 续"); drawButton(but1,butsta1,"退 出"); break; /实时输出游戏数据void drawButton(Coordinate cd , buttonState butSta , char *text) / 设置不同状态的按钮颜色 switch(butSta) case available:setfillcolor( RED );break; case notavailable:setfillcolor( BLACK );break; case selected:setfillcolor( GREEN );break; setfillstyle( BS_SOLID ); solidrectangle( cd.x , cd.y , cd.x + BUTTON_WEIGHT , cd.y + BUTTON_HEIGHT ); setbkmode(TRANSPARENT); outtextxy(cd.x + 12 , cd.y + 20 , text);void drawStep(Step *step) Step *p = step->nextNode; while(NULL != p) fillrectangle(p->cor.x , p->cor.y , p->cor.x+p->length , p->cor.y+step_wide); p = p->nextNode; /画板void drawWolf(Wolf wolf) putimage(wolf.cor.x,wolf.cor.y, &wolf.img); /画狼void disposeStep(Step *step) Step *p; p = step; while( NULL != p->nextNode ) p = p->nextNode; if(p->cor.y <= 430) CreatStepNode(step); DeleteStepNode(step);void CreatStepNode(Step *step) Step *p , *q ; q = step; if(NULL = step->nextNode) p = (Step*)malloc(sizeof(Step); p->cor.x = rand()%100 +190; p->cor.y = 240; p->length = 100; p->n = 0; p->StepType = Safe; p->nextNode = NULL; step->nextNode = p; /生成新的板的信息 else while(q->nextNode != NULL) q = q->nextNode; p = (Step*)malloc(sizeof(Step); p->length = rand()%70 + 110; p->cor.x = rand()%(520-p->length)/3)*3; p->cor.y = (q->cor.y + (rand()&50) + 60); p->n = q->n + 1; p->StepType = Safe; p->nextNode = NULL; q->nextNode = p; void DeleteStepNode(Step *step)/删除链表 Step *p, *q; q = step; p = q; if( NULL = step->nextNode) return ; else while( NULL != p->nextNode ) p = p->nextNode; if(p->cor.y <= -step_wide) if( NULL != p->nextNode) q->nextNode = p->nextNode; delete(p); p = q; else q->nextNode = NULL; delete(p); return ; q = p; if( Ready = GameSta ) p = step->nextNode; step->nextNode = NULL; while( NULL != p ) q = p; p = p->nextNode; delete(q); void Next(Step *step , Wolf *wolf) Step *p = step; while( NULL != p ) p->cor.y -= 1; p = p->nextNode; if( 1 = wolf->State ) wolf->cor.y -= 1; if( 2 = wolf->State ) wolf->cor.y += 2; void DispatchCMD(Wolf *wolf) DispatchKeyboardMessage(wolf); DispatchMouseMessage(); void DispatchKeyboardMessage(Wolf *wolf) /获取及处理键盘输入 if(GetAsyncKeyState(VK_LEFT) & 0x8000) if(wolf->cor.x > 3) wolf->cor.x -= 2; if(GetAsyncKeyState(VK_UP) & 0x8000) if(GetAsyncKeyState(VK_RIGHT) & 0x8000) if(wolf->cor.x < 477) wolf->cor.x += 2; if(GetAsyncKeyState(VK_DOWN) & 0x8000) void DispatchMouseMessage() / 获取及处理鼠标信息 if(MouseHit() MOUSEMSG m; m = GetMouseMsg(); if(m.mkLButton) if(m.x>=535&&m.x<=615&&m.y>=20&&m.y<=80) switch(GameSta) case Ready: GameSta = Run;break; case Run: GameSta = Pause;break; case Pause: GameSta = Run;break; else if(m.x>=535&&m.x<=615&&m.y>=110&&m.y<=170) if (Ready = GameSta) exit(0); else GameSta = Ready; void PAUSE()system("pause");void judge(buttonState butsta, Wolf *wolf , Step *step , int *score,person player) / 根据游戏运行状态调整按钮是否可选 switch(GameSta) case Ready: butsta2 = available; break; case Run: butsta2 = notavailable; break; case Pause: butsta2 = notavailable; break; / settextstyle(22,0,"楷体",0,0,FW_BLACK,false,false,false); char sscore10; Step *p; p = step->nextNode; while(NULL != p) if(wolf->cor.y >= p->cor.y - 33 && wolf->cor.y <= p->cor.y-30) if(wolf->cor.x >= p->cor.x -30 && wolf->cor.x <= (p->cor.x+p->length) if( 2 = wolf->State) *score = p->n *5; wolf->State = 1; break; else wolf->State = 2; p = p->nextNode; if(wolf->cor.y >= 480 | wolf->cor.y <= 0) cleardevice(); int a=*score; player.score = *score; itoa(*score,sscore,10); outtextxy(250,120," 游戏结束 "); outtextxy(250,150,"按任意键返回!"); outtextxy(250,180,"得分为:"); outtextxy(340,180,sscore); savescore(player); showscore(); FlushBatchDraw(); system("Pause"); GameSta = Ready; /int savescore(person player)FILE *in,*out;int i=0;/新开一个数组存储前5名的玩家信息person rank5;/用来排序的中间数组person m,n;out=fopen("savedate.txt","r");if( out=NULL )outtextxy(300,220,"出错");return -1;while(!feof(out) fscanf(out, "%s%d",ranki.name, &ranki.score);i+;fclose(out);for(i=0;i<5;i+)if(player.score>ranki.score)m.score=ranki.score;strcpy(m.name,ranki.name);n.score=m.score;strcpy(n.name,m.name);ranki.score=player.score;strcpy(ranki.name,player.name);break;for(i=0;i<5;i+)m.score=n.score;strcpy(m.name,n.name);if(m.score>ranki.score)n.score=ranki.score;strcpy(n.name,ranki.name); ranki.score=m.score; strcpy(ranki.name,m.name);/将读取与玩家成绩对比再次写入in=fopen("savedate.txt","w");if( in=NULL )outtextxy(300,220,"出错");return -1;for(i=0;i<5;i+)fprintf(in,"%s %dn",ranki.name,ranki.score);fclose(in);return 0;int showscore()int text_y=300;person rank5;FILE *out;char player_text40;settextcolor(BLACK);setfont(30, 0, "楷体");out=fopen("savedate.txt","r");if( out=NULL )outtextxy(300,220,"出错");return -1;for(int i=0;i<5;i+) fscanf(out, "%s%d",ranki.name, &ranki.score);sprintf(player_text,"第%d名 玩家%s 分数%d",i+1,ranki.name,ranki.score);outtextxy(110,text_y,player_text);text_y+=30;fclose(out);return 0;

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开