ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:62.38KB ,
资源ID:7893938      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7893938.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(趣味程序导学C语言.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

趣味程序导学C语言.docx

1、趣味程序导学C语言趣味程序导学C语言(请到附件里下载源代码与课件)电脑游戏,一个熟悉而诱人的字眼,常常不经意地浮现在我们的脑海当中。有梦幻神奇的传奇,有惊险刺激的反恐精英,有纯真童趣的泡泡堂,还有武林情仇,笑傲江湖的剑侠情缘online。它是e时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化、世界观的全新传播方式。作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢?爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科。一般来说,是比较枯燥的。那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦、枯燥的事,它变得象电脑

2、游戏一样充满好奇,富有乐趣。这正是我这个讲座的目的。1、 总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语“Hello,world!”。让我们来看看这个最简单的C程序:#incolude /*把输入输出函数的头文件包含进来*/int main()printf(“Hello, world!”);/*在屏幕上输出字符串“Hello,world!”*/return 0;/*退出main函数,并返回0*/下面我们发现几个值得改进的地方,1、程序的运行结果一闪而过。2、每执行这个程序一次都能看见上次运行留下的字符。3、我们还希望屏幕输出一个笑脸来欢迎我们。让我们来改进一下

3、这个程序吧!1、在return语句的前面加一句:getch ();,表示按任意键结束。2、在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件conio.h。3、ASCII码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf(“%c”, 2)来输出一个笑脸。现在我们把Hello,world程序改成一个更好看的Hello,world了。下面让我们开始做游戏吧!2、 心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧。在屏幕上显示一个运动的小笑脸,而且当它到达

4、屏幕的边缘时会自动弹回来。先在程序定义一个在屏幕中运动的点的结构:struct move_point int x, y;/*该点的位置,包括x坐标和y坐标*/ int xv, yv;/*该点在x轴、y轴的速度*/;运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体。让我们看到以下代码:gotoxy(man.x, man.y);/*把光标移到指定的坐标*/printf(“ “);/*输出一个空格,把先前的字符擦去*/然后我们让物体按其速度运动:man.x += man.xv;/*水平方向按x轴的速度运动*/man.y += man.yv;/*垂直方向按y轴的速度运动*/

5、运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数。最后打印出这个笑脸:gotoxy(man.x, man.y);printf(“%cb”, 2); /*输出ASCII码值为2的“笑脸”字符*/怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧!3、 交互的实现让我们来控制笑脸运动这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理。接受按键我们用以下两条语句:while (bioskey(1) = 0);/*等待按键*

6、/key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/然后用switch语句来判断按键以及执行相关操作,如下:switch (key) /*对变量key的值进行判断*/case UP: /*如果按的是向上键*/ break; /*让物体向上运动,并退出switch*/case DOWN: /*如果按的是向下键*/ break; /*让物体向下运动,并退出switch*/case LEFT: /*向左键*/ break;/*向左运动*/case RIGHT: /*向右键*/ break;/*向右运动*/default: break;/*其他按键则忽略处理*/怎么样,是不是

7、有了玩游戏的感觉了?不过这个程序没有什么目的,也没有什么判断胜负的条件。下面我们就利用这个能控制它移动的笑脸来做一个更有趣的游戏吧!4、 在迷宫中探索小时侯,我常在一些小人书和杂志上看见一些迷宫的游戏,非常喜欢玩,还常到一些书上找迷宫玩呢。好的,现在我们用C语言来编个迷宫的游戏,重温一下童年的乐趣。首先,我们定义一个二维数组map,用它来保存迷宫的地图,其中mapxy = #表示在(x,y)坐标上的点是墙壁。DrawMap函数在屏幕上输出迷宫的地图和一些欢迎信息。在main函数里,我们定义了“小人”man的坐标和“目的地”des的坐标。在游戏循环中,我们增加了一些用来判断胜负的语句:if (m

8、an.x = des.x & man.y = des.y) /*如果人的坐标等于目的地的坐标*/ gotoxy(35, 3); printf(“Ok! You win!”); /*输出胜利信息*/.在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不是有“墙壁”,如果有的话,就不能往前移动了。好的,我们在判断按键的switch语句的各个分支加上了判断语句,如下:if (map = #) break;/*如果前面是墙壁,就不执行下去*/哇噻!真棒,我们做出了一个完整的游戏了。当然你还可以通过修改二维数组map来修改迷宫的地图,让它更有挑战性。不过,我们要设计一个更好玩的游戏5、 聪明的搬运

9、工大家一定玩过“搬运工”的游戏吧!这是在电脑和电子字典上较流行的益智游戏,让我们动手做一个属于自己的“搬运工”吧!程序依然用数组map来保存地图,数组元素如果为空格则表示什么也没有,b表示箱子,#表示墙壁,*表示目的地,i表示箱子在目的地。我们以后每推一下箱子,不但要改变屏幕的显示,也要改变map相应元素的值。游戏的主循环依然是接受按键。当接收一个方向键,需要判断小人前面一格的状态,如果是空地或目的地,则人物可以直接移动;如果是墙壁,则不可移动;如果是箱子或目的地上的箱子,则需要继续判断箱子前面一格的状态:如果前一格是空地或目的地,则人推箱子前进,否则不可移动。好的,我们在switch中增加了

10、这些判断语句。程序还有一个重要的功能就是判断胜利。数组Des用来记录全部目的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断这些目的地上是否都有箱子了。真棒啊!我们可以做游戏了。而且是一个老少皆宜,趣味十足的游戏呢!当然,我们可以通过修改map数组来制作不同的游戏地图,我们还可以相互分享好的游戏地图呢。尾声:C语言在计算机界中占有一个非常重要的地位,很多操作系统都是C语言开发的,比如大家耳熟能详的Unix、Windows、Linux等系统。在C+等高级语言还没出来的时候,很多应用程序也是C语言开发的。C语言在与硬件联系紧密的编程中,也占有重要地位。其实我觉得学习编程,可以通过一些小游

11、戏、实用的例子来学习。象学习音乐的人,不是要等到把全部乐理学完后才演奏一个完整的曲子。而是刚开始学时就有一些简单的曲子让你演奏,让你立刻就有成就感,让你很快就能卖弄出来在别人面前表现自己了。通过编游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方法。好了,编游戏就这么简单,希望大家也尝试用C语言或其他的语言来做几个自己喜欢的小游戏。1、分形图案 分形图是一种较为流行的艺术图形。所谓分形,就是指组成部分与整体以某种方式相似,局部放大后可以在某种程度上再现整体,如图25所示,为一颗树的分形图,该树是由一些分支构成的,就其中某个分支来看,它具有与整颗树相似的形状。绘制的原则是,先按某一方向画

12、一条直线,然后在此线段上找到一系列节点,在每一个节点处向左、右偏转60度各画一条分支。节点位置和节点处所画分支的长度比值按0.618分割。/*分形图案1 QW41.C*/#define g 0.618#define PAI 3.14#include #include#include#includefloat thita=60.0;void grow(int x,int y,float lenth,float fai);void main() int gm,gd; detectgraph(&gd,&gm); initgraph(&gd,&gm,tcbgi); grow(300,300,280.0

13、,90.0); getch(); closegraph();void grow(int x,int y,float lenth,float fai) int x1,y1; int nx,ny,count; float nlenth; x1=x+lenth*cos(fai*PAI/180.0); y1=y-lenth*sin(fai*PAI/180.0); line(x,y,x1,y1); if(lenth10)return; nlenth=lenth; nx=x; ny=y; for(count=0;count7;count+) nx=nx+nlenth*(1-g)*cos(fai*PAI/1

14、80.0); ny=ny-nlenth*(1-g)*sin(fai*PAI/180.0); grow(nx,ny,nlenth*(1-g),fai+thita); grow(nx,ny,nlenth*(1-g),fai-thita); nlenth*=g; 运行结果如下:-2、分形图案2 此例中也是一个分形图案。给出的方法是:先画一个大三角形,连接三角形的三条边的中点,得到四个较小的三角形,然后将外围的三个小三角形经过与大三角形相同的处理,得到一系列更小的三角形。以此类推,将三角形不断地分割下去,直到最小的三角形的边长小于某个值时停止分割。/*分形图案 2 QW42.C*/#include#i

