《水果忍者》設計報告_第1頁
《水果忍者》設計報告_第2頁
《水果忍者》設計報告_第3頁
《水果忍者》設計報告_第4頁
《水果忍者》設計報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載福建工程學院國脈信息學院《水果忍者》課程設計報告題目:水果忍者游戲開發專業:電子信息工程班級:電子1001班學號:1030010145姓名:郭龍彬指導教師:陳灝、韓海峰完成日期:2013年04月07日可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載設計題目水果忍者游戲開發周次:2實驗時間2013年3月25日~4月07日課程設計要求熟悉C/C++語言能夠用C/C++語言解決一個實際問題掌握編程思路課程設計過程導入茶壺模型、設置旋轉效果、插入水果忍者背景、導入水果模型、增加水果種類、設置水果按照設定好的拋物線的軌跡運動、增加刀鋒效果、設置屏幕切換效果、導入半個水果模型,設置當刀鋒接觸水果時把水果切成兩半的效果、添加水果忍者背景音樂。參考資料《嵌入式系統》項目課程,OpenGL編程基礎設計總結與體會此次實訓最大的收獲不是我學習到了多少知識而是這幾天實訓給我的感悟:首先是心態。一定要有一個積極的心態,獨立解決問題的意識,培養扎實基礎的認識。有自己的東西,有自己的付出,才會有程序運行成功時的喜悅和小自豪,這樣也有助于培養自己的興趣。要時刻牢記態度決定一切。其次是興趣,感覺學習工作中興趣很關鍵,只是一個引發人積極性的問題,有了興趣就自覺了,效率自然就高了。再次要敢于嘗試和挑戰。不要安于現成的程序,而且不要害怕失敗,在程序調試的過程中這點尤為重要,“發現出問題然后解決問題”是一個積累經驗的過程,而且很高效。最后要不懈追求。對于源代碼進行不斷的完善,要盡可能的實現課題所要求的功能。對于初學者或者開發較少的人來說,大量大寫程序還是有必要的,但同時要注意思考,理解其實現的內在意義。還可以自己添加一些有意義的功能來實現。當看到自己編寫的程序正常運行時,興趣也會隨之而來,樂此不疲,形成一個良性循環。兩周的學習,有過艱辛,有過喜悅,放棄過,堅持過。兩周的學習讓自己真正的過了把癮,自己從一個玩游戲的角色到開發游戲的角色。角色的變換,心境的變化。我們從一開始的照搬照抄敲著看似是自己的代碼,到后來自己思考游戲思路,敲著自己的代碼。學習中遇到了很多的問題,通過小組的討論解決。讓我認識到團結的重要性,有時并不是一人不能解決的問題,放到團體中,大家集思廣益,每個人一點思路,問題就給放小了,那就容易解決了。兩周的時間雖說有點短,不過這兩周讓我學到了很多東西,讓我了解了嵌入式,知道了以后的大致出路。這次實訓讓我學會了規劃,制定計劃,每天的學習都有跡可尋。可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載課程過程及其程序:1.導入茶壺模型#include<qgl.h>#include<glut.h>//函數聲明voidDisplay();//定義調用函數voidReshape(intw,inth);//定義窗口重繪函數GLfloatangle=0;//定義旋轉角度voidMouseMove(intx,inty);//定義鼠標事件函數intmain(intargc,char*argv[]){glutInit(&argc,argv);//初始化函數glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);glutInitWindowPosition(150,150);//窗口位置glutInitWindowSize(800,600);//窗口大小glutCreateWindow("GoodJob");//窗口創建并命名glutDisplayFunc(Display);//回調函數glutMotionFunc(MouseMove);//鼠標事件函數glutReshapeFunc(Reshape);//窗口重繪函數(移動與變化時)glutMainLoop();//循環函數return0;}voidMouseMove(intx,inty)//鼠標執行函數{if(angle>=360)angle=0;angle+=0.001;//角度變化函數(數值±表旋轉方向)glutPostRedisplay();//角度改變、重新繪制}voidDisplay()//調用函數{glClearColor(0.0,0.0,0.0,0.0);//末位0表示混合值:0.0-1.0glClear(GL_COLOR_BUFFER_BIT);//清除顏色緩沖區(設定背景色)glRotatef(angle,1.0,0.0,0.0);//確定旋轉軸glRotatef(angle,0.0,1.0,0.0);glRotatef(angle,0.0,0.0,1.0);glBegin(GL_LINES);//畫直線函數glVertex3f(-0.5,0.5,0.0);//頂點函數(x,y,z)glVertex3f(0.5,-0.5,0.0);glEnd();glBegin(GL_QUADS);//畫平面函數glColor3f(0.3,0.5,0.7);glVertex3f(-0.5,0.5,0.0);//平面顏色(三基色)glColor3f(0.7,0.5,0.8);glVertex3f(-0.5,-0.5,0.0);//頂點函數(x,y,z)可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載glColor3f(0.4,0.5,0.6);glVertex3f(0.5,-0.5,0.0);glColor3f(0.8,0.8,0.4);glVertex3f(0.5,0.5,0.0);glEnd();glColor3f(0.3,0.5,0.7);//設置茶壺顏色glutWireTeapot(0.4);//畫茶壺(大小)glutSwapBuffers();}2.設置旋轉效果voidDisplay()//調用函數{glClearColor(0.0,0.0,0.0,0.0);//末位0表示混合值:0.0-1.0glClear(GL_COLOR_BUFFER_BIT);//清除顏色緩沖區(設定背景色)glRotatef(angle,0.0,1.0,0.0);//確定旋轉軸glRotatef(angle,0.0,1.0,0.0);glRotatef(angle,0.0,1.0,0.0);}3.插入水果忍者背景voidLoadTexture(){QImagebuf,textureBuf;//圖像準備if(!buf.load("./images/background.jpg")){printf("Loaderror!\n");//當讀取錯誤時提示}textureBuf=QGLWidget::convertToGLFormat(buf);//轉換圖形格式glGenTextures(1,&textureArray[0]);//生成一個紋理,建立索引glBindTexture(GL_TEXTURE_2D,textureArray[0]);//綁定紋理glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,textureBuf.width(),textureBuf.height(),0,GL_RGBA,GL_UNSIGNED_BYTE,textureBuf.bits());//生成一個2D紋理//第一個0:最基本的圖像執行細節級別,第二個0:邊框的寬度}voidOpenGLInit(){glEnable(GL_TEXTURE_2D);//啟動紋理貼圖功能}4.導入水果模型可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載CLoad3DSAppleLoad3DS;//讀取蘋果3D模型if(!AppleLoad3DS.Import3DS(&AppleModel,"./3dmodel/apple.3ds")){printf("Load3DSFileError!\n");}AppleObject.get3Dmodel(&AppleModel);5.增加水果種類CLoad3DSAppleLoad3DS;//讀取蘋果3D模型if(!AppleLoad3DS.Import3DS(&AppleModel,"./3dmodel/apple.3ds")){printf("Load3DSFileError!\n");}AppleObject.get3Dmodel(&MeloModel);CLoad3DSMeloLoad3DS;//讀取西瓜3D模型if(!MeloLoad3DS.Import3DS(&MeloModel,"./3dmodel/melo.3ds")){printf("Load3DSFileError!\n");}AppleObject.get3Dmodel(&AppleModel);MeloObject.get3Dmodel(&MeloModel);glutDisplayFunc(Display);//回調函數glutMotionFunc(MouseMove);//鼠標事件函數glutReshapeFunc(Reshape);//窗口重繪函數(移動與變化時)glutMainLoop();//循環函數return0;}6.設置水果按照設定好的拋物線的軌跡運動PARABOLA_THREEPOINTThreepoints[11];Parabolaparabola(-0.8,-0.45,0.0,0.0,0.8,-0.45);ParabolaparabolaA(-0.1,-0.8,0.0,0.5,0.1,-0.8);ParabolaparabolaB(0.8,-0.45,0.0,0.0,-0.8,-0.45);ParabolaparabolaC(-0.5,-1.0,1.0,0.5,2.0,-1.0);intmain(intargc,char*argv[]){parabola.drawParabola();parabolaA.drawParabola();parabolaB.drawParabola();parabolaC.drawParabola();glutInit(&argc,argv);可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);voidOntimer(intvalue)//定時器的回調函數{if(tmpParabola>=parabola.parabolaIndex-1){tmpParabola=0;}tmpParabola++;FruitX=parabola.parabolaPoint[tmpParabola].x;FruitY=parabola.parabolaPoint[tmpParabola].y;glutPostRedisplay();glutTimerFunc(300,Ontimer,1);}voidOntimerA(intvalue)//定時器的回調函數{if(tmpParabolaA>=parabolaA.parabolaIndex-1){tmpParabolaA=0;}tmpParabolaA++;FruitXA=parabolaA.parabolaPoint[tmpParabolaA].x;FruitYA=parabolaA.parabolaPoint[tmpParabolaA].y;glutPostRedisplay();glutTimerFunc(300,OntimerA,1);}voidOntimerB(intvalue)//定時器的回調函數{if(tmpParabolaB>=parabolaB.parabolaIndex-1){tmpParabolaB=0;}tmpParabolaB++;FruitXB=parabolaB.parabolaPoint[tmpParabolaB].x;FruitYB=parabolaB.parabolaPoint[tmpParabolaB].y;glutPostRedisplay();glutTimerFunc(300,OntimerB,1);}可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載voidOntimerC(intvalue)//定時器的回調函數{if(tmpParabolaC>=parabolaC.parabolaIndex-1){tmpParabolaC=0;}tmpParabolaC++;FruitXC=parabolaC.parabolaPoint[tmpParabolaC].x;FruitYC=parabolaC.parabolaPoint[tmpParabolaC].y;glutPostRedisplay();glutTimerFunc(300,OntimerC,1);}/*GLfloatCreatpoints(GLfloatx0,GLfloaty0,GLfloatx1,GLfloaty1,GLfloatx2,GLfloaty2){x0=-rand()/(RAND_MAX+1.0);y0=0.0;x1=0.0;y1=rand()/(RAND_MAX+1.0);x2=x0;y2=0.0;}*/voidwait(intsecond){clock_tend;end=clock()+second*CLOCKS_PER_SEC;while(clock()<end)NULL;}voidIdle(){mySleep(sleepTime);}voidmySleep(intmilisecond){Sleep(milisecond);fruitBlade.sampleFadeBlade();}可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載7.增加刀鋒效果:voidMouseMove(intx,inty)//鼠標執行函數{if(angle>=360)angle=0;angle+=(-0.002);//角度變化函數(數值±表旋轉方向)glutPostRedisplay();//角度改變即重新繪制}8.設置屏幕切換效果voidloadtexture(){QImagebuf,texturebuf;if(!buf.load("./images/background.jpg")){printf("textureerror!!!\n");}texturebuf=QGLWidget::convertToGLFormat(buf);glGenTextures(1,&texturearray[0]);glBindTexture(GL_TEXTURE_2D,texturearray[0]);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,texturebuf.width(),texturebuf.height(),0,GL_RGBA,GL_UNSIGNED_BYTE,texturebuf.bits());}voidloadtextureOther(){QImagebuf,texturebuf;if(!buf.load("./images/ad.jpg")){printf("textureerror!!!\n");}texturebuf=QGLWidget::convertToGLFormat(buf);glGenTextures(1,&texturearray[0]);glBindTexture(GL_TEXTURE_2D,texturearray[0]);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,texturebuf.width(),可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載texturebuf.height(),0,GL_RGBA,GL_UNSIGNED_BYTE,texturebuf.bits());}9.導入半個水果模型,設置當刀鋒接觸水果時把水果切成兩半的效果:t3DModelappleModel;t3DModelmeloModel,melorightModel,meloleftModel;t3DModelnimengModel,nimengleftModel,nimengrightModel;t3DModelhalfappleModel;FruitObjectappleObject;FruitObjectmeloObject[6],melorightObject[6],meloleftObject[6];FruitObjectnimengObject,nimengrightObject,nimengleftObject;FruitObjecthalfappleObject;boolisSplit1=false;boolisSplit2=false;POINT3DGLPoint;CLoad3DSmeloLoad3DS;if(!meloLoad3DS.Import3DS(&meloModel,"./3Dmodel/melo.3ds")){printf("load3dsfileerror!\n");}for(inti=0;i<6;i++){meloObject[i].get3Dmodel(&meloModel);}loadTexture();CLoad3DSnimengLoad3DS;if(!nimengLoad3DS.Import3DS(&nimengModel,"./3Dmodel/nimeng.3DS")){printf("loadfileerror!\n");}nimengObject.get3Dmodel(&nimengModel);loadTexture();CLoad3DShalfappleLoad3DS;if(!halfappleLoad3DS.Import3DS(&halfappleModel,"./3Dmodel/left_half_lemon.3DS")){printf("loadfileerror!\n");可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載}halfappleObject.get3Dmodel(&halfappleModel);loadTexture();CLoad3DSnimengleftLoad3Ds;if(!nimengleftLoad3Ds.Import3DS(&nimengleftModel,"./3dmodel/left_half_lemon.3DS")){printf("Loadthe3dmodelerror!!");}nimengleftObject.get3Dmodel(&nimengleftModel);loadTexture();CLoad3DSnimengrightLoad3Ds;if(!nimengrightLoad3Ds.Import3DS(&nimengrightModel,"./3dmodel/right_half_lemon.3DS")){printf("Loadthe3dmodelerror!!");}nimengrightObject.get3Dmodel(&nimengrightModel);loadTexture();CLoad3DSmeloleftLoad3Ds;if(!meloleftLoad3Ds.Import3DS(&meloleftModel,"./3dmodel/left_half_melo.3DS")){printf("Loadthe3dmodelerror!!");}for(inti=0;i<6;i++){meloleftObject[i].get3Dmodel(&meloleftModel);}loadTexture();CLoad3DSmelorightLoad3Ds;if(!melorightLoad3Ds.Import3DS(&melorightModel,"./3dmodel/right_half_melo.3DS")){printf("Loadthe3dmodelerror!!");}for(inti=0;i<6;i++){melorightObject[i].get3Dmodel(&melorightModel);}loadTexture();可編輯可編輯精品文檔,歡迎下載精品文檔,歡迎下載可編輯精品文檔,歡迎下載glutTimerFunc(80,onTime,1);if(isSplit1==true){nimengleftObject.draw3DModel(fruitX-0.1,fruitY-0.1,-0.5);nimengrightObject.draw3DModel(fruitX+0.1,fruitY+0.1,-0.5);}else{nimengObject.draw3DModel(fruitX,fruitY,-0.5);}if(fruitY<-0.6){isSplit1=false;}if(isSplit2==true){for(inti=0;i<6;i++){meloleftObject[i].dr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論