打飞机游戏C语言游戏设计_第1页
打飞机游戏C语言游戏设计_第2页
打飞机游戏C语言游戏设计_第3页
打飞机游戏C语言游戏设计_第4页
打飞机游戏C语言游戏设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

:C语言游戏设计1.1:课程设计目标C语言编写一款打飞机游戏,掌握函数的使用和编程的整体思路。1.2:整体设计思路总体设想:运行游戏时显示游戏的界面,允许用户选择个性化设置,A、D、W分别控制飞机的左右移动和发射子弹,不同的敌机飞行和攻击,并不时伴有奖励。游行运行时播放音效,同时记录飞机的生命和得分,达到一定的分数进入下一关。需要构建的函数:位图调用模块、界面输出函数、主菜单函数、设置函数、速度选择函数、游戏控制函数、敌机移动函数、子弹移动函数、boss函数、计时函数。1.3:需调用的头文件:include<stdio.h>//常规库头文件include<conio.h>//控制台输入输出流头文件include<stdlib.h>//系统函数头文件include<time.h>//时间函数头文件include<windows.h>//windows函数库include<mmsystem.h>//导入声音头文件pragmacomment(lib,"winmm.lib")//导入声音头文件库1.4:游戏过程模拟:启动启动游戏用户用户个性化设置恭喜进入下一关Gameover判断飞机生命恭喜进入下一关Gameover判断飞机生命记录飞机飞行时间和生命记录飞机飞行时间和生命判断输入指令Menu菜单函数Mpovepal1敌弹Movepal敌机函数Boss函数Bmp位图调用Set设置函数Update计时函数Delay游控函数Menu菜单函数Mpovepal1敌弹Movepal敌机函数Boss函数Bmp位图调用Set设置函数Update计时函数Delay游控函数Indelay速控函数Print界面输出Movebul子弹速度飞机飞机的移动,子弹的发射,音乐的播放,信息的记录1.5:显示效果如下图所示:初始设置界面:游戏界面 2算法实现2.1需要了解的知识点:Main函数和menu函数编写比较顺利,在bmp函数中遇到如何显示窗口和调用图片的问题,看了一些例子和网上的资料,逐渐掌握了一下知识点:eq\o\ac(○,1)设备上下文:设备,显示器,打印机,数码相机,扫描仪这些类似的设备,上下文,就是上面设备的相关信息,比如屏幕分辨率等eq\o\ac(○,2)HANDLE通用句柄,实际上是一个指向指针的指针,在Windows操作系统中,内存操作器经常移动对象,来满足各种程序的内存需要,为了解决寻找对象问题,内存管理器开辟出一块专门的内存储存空间,把移动后的地址存储在该空间,这样就可以通过该地址间接寻找到对象。eq\o\ac(○,3)HDC设备描述句柄,实现对窗口操作区域的GDI(图形设备接口,负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出)操作,如画线、写文本、绘画制图等。eq\o\ac(○,4)BITMAP用于处理有像素数据定义的图像的对象。eq\o\ac(○,5)GetDC(0)检索特定的客户区域或整个屏幕的宣示设备上下文环境的句柄,以后可以使用该句柄在设备上下文环境中绘图。eq\o\ac(○,6)LoadImage装载图标、光标或位图。HANDLELoadImage(HINSTANCEhinst,LPCTSTRlpszName,UINTuType,intcxDesired,intCyDesired,UINTfuLoad),hinst处理包含被撞在图像模块的实例,装载oem图像时参数设为0;name指向装载图像资源的名称;type指定被装备图像类型cxdesired和cyDesired指定图标的宽度和高度,如果参数为0,则使用目前资源的高度。Fuload-LR_LOADFROMFILE:根据参数lpszName的值装载图像。若标记未被给定,lpszName的值为资源名称。eq\o\ac(○,7)CreateCompatibleDC该函数创建一个与指定设备兼容的内存设备上下文环境(DC)。通过GetDc()获取的HDC直接与相关设备沟通,而本函数创建的DC,则是与内存中的一个表面相关联。eq\o\ac(○,8)SelectObject计算机编程语言函数,该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。eq\o\ac(○,9)GetObject函数功能:该函数得到指定图形对象的信息,根据图形对象,函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。eq\o\ac(○,10)BitBlt该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境.eq\o\ac(○,11)ReleaseDC函数释放设备上下文环境(DC)供其他应用程序使用。函数的效果与设备上下文环境类有关。它只释放公用的和设备上下文环境,对于类或私有的则无效。eq\o\ac(○,12)DeleteDC:该函数删除指定的设备上下文环境.eq\o\ac(○,13)DeleteObject该函数删除一个逻辑笔、画笔、字体、位图、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也就失效了eq\o\ac(○,14)system("modeconcols=48lines=25")表示窗口宽度和高度eq\o\ac(○,15)system(“colorOA”)color后面的0是背景色代号,A是前景色代号。各颜色代码如下:0=黑色1=蓝色2=绿色3=湖蓝色4=红色5=紫色6=黄色7=白色8=灰色9=淡蓝色A=淡绿色B=淡浅绿色,淡红色D=淡紫色E=淡黄色F=亮白色

