俄罗斯方块 C课程设计论文报告_第1页
俄罗斯方块 C课程设计论文报告_第2页
俄罗斯方块 C课程设计论文报告_第3页
俄罗斯方块 C课程设计论文报告_第4页
俄罗斯方块 C课程设计论文报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、辽 宁 工 业 大 学 C语言程序设计 课程设计(论文)题目: 俄罗斯方块游戏 院(系): 软件学院 专业班级: 电子商务112班 学 号: 111401043 学生姓名: 张欢廷 指导教师: 武志刚 教师职称: 讲师 起止时间: 2011.12.05至2011.12.18 课程设计(报告)任务及评语院(系):软件学院 教研室:软件教研窒学 号111401043学生姓名张欢廷专业班级电子商务112班程序设计(报告)题目机房收费管理系统程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。(2)较熟练地编写C语言应用程序。(3)了解C语言的常用标准函数、编程技巧、异常处理。(

2、5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2011 年 12 月 22 日目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计

3、内容22.1课程设计题目22.2课程设计整体设计说明2课程设计内容2系统功能模块结构图2数据结构设计及用法说明2程序结构(画流程图)2各模块的功能22.3程序源代码及注释2第3章 课程设计总结3参考资料4第1章 课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能

4、力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。1.3 课程设计的预备知识熟悉C语言及C语言开发工具。1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章 课程设计内容2.1程序功能介绍1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为10,列高为20,以每个小正方形为单位。 2、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、

5、Z、L、J、I、O、T这7个字母的形状来命名。 I:一次最多消除四层 J(左右):最多消除三层,或消除二层 L:最多消除三层,或消除二层 O:消除一至二层 S(左右):最多二层,容易造成孔洞 Z (左右):最多二层,容易造成孔洞 T:最多二层2.2程序整体设计说明(1)部分游戏有单格方块,可以穿透固定的方块到达最下层空位。其他的改版中出现更多特别的造型。 方块会从区域上方开始缓慢继续落下。 (2)玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。 (3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。 (4

6、)当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。同时删除的列数越多,得分指数上升。 (5)当固定的方块堆到区域最上方而无法消除层数时,则游戏结束2.2.1设计思路1. 按游戏界面的开始按钮或者F2键来开始游戏,自己使用右边的窗口,对手使用左边的窗口。 俄罗斯方块2. 键盘操作:系统缺省设置使用右边的窗口,用光标操作,左移一格;右移一格;旋转方块; 方块丢下(方块下落到底),End健可以一格格的下落,用户还可以自定义习惯的按键来操作游戏。 3. 计分牌显示的内容: “分数”为双方本局的分数,计分标准为下落一个块10分,一次消一行100分、2行200分、3行400分、4行80

7、0分。 “等级”为双方的游戏设置等级,当分数达到一定的值,等级就会提升、速度加快。 “行数”第一行为双方消的行数,第二行是送给对方的行数。 “比分”为双方赢的局数。2.2.2数据结构设计及用法说明 ,3、通过设计者预先设置的随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响。 4、如果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是20或者玩家所能见到的高度

8、),则游戏结束。2.2.3程序结构(流程图)2.2.4各模块的功能及程序说明2.2.5程序结果2.3程序源代码及注释#include graphics.h /*头文件*/ #include time.h #include stdlib.h #include bios.h #include dos.h #include stdio.h #define ESC 0x11b /*键盘扫描码*/ #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4b00 #define F1 0x3b00 #define RIGHT 0x4d00 #define

9、 YES 0x1579 #define NO 0x316e #define RESTART 0x1372 struct diamond /*记录每种方块每种状态的信息*/ int x4; int y4; int start_x; int start_y; int color; struct diamond *next; ; int grid1223; /*记录所有格子的状态 (0)没有方块 (1)有固定方块 (2)有活动方块*/ int x; /*活动方块所在位置*/ int y; int level; /*游戏难度*/ int count; /*计数器*/ int score;/*得分*/

10、struct diamond *nowinfo; /*当前活动方块*/ struct diamond *nextinfo; /*下一个方块*/ int color;/*画格子的颜色*/ int backcolor;/*游戏区域背景色*/ void show_interface (int mode);/*显示游戏界面*/ void show_copsign (int topx,int topy,int size,int color);/*显示公司标志-恒基伟业*/ void show_intro (int xs,int ys);/*显示软件介绍区*/ /*void print(); 测试用函数*

11、/ void scandel();/*扫描所有格子看是否有可消除行*/ void show_down ();/*方块下落后的下一个状态*/ void show_next ();/*方块翻转后的下一个状态*/ void show_left ();/*方块向左移动后的下一个状态*/ void show_right ();/*方块向右移动后的下一个状态*/ void interrupt (*oldtimer)();/*指向未安装前的中断向量,即函数指针,指向一段可执行的代码*/ void install();/*安装新的中断向量,即将中断服务程序安装到中断向量表中*/ void interrupt

12、newtimer();/*中断服务程序*/ struct diamond *get_diamond();/*随机得到一个方块*/ struct diamond *create_I();/*函数用来构造各种类形方块的环形链表*/ struct diamond *create_T();/*返回链表中随机一个状态的指针*/ struct diamond *create_L(); struct diamond *create_J(); struct diamond *create_Z(); struct diamond *create_N(); struct diamond *create_H();

13、void delinfo (struct diamond *info);/*释放当前方块所占用的空间*/ void addtobuffer(int c);/*向键盘缓冲区中增加一个DOWN*/ /*void clrkey();调用dos中断清空键盘缓冲区,未使用此方法.*/ void showsubwin(struct diamond *next);/*在小窗口显示下一个方块*/ void showscore(int scoreget);/*显示分数*/ void startset();/*初始化游戏*/ main () int nowy; int i;/*计数器*/ int j; int h

14、aveit;/*当前格子是否已经显示*/ struct diamond *next;/*当前方块的翻转后的下一个状态*/ next=nowinfo-next; if (next=NULL) gotoxy(1,1);printf(null); for (i=0;ixy+next-y=1) return; setfillstyle(SOLID_FILL,backcolor);/*设置背景色以消除不需要的格子*/ for (i=0;i=3;i+) haveit=0; for (j=0;jxj=nowinfo-x&next-yj=nowinfo-y) haveit=1;break; if (havei

15、t=0) /*判断翻转后该格子是否显示,若不显示,将该格子设为背景色*/ gridx+nowinfo-xy+nowinfo-y=0; if (y+nowinfo-y=4)/*判断该格子是否到了可以显示的区域*/ floodfill(80+(nowinfo-x+x)*20+1,-20+(nowinfo-y+y)*20+1,color); nowinfo=next; nowx=x; nowy=y; setfillstyle(SOLID_FILL,nowinfo-color);/*设置填冲色为方块的颜色*/ for (i=0;ixy+nowinfo-y!=2)/*如果该格子还没有被显示*/ nowx

16、=x+nowinfo-x; nowy=y+nowinfo-y; if (y+nowinfo-y=4) floodfill(80+nowx*20+1,-20+nowy*20+1,color); gridnowxnowy=2; /*设置该格子当前有活动方块*/ return; void show_left () int i;/*计数器*/ int j; int haveit;/*当前格子是否已经显示*/ int nowx;/*记录当前每个格子的位置*/ int nowy; for (i=0;ixy+nowinfo-y=1) return; setfillstyle(SOLID_FILL,backc

17、olor);/*设置背景色以消除不需要的格子*/ for (i=0;i=3;i+) haveit=0; for (j=0;jx=nowinfo-xj-1&nowinfo-y=nowinfo-yj) haveit=1;break; if (haveit=0) /*判断翻转后该格子是否显示,若不显示,将该格子设为背景色*/ gridx+nowinfo-xy+nowinfo-y=0; if (y+nowinfo-y=4)/*判断该格子是否到了可以显示的区域*/ floodfill(80+(nowinfo-x+x)*20+1,-20+(nowinfo-y+y)*20+1,color); setfill

18、style(SOLID_FILL,nowinfo-color);/*设置填冲色为方块的颜色*/ for (i=0;ix-1; nowy=y+nowinfo-y; if (gridnowxnowy!=2)/*如果该格子还没有被显示*/ if (nowy=4) if (gridnowxnowy!=2) if (nowy=4)/*判断该格子是否到了可以显示的区域*/ floodfill(80+nowx*20+1,-20+nowy*20+1,color); gridnowxnowy=2; x=x+1; return; void show_down () int i;/*计数器*/ int j; int

19、 haveit;/*当前格子是否已经显示*/ int nowx;/*记录当前每个格子的位置*/ int nowy; int key; for (i=0;ixy+nowinfo-y+1=1)/*判断方块是否能够下落*/ for (j=0;jxjy+nowinfo-yj=1; if (y+nowinfo-yj=3) /*判断游戏是否已经玩完*/ install(oldtimer); setfillstyle(SOLID_FILL,1); bar(0,465,640,480); outtextxy(5,469,Do you want to restart (Y/N).); for (;)key=bi

20、oskey(0); if (key=YES) startset(); setfillstyle(SOLID_FILL,9); bar(0,465,640,480); return; if (key=NO) closegraph(); exit (0); gridnowxnowy=2; y=y+1; return; /*void print()测试用函数 int i; int j; gotoxy(1,1); for (j=0;j=22;j+) for (i=0;i=4;k-) num=0; for (i=1;inext; next=info-next; while(next!=info) nex

21、t=now-next; free(now); now=next; free(info); void addtobuffer(int c)/*向键盘缓冲区中增加一个DOWN*/ unsigned i; i=*(unsigned far *)0x0040001CL; *(unsigned far *)(0x00400000L | i)=c; i+=2; if (i=*(unsigned far *)0x00400082L) i=*(unsigned far *)0x00400080L; *(unsigned far *)0x0040001CL=i; /*void clrkey()调用dos中断清空

22、键盘缓冲区,未使用此方法. union REGS in ; in.h.ah = 0x0c ; in.h.al = 0x00 ; intdos(&in , &in) ; */ void showsubwin(struct diamond *next) int i;/*计数器*/ int j; setfillstyle (SOLID_FILL,backcolor); for (i=0;i=3;i+) for(j=0;jcolor); for (i=0;ix*20,81+next-y*20,color); void showscore(int scoreget) char sscore6; char

23、 slevel2; score+=scoreget; if (score1000) level=score/100+1; sprintf(sscore,%d,score); sprintf(slevel,%d,level); setfillstyle(SOLID_FILL,9); bar(406,179,490,203); setcolor(14); outtextxy (408,180,slevel); outtextxy (408,195,sscore); void startset() int i; int j; setfillstyle(SOLID_FILL,backcolor); for(i=0;i=21;i+)/*重新初始化*/ for(j=1;j=4) floodfill(80+j*20+1,-20+i*20+1,color); score=0; showscore(0); nowinfo=get_diamond ();/*得到一个当前方块*/ x=nowinfo-start_x;/*初始化方块位置*/ y=nowinfo-start_y; ne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论