版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PAGE C语言的三维数组的应用 姓 名: 杜晓伟 学 号: 105030540037 班 级: 103511 指导老师: 张 印 2012年05月29日 c语言程序设计课程期末论文 I 目 录 TOC o 1-3 h z u HYPERLINK l _Toc325838209 1.概述: PAGEREF _Toc325838209 h 1 HYPERLINK l _Toc325838210 1.1俄罗斯方块的题目的描述 PAGEREF _Toc325838210 h 1 HYPERLINK l _Toc325838211 1.2俄罗斯方块的设计思想 PAGEREF _Toc325838211
2、 h 1 HYPERLINK l _Toc325838212 1.3开发环境: PAGEREF _Toc325838212 h 2 HYPERLINK l _Toc325838213 1.3.1硬件环境 PAGEREF _Toc325838213 h 2 HYPERLINK l _Toc325838214 1.3.2软件环境 PAGEREF _Toc325838214 h 2 HYPERLINK l _Toc325838215 2.总体设计 PAGEREF _Toc325838215 h 2 HYPERLINK l _Toc325838216 2.1开发与设计的总体思想 PAGEREF _To
3、c325838216 h 2 HYPERLINK l _Toc325838217 2.2模块设计 PAGEREF _Toc325838217 h 3 HYPERLINK l _Toc325838218 2.2.1主要模块: PAGEREF _Toc325838218 h 3 HYPERLINK l _Toc325838219 2.2.2 按键及功能对照表 : PAGEREF _Toc325838219 h 3 HYPERLINK l _Toc325838220 2.2.3主要函数名称以及功能表: PAGEREF _Toc325838220 h 3 HYPERLINK l _Toc3258382
4、21 2.3模块设计小结 PAGEREF _Toc325838221 h 4 HYPERLINK l _Toc325838222 3.实验结果分析及程序代码 PAGEREF _Toc325838222 h 4 HYPERLINK l _Toc325838223 4、结果分析: PAGEREF _Toc325838223 h 23 c语言程序设计课程期末论文 【摘要】:利用程序语言C语言编写一个俄罗斯方块游戏,加深对程序入口、出口的理解和编制,掌握数组的运用,以及对知识的拓展。【关键字】:C语言; 俄罗斯方块,;三维数组1.概述:1.1俄罗斯方块的题目的描述运行游戏时.界面随机的产生不同形状的方
5、块,游戏者通过自己的操作使方块进行合理的堆积.如果每层达到饱和状态的时候会自动消除.然后游戏有规则的进行加分.分数达到一定的阶段.游戏的级别也会越来越高.然后方块下降的速度也会随之慢慢加快.以迎合游戏者的挑战,达到最加有趣的游戏!1.2俄罗斯方块的设计思想游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我们在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。 从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,利用三维数组每个方块含有各自的状态,变换只需改变到下一个状态就行了,完全可以用数组来实现(不用写旋转算法了:)比如:/*
6、方块类型为 */char244 B1=0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0 ,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0 ;含两种状态,每个状态是一个4*4数组,为1表示实心,为0表示空心.因此我们总共设计了7种造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个预览窗体中提前展示形状供用户参考,然后将展示的形状复制到游戏窗体中进行摆放,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,其中,方块向下的速度是有时钟控件控制的,
7、在游戏中,用户也可以使用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用if 语句对分数判断,达到一定的积分就可以升级到下一个档次。 俄罗斯方块游戏设计的主要步骤为以下几个方面: 1.游戏界面的设计。 2.俄罗斯方块的造型。 3.俄罗斯方块的旋转。 4.俄罗斯方块的运动情况(包括向左,向右和向下)。 5.俄罗斯方块的自动消行功能。 6.游戏级别的自由选择。 7.游戏速度的自由选择。 8.游戏得分的计算。 9.游戏菜单选项的设计及功能实现。1.3开发环境:1.3.1硬件环境一台电脑386,486,586及兼容机以上,包括键盘、鼠标,最小硬盘空间1G,内存M以上
8、。 1.3.2软件环境本系统的设计采用的是C语言开发,Windows操作系统,win-tc v1.9.1以上2.总体设计2.1开发与设计的总体思想程序的设计方法是采用结构化程序设计方法,用c语言进行开发。2.2模块设计2.2.1主要模块:先画出主要窗口界面,由外边框、盒状收缩,百页窗效果、主题字及功能函数组成。根据函数顺序来完成相应功能,进入游戏(先建立游戏界面,屏幕提示选择按任意键开始游戏,);游戏规则(满一行加一分);最后是工作人员(显示小组人员名单后返回主界面);最后按任意键结束整个游戏系统。2.2.2 按键及功能对照表 :名 称 作用Up 上键变形Down 下键下落Esc 退出Ente
9、r 暂停Left 左移 Right 右移 Space 直速下落2.2.3主要函数名称以及功能表:函数函数作用说明boxrad()随机得到当前方块和下个方块的形状和方向init()初始化图形模式cls()在图形模式下的清屏clscr()在图形模式下的高级清屏minbox()最小方块的绘制box()最小方块的高级绘制txt()游戏中出现的文字win()界面的绘制re90()把方块的方向旋转fx个90度(fx最大等于3)funbox()当前方块的绘制nextfunbox()下一个方块的绘制interrupt newhandler()时间中断定义delcol()由于游戏的规则,消掉都有最小方块的一行*
10、numgochar()把数字转换为字符串delete()消掉所有都有最小方块的行KillTimer()时间中断结束downok()测试当前方块是否可以向下落leftok()测试当前方块是否可以向左行rightok()测试当前方块是否可以向右行upok()测试当前方块是否可以变形setgril()当前方块落下之后,给屏幕坐标作标记gameover()游戏结束call_key()按键的设置timezd()时间中断开始byc()百叶窗函数hzss()盒状收缩代码show_word()调用点阵函数,在指定位置上输出汉字prep_word()开辟内存空间move_word()移动文字main()主程序开
11、始2.3模块设计小结由上述模块分析和设计可知,本游戏的核心模块是主界面模块,图形修饰模块与函数模块均是为其而服务。3.实验结果分析及程序代码#include #include #include #include #include #define MINBOXSIZE 20 /* 最小方块的尺寸 */ #define BGCOLOR 6 /* 背景着色 */ #define GX 200 #define GY 10 #define SJNUM 10000 /* 每当玩家打到一万分等级加一级*/ /* 按键码*/ #define VK_LEFT 0 x4b00 /*左*/#define VK_RI
12、GHT 0 x4d00 /*右*/#define VK_DOWN 0 x5000 /*下*/#define VK_UP 0 x4800 /*上*/#define VK_SPACE 0 x3920 /*空格*/#define VK_ESC 0 x011b /*退出*/#define VK_ENTER 0 x1c0d /*回车*/* 定义俄罗斯方块的方向(我定义他为4种)*/ #define F_DONG 0 /*东*/#define F_NAN 1 /*南*/#define F_XI 2 /*西*/#define F_BEI 3 /*北*/#define NEXTCOL 20 /* 要出的下一个
13、方块的纵坐标*/ #define NEXTROW 12 /* 要出的下一个方块的横坐标*/ #define MAXROW 14 /* 游戏屏幕大小*/ #define MAXCOL 20 #define SCCOL 50 /*游戏屏幕在显示器上的相对位置*/#define SCROW 30 #define X_Z 0 /* 定义方块的形状(共八种)*/ #define X_REZ 1 #define X_7 2 #define X_RE7 3 #define X_I 4 #define X_REI 5 #define X_TIAN 6 #define X_T 7 void *buf; /*定义
14、无类型指针,用于将来指向内存空间*/int gril2216; /* 游戏屏幕坐标*/ int col=1,row=7; /* 当前方块的横纵坐标*/ int boxfx=0,boxgs=0; /* 当前方块的形状和方向*/int nextboxfx,nextboxgs,maxcol=22;/*下一个方块的形状和方向*/ int minboxcolor,nextminboxcolor;/*小方块的颜色,下一个小方块的颜色*/int num=0; /*游戏分*/ int dj=0,gamedj10=18,16,14,12,10,8,6,4,2,1;/* 游戏等级*/ Struct all int
15、 x,y; int fangxiang; /*方向*/int gesu; /*第几个方块*/; /* 以下我用了一个3维数组来纪录方块的最初形状和方向*/ int boxstr844= 0,0,0,0, 0,0,0,0, 0,1,1,0, 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,0,1,1, 0,1,1,0, 0,0,0,0, 0,0,1,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,1,1, 0,0,1,0, 0,0,1,0, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0,
16、1,1,1,1, 0,0,0,0, 0,0,0,0, 0,0,1,1, 0,0,1,1, 0,0,0,0, 0,0,0,0, 0,1,1,1, 0,0,1,0 ; /* 随机得到当前方块和下一个方块的形状和方向*/ void boxrad() minboxcolor=nextminboxcolor; /*下一个方块的颜色*/boxfx=nextboxfx; /*下一个方块的方向*/boxgs=nextboxgs; /*下一个方块是第几个方块*/nextminboxcolor=random(16); /*随机产生下一个方块的颜色*/if(nextminboxcolor=6|nextminboxc
17、olor=7) /*如果颜色是棕色或淡灰色*/nextminboxcolor=9; /*将其改为淡蓝色*/nextboxfx=random(4); /*随机产生下一个方块的方向*/nextboxgs=random(8); /*随机产生下一个方块是第几个方块*/ /*初始化图形模式*/ void init(void)int gh=DETECT,gm=0;int errorcode;registerbgidriver(EGAVGA_driver);initgraph(&gh,&gm, );/* 在图形模式下的清屏 */ void cls() setfillstyle(SOLID_FILL,0);/
18、*以背景颜色实填充*/setcolor(0); bar(0,0,640,480); /*基本图形函数*/ /*在图形模式下的高级清屏*/void clscr(int a,int b,int c,int d,int color) setfillstyle(SOLID_FILL,color); /*以color颜色实填充*/setcolor(color); /*设置当前前景色为color*/bar(a,b,c,d); /*基本图形函数*/ /*最小方块的绘制*/ void minbox(int asc,int bsc,int color) int a=0,b=0; a=SCCOL+asc; /*S
19、CCOL 50,SCROW 30游戏屏幕在显示器上的相对位置*/b=SCROW+bsc; clscr(a+1,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE,color); /* MINBOXSIZE 20最小方块的尺寸 */if(color!=BGCOLOR)/*如果当前色是背景色,将其改为白色*/ setcolor(15); line(a+1,b+1,a-1+MINBOXSIZE,b+1); line(a+1,b+1,a+1,b-1+MINBOXSIZE); setcolor(0);line(a-1+MINBOXSIZE,b+1,a-1+MINBOXSIZE,b-1+M
20、INBOXSIZE);line(a+1,b-1+MINBOXSIZE,a-1+MINBOXSIZE,b-1+MINBOXSIZE); /*最小方块的高级绘制*/ void box(int a,int b,int color)clscr(a+1,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE,color); setcolor(15); line(a+1,b+1,a-1+MINBOXSIZE,b+1); line(a+1,b+1,a+1,b-1+MINBOXSIZE); setcolor(0); line(a-1+MINBOXSIZE,b+1,a-1+MINBOXSIZE,b-
21、1+MINBOXSIZE); line(a+1,b-1+MINBOXSIZE,a-1+MINBOXSIZE,b-1+MINBOXSIZE); /*游戏中出现的文字*/ void txt(int a,int b,char *txt,int font,int color) setcolor(color); settextstyle(0,0,font); outtextxy(a,b,txt); /*windows 绘制*/ void win(int a,int b,int c,int d,int bgcolor,char *text,int font,int textcolor) clscr(a,b
22、,c,d,7); clscr(a+3,b+24,c-3,d-3,bgcolor); clscr(a+3,b+3,c-3,b+20,9); setcolor(15); line(a,b,c,b); line(a,b,a,d); line(a+2,b+21,c-2,b+21); line(c-2,b+2,c-2,b+21); line(a+2,d-2,c-2,d-2); line(c-2,b+23,c-2,d-2); txt(a+5,b+8,text,font,textcolor);setcolor(0); line(a,d,c,d); line(c,b,c,d); line(a+3,b+2,c-
23、3,b+2); line(a+2,b+2,a+2,b+20); line(a+2,b+24,a+2,d-2); line(a+2,b+23,c-3,b+23); /*把方块的方向旋转fx个90度(fx最大等于3)*/ void re90(int boxxy44,int fx) int i,j,k,zero; int a44; for(k=0;kfx;k+) for(i=0;i4;i+) for(j=0;j4;j+) aij=boxxy3-ji; for(i=0;i4;i+) for(j=0;j4;j+) boxxyij=aij; for(i=0;i4;i+) zero=1; for(j=0;j
24、4;j+) if(boxxyj3!=0) zero=0; if(zero) for(j=0;j4;j+) boxxyj3=boxxyj2; boxxyj2=boxxyj1; boxxyj1=boxxyj0; boxxyj0=0; /* 当前方块的绘制*/ void funbox(int a,int b,int color) int i,j; int boxz44; for(i=0;i4;i+) for(j=0;j4;j+) boxzij=boxstrboxgsij; re90(boxz,boxfx); for(i=0;i4;i+) for(j=0;j4;j+) if(boxzij=1) min
25、box(j+row+a)*MINBOXSIZE,(i+col+b)*MINBOXSIZE,color); /*下一个方块的绘制*/ void nextfunbox(int a,int b,int color) int i,j; int boxz44; for(i=0;i4;i+) for(j=0;j4;j+) boxzij=boxstrnextboxgsij; re90(boxz,nextboxfx); for(i=0;i4;i+) for(j=0;j1;i-) for(j=1;j=1;i+) ai=0+ (x % 10); x=x/10; for(j=0;j=i/2;j+) k=aj; aj
26、=ai-j; ai-j=k; ai+1=0; return(a); /*消掉所有都有最小方块的行*/ void delete() int i,j,zero,delgx=0; char *nm; for(i=1;i21;i+) zero=0; for(j=1;j15;j+) if(grilij=0) zero=1; if(zero=0) delcol(i); delgx+; num=num+delgx*delgx*10; dj=num/10000; nm=numgochar(num); clscr(456,173,500,200,BGCOLOR); txt(456,173,Number:,1,1
27、5); txt(456,193,nm,1,15); /*时间中断结束*/ void KillTimer() disable(); setvect(TIMER,oldhandler); enable(); /* 测试当前方块是否可以向下落*/ int downok() int i,j,k=1,a44; for(i=0;i4;i+) for(j=0;j4;j+) aij=boxstrboxgsij; re90(a,boxfx); for(i=0;i4;i+) for(j=0;j4;j+) if(aij & grilcol+i+1row+j) k=0; return(k); /* 测试当前方块是否可
28、以向左行*/ int leftok() int i,j,k=1,a44; for(i=0;i4;i+) for(j=0;j4;j+) aij=boxstrboxgsij; re90(a,boxfx); for(i=0;i4;i+) for(j=0;j4;j+) if(aij & grilcol+irow+j-1) k=0; return(k); /* 测试当前方块是否可以向右行*/ int rightok() int i,j,k=1,a44; for(i=0;i4;i+) for(j=0;j4;j+) aij=boxstrboxgsij; re90(a,boxfx); for(i=0;i4;i
29、+) for(j=0;j4;j+) if(aij & grilcol+irow+j+1) k=0; return(k); /* 测试当前方块是否可以变形*/ int upok() int i,j,k=1,a44; for(i=0;i4;i+) for(j=0;j=0;i-) for(j=3;j=0;j-) if(aij & grilcol+irow+j) k=0; return(k); /*当前方块落下之后,给屏幕坐标作标记*/ void setgril() int i,j,a44; funbox(0,0,minboxcolor); for(i=0;i4;i+) for(j=0;j4;j+)
30、aij=boxstrboxgsij; re90(a,boxfx); for(i=0;i4;i+) for(j=0;j=0;i-) for(j=2;j3) boxfx=0; funbox(0,0,minboxcolor); break; case VK_LEFT: /*左方向键,纵坐标减一*/ if(leftok() row-; funbox(0,0,minboxcolor); break; case VK_RIGHT: /*右方向键,纵坐标加一*/ if(rightok() row+; funbox(0,0,minboxcolor); break; case VK_SPACE: /*空格键,直
31、接落到最后可以落到的们置*/ while(downok() col+; funbox(0,0,minboxcolor); setgril(); nextfunbox(NEXTCOL,NEXTROW,BGCOLOR); boxrad(); nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor); delete(); break; default: win(423,53,620,95,15,Enter Key Error!,1,15);txt(428,80,Plese Enter Anly Key AG!,1,4);getch(); clscr(420,50,622
32、,97,BGCOLOR); /*时间中断开始*/ void timezd(void) int key; SetTimer(newhandler); boxrad(); nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor); for(;) if(bioskey(1) key=bioskey(0); funbox(0,0,BGCOLOR); if(key=VK_ESC) break; call_key(key); if(TimerCountergamedjdj) TimerCounter=0; if(downok() funbox(0,0,BGCOLOR); co
33、l+; funbox(0,0,minboxcolor); else if(col=1) gameover(); getch(); break; setgril(); delete(); funbox(0,0,minboxcolor); col=1;row=7; funbox(0,0,BGCOLOR); nextfunbox(NEXTCOL,NEXTROW,BGCOLOR); boxrad(); nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor); /*百叶窗函数*/void byc(void) int i,j; for(i=0;i40;i+) for(j=0
34、;j640;j= j +40) /*每隔40像素画一条线*/ setcolor(BLUE); /*设置前景色*/ line(j+i,0,j+i,479); delay(500); /*盒状收缩代码*/void hzss(void) int x1=0,y1=0,x2=639,y2=479; setcolor(1); for(;y1=0&y1=0&x2=639&y2=479;x1-,y1-,x2+,y2+) rectangle(x1,y1,x2,y2); delay(1000); void drawmat(char *mat,int matsize,int x,int y,int color)/*
35、汉字点阵输出函数*/ int i,j,k,m; m=(matsize-1)/8+1; for(j=0;jmatsize;j+) for(i=0;im;i+) for(k=0;kk) putpixel(x+i*8+k,y+j,color);char zu48H=/* 以下是 组 的 48点阵黑体 字模,288 byte */ ; char zhang_48H=/* 以下是 长 的 48点阵黑体 字模,288 byte */ ;char dian48H=/* 以下是 : 的 48点阵黑体 字模,288 byte */ ;char yuan_48H=/* 以下是 员 的 48点阵黑体 字模,288
36、byte */ ;char zhang48K=/* 以下是 张 的 48点阵楷体_GB2312 字模,288 byte */ ; char fang48K=/* 以下是 方 的 48点阵楷体_GB2312 字模,288 byte */ ;char yuan48K=/* 以下是 元 的 48点阵楷体_GB2312 字模,288 byte */ ; char jie48K=/* 以下是 解 的 48点阵楷体_GB2312 字模,288 byte */ ; char ying48K=/* 以下是 莹 的 48点阵楷体_GB2312 字模,288 byte */ ;char zhao48K=/* 以下
37、是 赵 的 48点阵楷体_GB2312 字模,288 byte */ ; char jing48K=/* 以下是 静 的 48点阵楷体_GB2312 字模,288 byte */ ;char tao48K=/* 以下是 陶 的 48点阵楷体_GB2312 字模,288 byte */ ;char yuan_48K=/* 以下是 园 的 48点阵楷体_GB2312 字模,288 byte */ ;char huo48K=/* 以下是 霍 的 48点阵楷体_GB2312 字模,288 byte */ ;char shuai48K=/* 以下是 帅 的 48点阵楷体_GB2312 字模,288 by
38、te */ ;char e64H=/* 以下是 俄 的 64点阵黑体 字模,512 byte */ ;char luo64H=/* 以下是 罗 的 64点阵黑体 字模,512 byte */ ; char si64H=/* 以下是 斯 的 64点阵黑体 字模,512 byte */ ;char fang64H=/* 以下是 方 的 64点阵黑体 字模,512 byte */ ;char kuai64H=/* 以下是 块 的 64点阵黑体 字模,512 byte */ ;void youximing(void) int x=80,y=200,color=1,space=100; drawmat(
39、e64H,64,x,y,color); drawmat(luo64H,64,x+=space,y,color); drawmat(si64H,64,x+=space,y,color); drawmat(fang64H,64,x+=space,y,color); drawmat(kuai64H,64,x+=space,y,color); void show_word(void)/*调用点阵函数,在指定位置上输出汉字*/ int x=0,y=0,color=15,space=50; drawmat(zu48H,48,x,y,color); drawmat(zhang_48H,48,x+=space
40、,y,color); drawmat(dian48H,48,x+=space,y,color); drawmat(zhang48K,48,x+=space/2,y,color); drawmat(fang48K,48,x+=space,y,color); drawmat(yuan48K,48,x+=space,y,color); x=0;y=70; drawmat(zu48H,48,x,y,color); drawmat(yuan_48H,48,x+=space,y,color); drawmat(dian48H,48,x+=space,y,color); drawmat(jie48K,48,
41、x+=space/2,y,color); drawmat(ying48K,48,x+=space,y,color); drawmat(ying48K,48,x+=space,y,color); x=0;y=140; drawmat(zhao48K,48,x,y,color); drawmat(jing48K,48,x+=space-10,y,color); drawmat(tao48K,48,x+=space,y,color); drawmat(yuan_48K,48,x+=space-10,y,color); drawmat(huo48K,48,x+=space,y,color); draw
42、mat(shuai48K,48,x+=space-10,y,color);void prep_word(void)/*开辟内存空间*/ unsigned size; cleardevice(); show_word(); size=imagesize(0,0,270,260);/*计算局部图像大小,单位字节*/ while(1) buf=malloc(size); /*在内存中开辟空间,并将返回空间地址*/ if(size!=-1&buf) /*如果开辟成功则退出循环,确保空间的开辟成功*/ break; getimage(0,0,270,260,buf);/*将图像存入buf所指向的内存空间
43、*/void move_word(void) int i; cleardevice();/*在图形模式下清屏*/ sleep(1); /*程序等待1秒*/ for(i=0;i=160;i-) delay(10); putimage(180,i,buf,COPY_PUT); /*将buf所指向的空间内容显示在屏幕的指定位置上*/ setcolor(15); settextstyle(0,0,1); outtextxy(230,360,Any key to continue.); getch();/*主程序开始*/ void main(void) int i,j,color=7; char *nm
44、; init();cls();hzss();/*盒状收缩代码*/*屏幕坐标初始化*/ for(i=0;i=MAXCOL+1;i+) for(j=0;j=MAXROW+1;j+) grilij=0;for(i=0;i=MAXCOL+1;i+) grili0=1; grili15=1; for(j=1;j=MAXROW;j+) gril0j=1; gril21j=1; clscr(0,0,640,480,15);win(1,1,639,479,BGCOLOR,1,15);youximing();getch();win(1,1,639,479,BGCOLOR,1,15);setcolor(color
45、); for(i=0;i=21;i+) for(j=0;j=15;j+) if(grilij=1) box(j*MINBOXSIZE+SCCOL,i*MINBOXSIZE+SCROW,color); nextboxgs=random(8); nextboxfx=random(4); nm=numgochar(num); txt(456,173,Number:,1,15); txt(456,193,nm,1,15); txt(456,243,Next Box:,1,15);timezd(); KillTimer(); byc();/*百叶窗*/prep_word();move_word();cl
46、osegraph(); 4、结果分析:1.此游戏游戏界面清晰,操作简单、易学、有趣。2.此游戏是本人参照学习“二维俄罗斯方块参考文件”和“三维俄罗斯方块算法”总结而来的,较二维数组算法和三维数组算法相比,二维数组算法繁琐、但适合初学者,三维算法清晰易懂,因此本人采用三维数组算法。3.在有些机器上运行不了,或运行一半就死机,可能是机器的DOS版本低,从新安装一个高版本的,问题就能解决。4.如用C语言编程软件运行代码,请用WINTC1.9.1版本;否则程序运行会出错。【参考文献】:1.张磊.C语言程序设计.高等教育出版社.书号.ISBN-7-04-016437-6 X 2.王大刚.语言编程宝典.
47、3.鲁沐浴.C语言最新编程技巧200例.电子工业出版社.1997.1 4.梁翎.李爱齐.C语言程序设计实用技巧与程序实例.上海科普出版社.1996.5 5.陈国章.Turbo C程序设计技巧与应用实例.天津科学技术出版社.1995.5 6.王士元.C高级实用程序设计.清华大学出版社.1996.6 7 .Herbert Schildt.C:The Complete Reference .8 .Brian W. Kernighan .Programming in C - A Tutorial.Bell Laboratories,Murray Hill. N. J 附录资料:不需要的可以自行删除C语
48、言编译环境中的调试功能及常见错误提示调试功能1常用健 : 激活系统菜单: 将光标在编辑窗口和、信息窗口之间切换: 加载一个文件+: 查看程序运行结果: 得到有关编辑器在线帮助+: 得到有关C语言的在线帮助+: 终止正在运行的程序2块操作 KB: 定义块首 KK: 定义块尾 KV: 块移动 KC: 块复制 KY: 块删除 KH: 取消块定义3查找、替换和删除操作 QF: 查找字符串 QA: 查找并替换字符串 Option: G(全程), B(向文件头), N(直接替换) Y : 删除一行 QY: 删除从光标位置到行末的所有字符编译中的常见错误例析(1)警告类错误 XXXdeclare but n
49、ever used 变量XXX已定义但从未用过。 XXXis assigned a value which is never used 变量XXX已赋值但从未用过。 Code has no effect 程序中含有没有实际作用的代码。 Non-portable pointer conversion 不适当的指针转换,可能是在应该使用指针的地方用了一个非0的数值。 Possible use of XXXbefore definition 表达式中使用了未赋值的变量 Redeclaration of main 一个程序文件中主函数main不止一个。 Suspicious pointer conve
50、rsion 可疑的指针转换。通常是使用了基本类型不匹配的指针。 Unreachable code 程序含有不能执行到的代码。(2)错误或致命错误 Compound statement missing in function main 程序结尾缺少括号。 “”expected; “(”expected等 复合语句或数组初始化的结尾缺少“)”;“(”。 Case outside of switch case 不属于Switch结构,多由于switch结构中的花括号不配对所致。 Case statement missing : switch结构中的某个case之后缺少冒号。 Constant exp
51、ression required 定义数组时指定的数组长度不是常量表达式。 Declaration syntax error 结构体或联合类型的定义后缺少分号。 Declaration was expected 缺少说明,通常是因为缺少分界符如逗号、分号、右圆括号等所引起的。 Default outside switch Default部分放到了switch结构之外,一般是因为花括号不匹配而引起的。 do statement must have while do语句中缺少相应的while部分。 Expression syntax 表达式语法错。如表达式中含有两个连续的运算符 Extra par
52、ameter in call fun 调用函数fun时给出了多余的实参。 Function should return a value 函数应该返回一个值,否则与定义时的说明类型不匹配。 Illegal use of pointer 指针被非法引用,一般是使用了非法的指针运算。 Invalid pointer addition 指针相加非法。一个指针(地址)可以和一个整数相加,但两个指针不能相加。 Lvalue required 赋值运算的左边是不能寻址的表达式。 Misplaced else 程序遇到了没有配对的else No matching 表达式中的括号不配对。 Pointer req
53、uired on left side of_ 在“_”运算的左边只能允许一个指针而不能是一个一般的结构体变量或联合类型的变量。 Statement missing; 程序遇到了后面没有分号的语句。 Too few parameters in call 调用某个函数时实参数目不够。 Unable to open include file XXXXXXXXXXX 头文件找不到。 Unexpected 或:或 在不希望的地方使用了或:。 Undefined symbol Xin function fun 函数fun中的变量X没有定义。5.连接中的常见错误主要错误类似于“undefined symbo
54、l _print in modula xxx”(print没有定义),通常是函数名书写错误。6.运行中的常见错误Abnormal program termination 程序异常终止。通常是由于内存使用不当所致。Floating point error : Domain 或Divide by 0 运算结果不是一个数或被0 除Null pointer assignment 对未初始化的指针赋值,程序有严重错误。User break 在运行程序时终止。7.程序的跟踪调试利用Run菜单可以进行程序的跟踪调试(1)GO to Cursor ()选择该选项使程序执行到光标所在行首先将光标移到某行(一般为
55、可执行),选择该功能项,则程序执行到该行的前一行暂停。此时程序处于跟踪调试状态,并有亮条显示在暂停处,此时可以查询变量或表达式的值。(2)Trace into ()执行一条语句或一行暂停此时程序处于跟踪调试状态,并有亮条显示在暂停处。该选项可跟踪到被调函数的内部。(3)Step over ()执行一条语句或一行暂停此时程序处于跟踪调试状态,并有亮条显示在暂停处。该选项将自定义函数当作一个语句执行,不跟踪到函程序的内部。(4)Debug 菜单程序处于跟踪状态时,可使用该菜单的选项。其主要是使用Evaluate目的是查询或更新变量或表达式的值。选择Evaluate功能后,系统弹出一个对话框。该对话
56、框包含三个选项区域:Evaluate域可以输入一个含有目前代码中(程序暂停区的作用域)正在使用的变量名、或含变量的表达式、或常量表达式。按回车键后,在Result域中显示变量或表达式的值。还可以用New value域进行调试。如果调试程序时发现Result域显示的某变量或表达式的值不正确,并能估计出该变量或表达式的值,则可以将该值输入到New value域,继续执行程序,其目的是肯定错误发生处是否在当前位置之前。如果输入这个正确的值并将程序继续执行完毕而结果正确,说明在目前暂停处之前已经发生错误而之后无错误。(5)Break/Watch用于设置断点和监视表达式。选择Add Watch功能选项,
57、系统将弹出一个菜单,在Add Watch框中输入变量名或表达式,按回车键后,系统在屏幕底部开辟一个窗口并显示 该变量或表达式的值。【常见错误信息语句索引】Ambiguous operators need parentheses:不明确的运算需要用括号括起 Ambiguous symbol xxx :不明确的符号 Argument list syntax error:参数表语法错误 Array bounds missing in function main 缺少数组界限符 Array bounds missing :丢失数组界限符 Array size too large :数组尺寸太大 Bad
58、 character in paramenters :参数中有不适当的字符 Bad file name format in include directive :包含命令中文件名格式不正确 Bad ifdef directive synatax :编译预处理ifdef有语法错 Bad undef directive syntax :编译预处理undef有语法错 Bit field too large :位字段太长 Call of non-function :调用未定义的函数 Call to function with no prototype :调用函数时没有函数的说明 Cannot modi
59、fy a const object :不允许修改常量对象 Case outside of switch :漏掉了case 语句 Case syntax error :Case 语法错误 Code has no effect :代码不可述不可能执行到 Compound statement missing :分程序漏掉 Conflicting type modifiers :不明确的类型说明符 Constant expression required :要求常量表达式 Constant out of range in comparison :在比较中常量超出范围 Conversion may lo
60、se significant digits :转换时会丢失意义的数字 Conversion of near pointer not allowed :不允许转换近指针 Could not find file xxx :找不到XXX文件 Declaration missing ; :说明缺少; Declaration syntax error :说明中出现语法错误 Default outside of switch :Default 出现在switch语句之外 Define directive needs an identifier :定义编译预处理需要标识符 Division by zero
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 通义千问GEO推广优化:如何实现推广获客力与品牌AI可见度双增长
- 前交叉韧带重建术后康复护理
- 放射性肠炎并发肠梗阻的护理
- 新员工安全教育培训
- 2025年江苏常州机电职业技术学院招聘考试真题
- 2025年盐津县公安局招聘警务辅助人员真题
- 2025年河源连平县医共体总医院连平县人民医院招聘真题
- 2026年嘉兴桐乡市卫生健康局下属部分事业单位招聘医学类专业人才26人笔试备考试题及答案解析
- 2026广东肇庆市广宁县畜牧兽医局招聘兽医协管员笔试参考题库及答案解析
- 融资职业规划策略
- 2026重庆联合产权交易所集团股份有限公司招聘13人考试备考试题及答案解析
- 2026中国文创产品市场消费趋势与商业模式创新研究报告
- 2026中考语文试题分类汇编《作文》练习题
- 2026年辽宁省二级建造师继续教育复习真题AB卷附答案详解
- 2025年冀人版三年级科学下册全套测试卷新版
- 带状疱疹临床路径完整版
- 智慧工地方案施工方案(3篇)
- 北京2025年国家艺术基金管理中心招聘应届毕业生笔试历年参考题库附带答案详解(5卷)
- 《安全预评价提供基础资料清单》
- 2023年广州铁路职业技术学院单招职业适应性测试笔试模拟试题及答案解析
- DB44 2208-2019农村生活污水处理排放标准-(高清现行)
评论
0/150
提交评论