15、ncludevoid draw(int x1,int y1,int x2,int y2,int x3,int y3);void main() int gm,gd; int x1=360,y1=100,x2=260,y2=273,x3=460,y3=273; detectgraph(&gd,&gm); initgraph(&gd,&gm,tcbgi); line(x1,y1,x2,y2); line(x2,y2,x3,y3); line(x3,y3,x1,y1); draw(x1,y1,x2,y2,x3,y3); getch(); closegraph();void draw(int x1,in

16、t y1,int x2,int y2,int x3,int y3) int xm1,ym1,xm2,ym2,xm3,ym3,fx,fy; xm1=(x1+x2)/2; ym1=(y1+y2)/2; xm2=(x2+x3)/2; ym2=(y2+y3)/2; xm3=(x3+x1)/2; ym3=(y3+y1)/2; line(xm1,ym1,xm2,ym2); line(xm2,ym2,xm3,ym3); line(xm3,ym3,xm1,ym1); fx=xm1-xm2; fy=ym1-ym2; if(fx*fx+fy*fy)150) return; draw(x1,y1,xm1,ym1,x

17、m3,ym3); draw(xm1,ym1,x2,y2,xm2,ym2); draw(xm3,ym3,xm2,ym2,x3,y3);程序运行结果如下:-3、天空中运行的卫星 动画显示中最基本和常用的技术是位图像操作,它可以把屏幕上一个矩形区域的图形复制到缓冲区中,也可以从缓冲区中将位块取出重现在屏幕上。目标图像的擦除最简单的方法是采用XOR(异或方式,即将目标中的每个像素点和屏幕上相应的像素点作XOR运算,使目标变得可见,为了擦掉这一目标 ,只需简单地再将它与屏幕XOR一次,背景中被目标所遮盖的部分又可以还原成原来的状态。 我们也可以利用AND和XOR运算,对被移动的目标事先作好两个特殊的掩模

18、(mask),我们称为AND掩模和XOR掩模,这两个掩模的图形制作方式是不同的,AND掩模要求目标轮廓内位图像各点像素值为0,而XOR掩模应按目标的实际颜色去做,并将这两个掩模保存到缓冲区中去。当一个目标在背景移动时,先将目标的AND掩模与屏幕相“与”,其结果在背景当前位置产生一个像素值为0的目标轮廓洞,然后再用目标的XOR掩模与AND掩模相异或,这两个掩模经混合后,目标以其正常的颜色出现在屏幕上。这样通过采用目标位图的双掩模混合技术,当移动目标经过背景时,就不会出现目标颜色发生变化的情况。 作为一个示例,程序运行后,在屏幕上出现繁星闪烁的星际空间,由经纬线组成的地球镶嵌在太空中,一颗卫星缓缓

19、从屏幕中飞过,同时在屏幕上写出彩色大汉字“星际卫星运动轨迹”和“欢迎你使用该系统”,整个画面生动美观。/*天空中运行的卫星Qw43.C*/#include#include#include#include#include#define STEP 5#define DELAY 150#define SIZE 25#define YELLOW 14#define RED 4void *xormask,*andmask,*covered;void draw_earth();void get_mask(int,int,int,int);void putstar(void);void xshz();int

20、 main() int gmode=VGAHI,gdriver=VGA,midx,i,cx=1,cy; char *j1,*j2,*j3,*j4; initgraph(&gdriver,&gmode,tc3bgi); cy=getmaxy()/2; covered=malloc(imagesize(cx,cy,cx+SIZE,cy+SIZE); xormask=malloc(imagesize(cx,cy,cx+SIZE,cy+SIZE); andmask=malloc(imagesize(cx,cy,cx+SIZE,cy+SIZE); getimage(cx,cy,cx+SIZE,cy+SI

21、ZE,covered); setfillstyle(SOLID_FILL,getmaxcolor(); bar(cx,cy,cx+SIZE,cy+SIZE); get_mask(cx,cy+15,0,0); getimage(cx,cy,cx+SIZE,cy+SIZE,andmask); putimage(cx,cy,covered,COPY_PUT); get_mask(cx,cy+15,YELLOW,RED); getimage(cx,cy,cx+SIZE,cy+SIZE,xormask); putimage(cx,cy,xormask,XOR_PUT); draw_earth(); pu

22、tstar(); j1=星际卫星运动轨迹; j2=欢迎您使用该系统; j3=地; j4=球; /*因为没有HZK24,所以下面一段显示汉字的程序没有调试*/* xshz(j1,100,10,1,1,15,1,k,10); xshz(j2,100,400,1,1,2,0,s,10); xshz(j3,310,200,0,0,14,0,s,1); xshz(j4,310,240,0,0,14,0,s,1);*/ for(i=0;i600;i+=STEP) putimage(cx+i,cy,covered,COPY_PUT); getimage(cx+STEP+i,cy,cx+SIZE+STEP+i

23、,cy+SIZE,covered); putimage(cx+STEP+i,cy,andmask,AND_PUT); putimage(cx+STEP+i,cy,xormask,XOR_PUT); delay(DELAY); getch(); closegraph(); return 0;void get_mask(x,y,color1,color2) moveto(x+10,y); setcolor(color1); linerel(-3*3,2*4); moveto(x+10,y); linerel(-3*3,-2*4); moveto(x+25,y); linerel(-5*5,0);

24、setfillstyle(1,color2); fillellipse(x+13,y,8,8);void putstar(void) int seed=1993; int i,dotx,doty,h,w,color,maxcolor; maxcolor=getmaxcolor(); w=getmaxx(); h=getmaxy(); srand(seed); for(i=0;i5000;+i) dotx=1+random(w-1); doty=1+random(h-1); color=random(maxcolor); putpixel(dotx,doty,color); srand(seed

25、);void draw_earth() int midx, midy,i; midx=getmaxx()/2; midy=getmaxy()/2; setbkcolor(BLACK); setcolor(CYAN); for(i=0;i=13;i+) ellipse(midx,midy,0,360,100,100-8*i); ellipse(midx,midy,0,360,100-8*i,100); setcolor(RED); setlinestyle(SOLID_LINE,0,THICK_WIDTH); ellipse(midx,midy,130,50,160,30);/*汉字显示函数*/

26、void xshz(unsigned char *hzc,int ql,int qh,int lf,int hf,int qj,int bj,char zt,int zj) FILE *fp; register int i,j; unsigned char qu,wei; int lo,k,qql,qqh; char zkn=d:ucdoshzk24; char hzbp72; if(fp=fopen(strcat(zkn,zt),rb)=NULL) puts(file cannot open! n); exit(1); qqh=qh; qql=ql; while(*hzc) /*显示汉字串*

27、/ qu=(*hzc-0xa1)&0x07f; wei=(*(+hzc)-0xa1)&0x07f; lo=(qu-15)*94+wei; hzc+; if(fseek(fp,lo*72L,SEEK_SET) puts(file seek error! n); exit(1); if(fread(hzbp,1,72,fp)!=72) puts(file read error! n);exit(1); /*显示一个汉字*/ for(i=0;i24;i+) for(j=0;j3;j+)for(k=0;k(8-k)&1) setfillstyle(SOLID_FILL,qj); else setfil

28、lstyle(SOLID_FILL,bj); bar(qql,qqh,qql+lf,qqh+hf); qqh=qh+(j*8+k)*(hf+1); qql=ql+i*(lf+1); ql=qql+zj; fclose(fp);4、腾飞的火箭 腾飞的火箭也是一幅动画。程序运行时首先在屏幕上出现大地和校园,然后一枚火箭冉冉升起,同时喷出红色的火焰。/*腾飞的火箭QW44.C*/#include#include#includevoid main() int i,j,x=140,y; int driver=DETECT; int mode=0; initgraph(&driver,&mode,tc3bgi)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1