2.2代码讲解:#include<stdio.h>//常规库头文件#include<conio.h>//控制台输入输出流头文件#include<stdlib.h>//系统函数头文件#include<time.h>//时间函数头文件#include<windows.h>//windows函数库#include<mmsystem.h>//导入声音头文件#pragmacomment(lib,"winmm.lib")//导入声音头文件库#defineN50//宏voidUpdate(void);//计时函数voidDelay(void);//游戏控速函数voidInDelay(void);//速度选择函数voidprint(int[][N]);//界面输出函数voidmovebul(int[][N]);//子弹移动函数voidmovebul1(int[][N]);//BOSS子弹移动函数voidmovepla(int[][N]);//敌机移动函数voidmovepla1(int[][N]);//敌机移动函数voidboss(int[][N]);//boss模块voidbmp(void);//位图调用模块voidset(void);//设置函数voidmenu(void);//主菜单函数intscr[23][N]={0},pl=20,bl=1,width=40,speed=4,density=30,score=0,death=7,k1=0,k2=7;//全局变量定义intminute=0,second=0,p=0,k3=0;longintmax=0;//时间结构体structclock{ intminute; intsecond;}; typedefstructclockCLOCK;//计时模块voidUpdate(void){p++; if(p==7) { p=0; second++; } if(second==60) { second=0; minute++; } k3=minute; if(minute==15) { minute=0; }}//游戏控速模块voidDelay(void){longt; for(t=0;t<=max;t++) {}}//速度选择函数voidInDelay(void){intsw=0; system("cls");do { printf("请游戏的速度:0-10\n"); switch(getch()) { case'0':max=0;;break; case'1':max=1000;;break; case'2':max=10000;;break; case'3':max=100000;;break; case'4':max=1000000;;break; case'5':max=10000000;;break; case'6':max=100000000;;break; case'7':max=1000000000;;break; case'8':max=10000000000;;break; case'9':max=100000000000;;break; case'10':max=500000000000;;break; default:printf("输入错误,请重新选择"); sw=1; } }while(sw);}//界面输出模块voidprint(inta[][N]){ inti,j;system("cls"); for(i=0;i<23;i++) { for(j=-1;j<width;j++) { a[i+1][width-1]=4; //a[i][-1]=4; a[0][j-1]=5; a[22][j]=6; if(a[i][j]==0)printf("");//清空 if(a[i][j]==1)printf("%C%c%C",17,87,16);//角色 if(a[i][j]==2)printf("%c",43);//子弹 if(a[i][j]==3)printf("%c",3);//敌机1if(a[i][j]==7)printf("%c",15);//敌机2 if(a[i][j]==8)printf("%c",14);//BOSS if(a[i][j]==9)printf("%c",31);//BOSS攻击//if(a[i][j]==4)printf("|");//垂直边界 //if(a[i][j]==5)printf("%c",20);//上水平边界 //if(a[i][j]==6)printf("-");//下水平边界 if(i==1&&j==width-1)printf("得分:%d",score); if(i==3&&j==width-1)printf("生命:%d",death); if(i==5&&j==width-1)printf("设置:S键"); if(i==7&&j==width-1)printf("速度:V键"); if(i==9&&j==width-1)printf("时间:%2d:%2d",minute,second); if(i==12&&j==width-1)printf("控制:"); if(i==13&&j==width-1)printf("W"); if(i==14&&j==width-1)printf("AD"); if(i==15&&j==width-1)printf("5"); if(i==16&&j==width-1)printf("13"); } printf("\n"); }}//BOSS攻击模块//子弹攻击模块voidmovebul(inta[][N]){ inti,j; for(i=0;i<21;i++) for(j=0;j<width;j++) { if(i==0&&a[i][j]==2)a[i][j]=0; if(a[i][j]==2) { if(a[i-1][j]==3) { score+=10; k1=score; //播放敌机1死亡音乐 PlaySound("E:\\haha\\music\\enemy1_down.mp3",NULL,SND_FILENAME|SND_ASYNC); } if(a[i-1][j]==7) { score+=10; k1=score; //播放敌机2死亡音乐 PlaySound("E:\\haha\\music\\enemy3_down.mp3",NULL,SND_FILENAME|SND_ASYNC); } if(a[i-1][j]==8) { score+=40; k1=score; //播放过关音乐 PlaySound("E:\\haha\\music\\1761.mp3",NULL,SND_FILENAME|SND_ASYNC); } a[i][j]=0,a[i-1][j]=2; } }}//慢敌机移动模块voidmovepla(inta[][N]){ inti,j; for(i=21;i>=0;i--) for(j=0;j<width;j++) { if(i==21&&a[i][j]==3) a[i][j]=0; if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3; } if(a[21][pl]==1&&a[20][pl]==3) { death--; k2=death; }}//快敌机移动模块voidmovepla1(inta[][N]){ inti,j; for(i=21;i>=0;i--) for(j=0;j<width;j++) { if(i==21&&a[i][j]==7) a[i][j]=0; if(a[i][j]==7)a[i][j]=0,a[i+1][j]=7; } if(a[21][pl]==1&&a[20][pl]==7) { death-=3; k=death; }}//横向奖励模块voidboss(inta[][N]){inti,j; for(i=0;i<=21;i++) for(j=width;j>=0;j--) { if(i==21&&a[i][j]==8) a[i][j]=0; if(a[i][j]==8)a[i][j]=0,a[i][j+1]=8; }}//位图调用模块voidbmp(void)//intargc,char*argv[]{HANDLEh;HDCdc1,dc2;BITMAPbmp;dc1=GetDC(0);//得到屏幕DCh=LoadImage(NULL,"E:\\haha\\music\\1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);dc2=CreateCompatibleDC(dc1);SelectObject(dc2,h);GetObject(h,sizeof(bmp),&bmp);BitBlt(dc1,100,100,bmp.bmWidth=2080,bmp.bmHeight=1080,dc2,0,0,SRCCOPY);Sleep(20);ReleaseDC(0,dc1);DeleteDC(dc2);DeleteObject(h);getch();}//游戏设置模块voidset(void){intsw=0,i,j; system("cls");do { sw=0; printf("请游戏界面的大小:1.小2.大\n>>\n"); switch(getch()) { case'1':width=200;pl=200;break; case'2':width=20;pl=40;break; default:printf("输入错误,请重新选择"); sw=1; } }while(sw);do {sw=0; printf("请选择敌机密度:1.大2.中3.小\n>>\n"); switch(getch()) { case'1':density=10;break; case'2':density=20;break; case'3':density=30;break; default:printf("错,请重新选择"); sw=1; } }while(sw);do {sw=0; printf("敌机的飞行速度:1.快2.中3.慢\n>>\n"); switch(getch()) { case'1':speed=2;break; case'2':speed=3;break; case'3':speed=4;break; default:printf("错误,请重新选择"); sw=1; } }while(sw);for(i=0;i<22;i++)for(j=0;j<40;j++)scr[i][j]=0;scr[21][pl]=1;printf("按任意键保存");getch();}//主菜单模块voidmenu(void){bmp(); system("modeconcols=46lines=25"); system("colorE0"); printf("%18c游戏说明:\n",32);printf("\n"); printf("%13c飞行控制:A向左D向右\n",32); printf("\n"); printf("%17cW:发射子弹\n",32); printf("\n"); printf("%19cS:设置\n",32); printf("\n"); printf("%16cEsc:开始游戏\n",32); printf("\n");printf("%14c游戏时间为15分钟",32); printf("\n"); printf("\n"); printf("%13c本游戏由王均坐改编",32); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("双击回车键直接进入游戏>>>>:",15);if(getch()=='s'||getch()=='S')set();}//主函数voidmain(){ //全局变量初始化 longinti=0,j=0; menu(); system("modeconcols=54lines=25");//屏幕大小控制 system("color0A");//屏幕颜色更改 scr[21][pl]=1; scr[0][0]=3; //关卡一背景音乐 //PlaySound("E:\\haha\\music\\game_music.mp3",NULL,SND_ASYNC|SND_LOOP|SND_FILENAME);//方式一,不能同时播放两首歌曲 mciSendString("openE:\\haha\\music\\game_music.mp3aliasMySong",NULL,0,NULL);mciSendString("playMySong",NULL,0,NULL);//方式二,课同时播放两首歌 //关卡一//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// while(1) { intsecond=0,minute=0; if(kbhit())//判断键盘当前是否有输入,有则返回该值,无则返回0switch(getch()) { case'a': case'A': case49:if(pl>0) scr[21][pl]=0,scr[21][--pl]=1;break; case'd': case'D': case51:if(pl<width-2) scr[21][pl]=0,scr[21][++pl]=1;break; case'w': case'W': case53:{scr[20][pl+1]=2;PlaySound("E:\\haha\\music\\enemy1_down.mp3",NULL,SND_FILENAME|SND_ASYNC);break;} case's': case'S':set();break; case'v': case'V':InDelay();break; } if(++j%density==0)//控制敌机密度 { j=0; srand(time(NULL));//srang:调用系统时间作为种子 scr[0][rand()%width]=3;//rand:根据种子产生敌机随机数列1 scr[1][rand()%width]=7;//rand:根据种子产生敌机随机数列2 scr[rand()%20][1]=8;//rand:根据种子产生BOSS随机数列2 } if(++i%speed==0)//控制敌机速度 movepla(scr); movepla1(scr); movebul(scr); //movebul1(scr); boss(scr); print(scr); Update(); Delay(); if(i==30000)i=0;if(k1>=100){mciSendString("closeMySong",NULL,0,NULL); PlaySound("E:\\haha\\music\\1761.mp3",NULL,SND_FILENAME|SND_ASYNC); printf("恭喜你闯过第1关:按任意键继续");getch();getch();break;} if(k2==0){printf("对不起,游戏结束:按任意键结束");getch();getch();break;} if(k3==10){printf("对不起,游戏结束:按任意键结束");getch();getch();break;} }//关卡二///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if(k1>=100){//全局变量初始化 k1=0; score=0; death=7; minute=0; second=0; width=40; density=20; speed=3; //关卡二背景音乐 mciSendString("openE:\\haha\\music\\game_music.mp3aliasMySong",NULL,0,NULL);mciSendString("playMySong",NULL,0,NULL);while(1) { if(kbhit())//判断键盘当前是否有输入,有则返回该值,无则返回0switch(getch()) { case'a': case49:if(pl>0) scr[21][pl]=0,scr[21][--pl]=1;break; case'd': case51:if(pl<width-2) scr[21][pl]=0,scr[21][++pl]=1;break; case'w': case53:{scr[20][pl+1]=2;PlaySound("C:\\gameresource\\sounds\\5.wav",NULL,SND_FILENAME|SND_ASYNC);break;} case's': case'S':set();break; case'v': case'V':InDelay();break; } if(++j%density==0)//控制敌机密度 { j=0; srand(time(NULL));//srang:调用系统时间作为种子 scr[0][rand()%width]=3;//rand:根据种子产生随机数列1 scr[1][rand()%width]=7;//rand:根据种子产生随机数列2 scr[rand()%10][1]=8;//rand:根据种子产生BOSS随机数列2 } if(++i%speed==0)//控制敌机速度 movepla(scr); movepla1(scr); movebul(scr); //movebul1(scr); boss(scr); print(scr); Update(); Delay(); if(i==30000)i=0;if(k1>=500){mciSendString("closeMySong",NULL,0,NULL); PlaySound("C:\\gameresource\\sounds\\9.wav",NULL,SND_FILENAME|SND_ASYNC); printf("恭喜你闯过第2关:按任意键继续");getch();getch();break;}if(k2==0){printf("对不起,游戏结束:按任意键结束");getch();getch();break;} if(k3==10){printf("对不起,游戏结束:按任意键结束");getch();getch();break;} }}//关卡三////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if(k1>=500){//全局变量初始化 k1=0; score=0; death=7; k1=0; minute=0; second=0; width=20; density=10; speed=2; //关卡三背景音乐 mciSendString("openC:\\gameresource\\sounds\\1.mp3aliasMySong",NULL,0,NULL);mciSendString("playMySong",NULL,0,NULL);while(1) { if(kbhit())//判断键盘当前是否有输入,有则返回该值,无则返回0switch(getch()) { case'a': case49:if(pl>0) scr[21][pl]=0,scr[21][--pl]=1;break; case'd': case51:if(pl<width-2) scr[21][pl]=0,scr[21][++pl]=1;break; case'w': case53:{scr[20][pl+1]=2;PlaySound("C:\\gameresource\\sounds\\5.wav",NULL,SND_FILENAME|SND_ASYNC);break;} case's': case'S':set();break; case'v': case'V':InDelay();break; } if(++j%density==0)//控制敌机密度 { j=0; srand(time(NULL));//srang:调用系统时间作为种子 scr[0][rand()%width]=3;//rand:根据种子产生随机数列1 scr[1][rand()%width]=7;//rand:根据种子产生随机数列2 scr[rand()%10][1]=8;//rand:根据种子产生BOSS随机数列2 } if(++i%speed==0)//控制敌机速度 movepla(scr); movepla1(scr); movebul(scr); //movebul1(scr); boss(scr); print(scr); Update(); Delay(); if(i==30000)i=0;if(k1>=1000){mciSendString("closeMySong",NULL,0,NULL); PlaySound("E:\\haha\\music\\1761.wav",NULL,SND_FILENAME|SND_ASYNC); printf("恭喜你闯过第3关:按任意键继续");getch();getch();break;}if(k2==0){printf("对不起,游戏结束:按任意键结束");getch();getch();break;} if(k3==10){printf("对不起,游戏结束:按任意键结束");getch();getch();break;} }}}2.3游戏音效素材:背景音乐采用的是超级玛丽,其他采用微信打飞机的资源,共设置3个关卡,供用户娱乐。这套程序的缺点是画面闪动太快,音效文件只支持Windowsxp系统,运行速度迟缓,画面显示后5秒钟才加载音乐素材,采用绝对路径,在别的电脑运行时画面和声音素材会失效。学生实验心得实验课的真正目的不是为了完成某项作业,而是为了培养我们主动学习和解决问题的能力,丢掉长久以往形成的“坐以待毙”的习惯。我们在实验中有很多想法要实现,有很多苦难需要克服,就逼迫我们通过各种手段来获取解决方案,也就是在这一过程中,主动学习和解决问题的能力得到培养和提高。在互联网时代,获取方法和资料变得特别容易,但其中也掺杂了很多虚假信息(在寻找位图实现方法时,就走了很多弯路),建议以图书为主,互联网为辅,会大大节省时间,提高效率。我通过设计课,认识到程序设计整体性的重要程度。在敲第一个代码之前,要做到心中有一个清晰的轮廓,知道自己干什么,该怎样干,才能做到程序写的又快又好。同时算法又是一个不容忽视的重要因素,一个程序的好坏很大程度取决与算法,我们应探索多种通向目的的算法,从中找出那个最优的。总之,通过实验课,我学习到了程序设计的整体思想,算法最优化概念,最重要的是主动解决问题的能力。学生(签名):王均坐2021年5月指导教师评语成绩评定:指导教师(签名):年月日

引力波的实验探测给我们的启示摘要:引力理论的发展经历了数百年,从牛顿到爱因斯坦,从万有引力定律到广义相对论。在这过程中,科学家们引力波的预言质疑不休、争论不止。而引力波的实验探测无疑证明了一切。引力波的发现,弥补了爱因斯坦的广义相对论的漏洞,也确定了他的理论的正确。这是人类史上出现的又一契机,它将为人类社会带来重大变革。“破五”是中国传统迎财神的日子。2016年的这一天,却一个让全世界物理学界沸腾的日子,甚至许多的物理学家为之痛哭流涕——被预言已经百年的引力波,终于被探测到了。引力是什么?在今天人们所知道的物质的四种基本相互作用中,引力作用为最弱。四种相互作用按作用强度比例顺序是:强相互作用(1),电磁相互作用(10),弱相互作用(10),引力相互作用(10)。因此,在研究基本粒子的运动时,引力一般略去不计。但在天文学领域内,由于涉及的对象的质量极其巨大,引力就成为不仅支配着天体的运动,而且往往是天体的结构和演化的决定因素。引力并不是一种所谓的“力”,而是一种属性。牛顿在1687年出版的《自然哲学的数学原理》一书中首次提出万有引力定律,基于此,他结识了彗星的运动轨道和地球上的潮汐现象,并根据万有引力定律成功地预言并发现了海王星。万有引力定律出现后,才正式把研究天体的运动建立在力学理论的基础上,从而创立了天体力学。简单的说,质量越大的东西产生的引力越大,地球的质量产生的引力足够把地球上的东西全部抓牢。1905年,爱因斯坦提出狭义相对论,突破了绝对时间和绝对空间的概念,否定了瞬时超距作用,从根本上动摇了建立在这些旧观念基础上的牛顿引力理论。经过十年的探索后,爱因斯坦于1915年提出了迄今为止最成功的近代引力理论——广义相对论。广义相对论中,引力被归咎于时空的弯曲。这种弯曲是由物质造成的,物质的质量越大,所形成的扭曲也就越严重。但是这种弯曲,对于人类来说根本感知不到,一是因为人类伴随这种弯曲一起弯曲了,而是由于这种弯曲太微小。大质量物体发生的扭曲引起了震动,而这种震动,就是引力波。科学家们通过探测这种时空震荡,来证实引力波的存在。早在1916年,爱因斯坦在广义相对论中就预言了引力波的存在。而科学家们普遍认为,这次LIGO这一发现是爱因斯坦相对论实验验证中最后一块缺失的“拼图”,证实了爱因斯坦广义相对论的正确性,弥补了爱因斯坦的广义相对论的漏洞,验证了已故科学家爱因斯坦的预言。探测的仪器叫做迈克尔逊干涉仪,或是LIGO。LIGO的“两条腿”都有4千米长,最近的一次升级就花去了几十亿美元。LIGO的原理是什么?简单来说是利用光速不变,在同样的直线路程里测试耗时,而通过时间的偏差(尽最大可能排除误差,也是耗资巨大的原因)来判定空间确实存在震动。这样的实验设置基于爱因斯坦的假设:光速不变,是因为以光的视角看,它沿途经过的空间发生了折叠伸缩。可能的引力波探测源包括致密双星系统(白矮星,中子星和黑洞)。在2016年2月11日,LIGO科学合作组织和Virgo合作团队宣布他们已经利用高级LIGO探测器,首次探测到了来自于双黑洞合并的引力波信号。在过去的数十年里,许多物理学家和天文学家为证明引力波的存在进行了大量研究。其中,泰勒和赫尔斯由于第一次得到引力波存在的间接证据荣获1993年诺贝尔物理学奖。到目前为止,类似的双中子星系统已经发现了近十个,但是双黑洞系统却是首次。在实验方面,第一个对直接探测引力波作伟大尝试的人是韦伯。虽然他的共振棒探测器最后没能找到引力波,但是韦伯开创了引力波实验科学的先河,为如今的硕果打下了基础。因为在地面上很容易受到干扰,所以物理学家们也在向太空进军。欧洲的空间引力波项目eLISA(演化激光干涉空间天线)。eLISA将由三个相同的探测器构成为一个边长为五百万公里的等边三角形,同样使用激光干涉法来探测引力波。此项目已经欧洲空间局通过批准,正式立项,目前处于设计阶段,计划于2034年发射运行。作为先导项目,两颗测试卫星已经于2015年12月3日发射成功,目前正在调试之中。中国的科研人员,在积极参与目前的国际合作之外之外,也在筹建自己的引力波探测项目。引力波的实验探测引起了世界范围的轰动,这些探测极其不易,宇宙中发生爆炸性的大事件时产生的引力波,才相对容易探测到,例如黑洞合并、星系合并、超新星爆炸等。100年前,爱因斯坦在预言引力波存在时就曾说:“这些数值是如此微小,她们不会对任何的东西产生显著的作用,没人能够去测量它们。”蔡一夫给出解释:“时间发生得越早,距离越远,越会在宇宙中传播期间被红移。红移指的是由于宇宙本身的膨胀将所有的波动的波长拉直拉平,这样其波动性就难以被探测到。例如,这次LIGO探测到的引力波,是13亿年以前两个大约30个太阳质量的黑洞并合所产生的引力波,振幅之小,是在原子核尺寸的千分之一的尺度。能探测到真的是非常不容易,LIGO实验组的科学家们也是在几十年里经历多次挫折,不断调整方案,改进仪器,才最终探测到的。”所以它的成功探测也标志着在这个领域人类的技术进步到了前所未有的水平。而它所具有的里程碑意义不止在科学情感上,更在于能够打开人类的一个新的世界——每个人都对它满怀期待。如果电磁波探测是人类的眼睛,那么人类又多了一双聆听外界的耳朵。马克斯·普朗克引力物理研究所说:“在《星际穿越》和《三体》中,都不约而同地将引力波选为了未来科技发达的人类的通讯手段,这也许只能是美好的幻想,但对于天文研究而言,引力波的确开启了一扇新的窗口。吹进来的第一缕清风,就带来了一个重大的信息:极重的恒星级双黑洞系统存在并可以在足够短的时间(10亿年)内并合。这是让我们始料未及的。谁能知道在将来的更多的探测中,LIGO和一众引力波探测器能带给我们什么样的惊喜呢?”引力波有两个非常重要而且比较独特的性质。第一:不需要任何的物质存在于引力波源周围。这时就不会有电磁辐射产生。第二:引力波能够几乎不受阻挡的穿过行进途中的天体。比如,来自于遥远恒星的光会被星际介质所遮挡,引力波能够不受阻碍的穿过。对于天文学家来说,这两个特征允许引力波携带有更多的之前从未被观测过的天文现象信息,而每一个电磁波谱的打开,都会为我们带来前所未有的发现。天文学家们同样期望引力波也是如此。而引力波本身的性质也可能对基础物理学产生巨大的影响。另外,引力波蕴含的,很可能是宇宙诞生的画面。我们从小都被告知一个最著名的猜想——宇宙是在一场爆炸中诞生的。这意味着,在时空的开始,宇宙又一次最为剧烈的震动。引力波就能让我们还原这个震动——它是否存在?有多大规模?不仅如此,引力波还能传递信息——我们看不到的宇宙空间在发生什么?据科学家解释,这次的引力波就是在遥远的距离上巨大的黑洞变化引起的。而这一结果也证明了黑洞真实存在——至少是广义相对论预测的由纯净、真空、扭曲时空组成的完美圆形物体。并且,引力波传递的信息可以让科学家更精确地估计宇宙膨胀的速度。总而言之,一个新的重大科学发现,总会给人类社会带来无法预估的发展。18世纪面熟电磁波的麦克斯韦理论确认的时候,也没人知道会给人类带来什么,但是现在不管是电视机还是移动电话,都与电磁现象有关。引力波的发现类似当年的发现X光一样,是一种工具。有了这个工具,我们可以利用引力波的观察,去观察遥远的宇宙的现象。发现暗物质、时空穿梭等等才是有可能实现的事情。如果没有引力波,以我们现有的技术是做不到这些科幻世界才有的事情的。

温馨提示

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

评论

0/150

提交评论