軟件開發(fā)生產(chǎn)實(shí)習(xí)報(bào)告_第1頁(yè)
軟件開發(fā)生產(chǎn)實(shí)習(xí)報(bào)告_第2頁(yè)
軟件開發(fā)生產(chǎn)實(shí)習(xí)報(bào)告_第3頁(yè)
軟件開發(fā)生產(chǎn)實(shí)習(xí)報(bào)告_第4頁(yè)
軟件開發(fā)生產(chǎn)實(shí)習(xí)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.軟件開發(fā)生產(chǎn)實(shí)習(xí)報(bào)告姓名學(xué)號(hào)李瑜1201050614信息管理與信息系項(xiàng)目名稱班級(jí)統(tǒng) 2012-1飛機(jī)大戰(zhàn)實(shí)習(xí)地點(diǎn)實(shí)習(xí)時(shí)間j13-2322014.9.20-2014.9.30實(shí)習(xí)成績(jī)指導(dǎo)教師簽字信息科學(xué)與工程學(xué)院2014年10月15日.軟件開發(fā)生產(chǎn)實(shí)習(xí)報(bào)告1. 實(shí)習(xí)目的1.1 使學(xué)生全面了解軟件項(xiàng)目實(shí)施的過程,理解軟件企業(yè)對(duì)于程序員的基本素質(zhì)和技術(shù)能力要求。1.2 使學(xué)生掌握 c+及 window 程序設(shè)計(jì)的基本技術(shù), 能夠運(yùn)用 mfc 技術(shù)及其開發(fā)環(huán)境進(jìn)行小型項(xiàng)目的開發(fā)。1.3 重點(diǎn)培養(yǎng)學(xué)生的獨(dú)立創(chuàng)新精神和查閱資料能力,提高其口頭和書面的溝通能力。1.4 使學(xué)生掌握快速學(xué)習(xí)新知識(shí)、新技術(shù)方法

2、,培養(yǎng)良好的分析問題和解決問題的能力1.5 重點(diǎn)提高學(xué)生的編程能力,使學(xué)生建立正確的編程理念,養(yǎng)成規(guī)范的編程習(xí)慣。2. 實(shí)習(xí)計(jì)劃一、 9.20-9.211、認(rèn)識(shí) mfc的基本功能,實(shí)現(xiàn)在windows 窗體上的貼圖功能;2、初步利用 brush 繪制背景的顏色,進(jìn)而掌握添加背景圖片的技術(shù);3、設(shè)置定時(shí)器進(jìn)行刷屏;二、 9.22-9.251、把握游戲的整體架構(gòu), 了解各個(gè)類之間的繼承與多態(tài)關(guān)系,對(duì)父類進(jìn)行編碼;2、對(duì)游戲?qū)ο筮M(jìn)行透明貼圖,并實(shí)現(xiàn)具體的功能;三 9.26-9.281、建立各個(gè)游戲?qū)ο蟮逆湵?,并定義對(duì)象;2、實(shí)現(xiàn)用鍵盤控制戰(zhàn)機(jī)的移動(dòng),實(shí)現(xiàn)戰(zhàn)機(jī)與戰(zhàn)機(jī)導(dǎo)彈的鏈接;3、實(shí)現(xiàn)其他游戲?qū)ο蟮囊?/p>

3、動(dòng)與速度的設(shè)定;4、實(shí)現(xiàn)戰(zhàn)機(jī)導(dǎo)彈與敵機(jī)、子彈與戰(zhàn)機(jī)矩形區(qū)域的重合的功能,并清除鏈表中需.要清除的對(duì)象;5、釋放定時(shí)器和內(nèi)存;四、 9.29-9.301、與游戲的功能與界面進(jìn)行完善,添加文字顯示和生命條等;2、對(duì)游戲進(jìn)行調(diào)試與改進(jìn)。3實(shí)習(xí)過程4.1 技術(shù)準(zhǔn)備( 1)、透明貼圖函數(shù)loadimage(cimagelist&imagelist,uintbmpid,colorrefcrmask,intcx,intcy,intninitial)/ 可用于從 bmp 文件加載位圖,主要用于將圖片放入圖像鏈表imagelist中。m_images.draw(pdc,0,m_ptpos,ild_transpa

4、rent)/ 此函數(shù)主要是將鏈表中的圖像顯示在 pdc這個(gè)句柄中。( 2)、coblist 鏈表coblistlist_ball;/ 主要是定義一個(gè) coblist 類的一個(gè)鏈表對(duì)象用于存儲(chǔ)所有的此種相關(guān)對(duì)象,易于后續(xù)的添加刪除和提取數(shù)據(jù)。position posball=null;/ 定義指針posball=list_ball.getheadposition();/指針讀取頭結(jié)點(diǎn)pball=(cball *)list_ball.getnext(posball);/指針讀取下一個(gè)結(jié)點(diǎn)( 3)、設(shè)置定時(shí)器定時(shí)器告訴 windows一個(gè)時(shí)間間隔, 然后 windows以此時(shí)間間隔周期性觸發(fā)程序。本

5、程序中使用多個(gè)定時(shí)器,分別控制不同的功能。使用settimer() 函數(shù)設(shè)置定時(shí)器,設(shè)置系統(tǒng)間隔時(shí)間,在ontimer() 函數(shù)中實(shí)現(xiàn)響應(yīng)定時(shí)器的程序。( 4)、雙緩沖技術(shù)關(guān)于雙緩沖技術(shù)主要就是利用緩存的原理進(jìn)行將所有的東西都先存.在一個(gè)緩沖得虛擬的區(qū)域, 然后再一次性的將所有的虛擬緩存中的東西都放入實(shí)在的存儲(chǔ)器中。( 5)、內(nèi)存釋放技術(shù)在此次實(shí)訓(xùn)項(xiàng)目中有太多的對(duì)象的生成和運(yùn)用,造成了內(nèi)存的極度的緊張,當(dāng)游戲進(jìn)行到一定的程度的時(shí)候就會(huì)出現(xiàn)內(nèi)存溢出現(xiàn)象。內(nèi)存釋放技術(shù)的實(shí)現(xiàn)主要是通過釋放各個(gè)滿足一定條件的對(duì)象和鏈表來實(shí)現(xiàn)的,list_bomb.removeat(b2);/removeat從 列 表

6、 中 刪 除 指 定 位 置 的 元 素delete pbomb;/刪除敵機(jī)( 6)、獲取矩形區(qū)域函數(shù)crect rc; /定義getclientrect(&rc); /獲取其矩形區(qū)域獲取結(jié)果為: rc.width() /矩形區(qū)域的寬度rc.height() /矩形區(qū)域的高度crect tmprect;tmprect.intersectrect(&brect,erect)/判斷兩個(gè)矩形是否有交接4.2 項(xiàng)目實(shí)施4.2.1 功能需求1、戰(zhàn)機(jī)數(shù)量為1,戰(zhàn)機(jī)的位置可通過鍵盤進(jìn)行控制??赏ㄟ^空格鍵控制戰(zhàn)機(jī)進(jìn)行發(fā)導(dǎo)彈,導(dǎo)彈具有一定的速度。2、2、敵機(jī)出現(xiàn)的時(shí)間和位置均為隨機(jī),敵機(jī)的速度也是隨機(jī)的, 敵機(jī)

7、發(fā)射子彈的時(shí)間也是隨機(jī)的,子彈的發(fā)射具有延時(shí)性,子彈的速度具有隨機(jī)性。3、3、導(dǎo)彈和子彈及敵機(jī)碰撞爆炸同時(shí)銷毀碰撞的物體,戰(zhàn)機(jī)和子彈及敵機(jī)碰撞爆炸同時(shí)銷毀碰撞的子彈及敵機(jī),戰(zhàn)機(jī)則判斷生命, 為 0 時(shí)銷毀否則不銷毀。 與此同時(shí)進(jìn)行分?jǐn)?shù)和生命的變化同時(shí)進(jìn)行文本的顯示提示。4、4、背景圖片的添加。為游戲提供相關(guān)背景。5、主要的攻擊規(guī)則如下:敵機(jī)可在戰(zhàn)機(jī)的上方或者下方進(jìn)行將子彈進(jìn)行射向戰(zhàn)機(jī),同時(shí)戰(zhàn)機(jī)也可根據(jù)玩家的指示進(jìn)行向上或者向下進(jìn)行發(fā)射導(dǎo)彈進(jìn)行反攻。6、主要的碰撞規(guī)則如下:1)、導(dǎo)彈和敵機(jī)的矩形區(qū)域或子彈和敵機(jī)的矩形區(qū)域相交時(shí),表示其相互發(fā)生碰撞表示其相互爆炸,銷毀游戲?qū)ο蟆?2)、戰(zhàn)機(jī)生命為

8、0,戰(zhàn)機(jī)被炸,戰(zhàn)機(jī)被銷毀,游戲結(jié)束。3)、敵機(jī)被炸毀,將其進(jìn)行銷毀同時(shí)進(jìn)行分?jǐn)?shù)的相應(yīng)的增加,并且出現(xiàn)文字提示。7、實(shí)現(xiàn)對(duì)戰(zhàn)機(jī)的生命的增減,戰(zhàn)機(jī)基本生命值為5,戰(zhàn)機(jī)射擊增加生命值,當(dāng)其被擊中后其生命就 -1 ,每銷毀一架敵機(jī)加10 分,銷毀累計(jì) 10 架敵機(jī),戰(zhàn)機(jī)的生命值加一,生命為0 時(shí)游戲結(jié)束。8、實(shí)現(xiàn)控制戰(zhàn)機(jī)速度的功能主要是用于在鍵盤控制戰(zhàn)機(jī)位置時(shí)。9、實(shí)現(xiàn)雙緩沖技術(shù)進(jìn)行解決刷屏?xí)r屏閃的問題。4.2.2 總體設(shè)計(jì)1、系統(tǒng)模塊劃分飛機(jī)大戰(zhàn)游戲主要模塊可以說是有幾個(gè)重要的類組成的。首先是老師給出的cgameobject類 , 以 及 在 其 派 生 下 的bomb,ball,enemy,myp

9、lane等 等 。 如 圖 :2、主要功能模塊主要功能是在飛機(jī)大戰(zhàn)view 類中, ontimer 函數(shù)中實(shí)現(xiàn),將各個(gè)類調(diào)用,隨機(jī)產(chǎn)生敵機(jī),子彈的輸出,爆炸的實(shí)現(xiàn)等等。它的實(shí)現(xiàn)圖可以如下實(shí)現(xiàn):.4.2.3 詳細(xì)設(shè)計(jì)與編碼#include stdafx.h#include 飛機(jī)大戰(zhàn) .h#include 飛機(jī)大戰(zhàn) doc.h#include 飛機(jī)大戰(zhàn) view.h#includemyplane.h#includeexplosion.h#includeball.h#includeenemy.h#includebomb.h#ifdef _debug#define new debug_new#unde

10、f this_filestatic char this_file = _file_;#endifvoid cmyview:ondraw(cdc* pdc)cmydoc* pdoc = getdocument();assert_valid(pdoc);void cmyview:ontimer(uint nidevent)cdc* pdc=getdc();crect rc;getclientrect(&rc);/ 雙緩存cdc memdc;/定義一個(gè)顯示設(shè)備對(duì)象cbitmap bmp;/定義一個(gè)位圖對(duì)象memdc.createcompatibledc(null);/建立與屏幕顯示兼容的內(nèi)存顯示設(shè)備

11、.bmp.createcompatiblebitmap(pdc,rc.width(),rc.height();cbitmap*oldbit=memdc.selectobject(&bmp);/ 設(shè)置背景圖cbitmap bitmap;cbrush brush;bitmap.loadbitmap(beijing);brush.createpatternbrush(&bitmap);cclientdc dc(this);memdc.fillrect(&rc,&brush);crect rect;getclientrect(&rect);/-static int life=5;static int

12、score=0;/*畫戰(zhàn)機(jī) */if(pmyplane!=null)pmyplane-draw(&memdc,0,rc);memdc.setbkmode(transparent);/透明memdc.settextcolor(rgb(255,255,20);/文字顏色memdc.textout(20,150, 分?jǐn)?shù): );memdc.textout(100,150,itoa(score,newchar,10);/itoa:把int轉(zhuǎn)為 char 字符串memdc.textout(20,180, 剩余生命: );memdc.textout(150,180,itoa(life,new char,10

13、);/ 顯示生命線cbrush brush1;brush1.createsolidbrush(rgb(255,0,0);/ 創(chuàng)建畫刷.memdc.selectobject(brush1);/ 選擇畫刷memdc.rectangle(rect.width()/2-100,10,rect.width()/2+life*60-100,30);elsememdc.setbkmode(transparent);memdc.settextcolor(rgb(255,255,20);memdc.textout(300,300,game over);/*添加戰(zhàn)機(jī)導(dǎo)彈 */position posbomb=nu

14、ll;posbomb=list_bomb.getheadposition();while(posbomb!=null)pbomb= (cbomb *)list_bomb.getnext(posbomb);pbomb-draw(&memdc,0,rc);/*添加敵機(jī) */static int n=0;if(ndraw(&memdc,0,rc) list_enemy.removeat(penemy2);delete penemy;int x=rand()%40;if(x=1)list_ball.addtail(newcball(penemy-getpoint().x+12,penemy-getpo

15、int().y+25,penemy-getmontion();/*添加敵機(jī)子彈 */position posball=null;posball=list_ball.getheadposition();while(posball!=null)pball=(cball *)list_ball.getnext(posball);pball-draw(&memdc,0,rc);/*添加爆炸效果 */position posexplosion=null;for(posexplosion=list_explosion.getheadposition();posexplosion!=null;)/gethe

16、adposition返回列表中首元素的位置.pexplosion=(cexplosion*)list_explosion.getnext(posexplosion);/getnext獲取循環(huán)遍歷中的下一個(gè)元素pexplosion-draw(&memdc,0,rc);/*戰(zhàn)機(jī)子彈炸掉敵機(jī) */if(pmyplane!=null)position b1=null,b2=null;b1=list_bomb.getheadposition();while(b2=b1)!=null)/getheadposition返回列表中首元素的位置pbomb= (cbomb*)list_bomb.getnext(b

17、1);/getnext獲取循環(huán)遍歷中的下一個(gè)元素crect brect = pbomb-getrect();/獲得導(dǎo)彈區(qū)域position e1=null,e2=null;e1=list_enemy.getheadposition();while(e2=e1)!=null)penemy=(cenemy*)list_enemy.getnext(e1);crect erect=penemy-getrect();/獲得敵機(jī)區(qū)域crect enrect;/ 定義一個(gè)區(qū)域,該區(qū)域作用為獲得導(dǎo)彈和敵機(jī)區(qū)域的交集。if(enrect.intersectrect(&brect,erect)/ 若導(dǎo)彈和敵機(jī)有交

18、集,刪除導(dǎo)彈和敵機(jī),添加爆炸效果score+=10;/ 添加炸彈效果list_explosion.addtail(new cexplosion(erect.left, erect.top);./ 刪除導(dǎo)彈list_bomb.removeat(b2);/removeat從列表中刪除指定位置的元素delete pbomb;/ 刪除敵機(jī)list_enemy.removeat(e2);delete penemy;/ 生命值與分?jǐn)?shù)換算static int a;a+;if(a%10=0)life+=1;/每擊破 10 架敵機(jī)生命數(shù)加1/*敵機(jī)子彈炸掉戰(zhàn)機(jī) */if(pmyplane!=null)posit

19、ion bpos1=null,bpos2=null;crect mrect = pmyplane-getrect();/ 獲得戰(zhàn)機(jī)區(qū)域 bpos1=list_ball.getheadposition();while( bpos2 = bpos1 ) != null)pball = (cball*)list_ball.getnext(bpos1);crect brect = pball-getrect();/獲得子彈區(qū)域crect tmprect;.if(tmprect.intersectrect(&brect,mrect)/ 子彈區(qū)域與戰(zhàn)機(jī)區(qū)域相交life-=1;/ 添加炸彈效果list_ex

20、plosion.addtail(new cexplosion(mrect.left,mrect.top);/ 刪除子彈list_ball.removeat(bpos2);delete pball;/ 刪除戰(zhàn)機(jī)if(life=0)delete pmyplane;pmyplane=null;break;/*敵機(jī)與戰(zhàn)機(jī)相撞 */if(pmyplane!=null)position bpos1=null,bpos2=null;crect mrect = pmyplane-getrect();/ 獲得戰(zhàn)機(jī)區(qū)域 bpos1=list_enemy.getheadposition(); while( bpos

21、2 = bpos1 ) != null)penemy = (cenemy*)list_enemy.getnext(bpos1); crect erect=penemy-getrect();/ 獲得敵機(jī)區(qū)域.crect tmprect;if(tmprect.intersectrect(&erect,mrect)/ 敵機(jī)區(qū)域與戰(zhàn)機(jī)區(qū)域相交score+=10;life-=1;/ 添加炸彈效果list_explosion.addtail(new cexplosion(mrect.left,mrect.top);/ 刪除敵機(jī)list_enemy.removeat(bpos2);delete penemy

22、;/ 刪除戰(zhàn)機(jī)if(life=0)delete pmyplane;pmyplane=null;break;/ 雙緩存釋放pdc-bitblt(0,0,rc.width(),rc.height(),&memdc,0,0,srccopy); memdc.selectobject(oldbit);memdc.deletedc();bmp.deleteobject();cview:ontimer(nidevent);void cmyview:onkeydown(uint nchar, uint nrepcnt, uint nflags).if(pmyplane!=null)if(nchar=vk_ri

23、ght)pmyplane-sethormotion(1);if(nchar=vk_left)pmyplane-sethormotion(-1);if(nchar=vk_up)pmyplane-setvermotion(1);if(nchar=vk_down)pmyplane-setvermotion(-1);/ 戰(zhàn)機(jī)添加導(dǎo)彈if(pmyplane!=null)int m;m=getkey(vk_space);if(m=1)list_bomb.addtail(newcbomb(pmyplane-getpoint().x,pmyplane-getp().y+20);list_bomb.a

24、ddtail(newcbomb(pmyplane-getpoint().x+20,pmyplane-getpoint().y);list_bomb.addtail(newcbomb(pmyplane-getpoint().x+40,pmyplane-getpoint().y+20);cview:onkeydown(nchar, nrepcnt, nflags);int flag = 0;void cmyview:onkeyup(uint nchar, uint nrepcnt, uint nflags)/釋放if(pmyplane!=null)if(nchar=vk_right)pmyplan

25、e-sethormotion(0);if(nchar=vk_left)pmyplane-sethormotion(0);if(nchar=vk_up)pmyplane-setvermotion(0);if(nchar=vk_down)pmyplane-setvermotion(0);.cview:onkeyup(nchar, nrepcnt, nflags);int cmyview:oncreate(lpcreatestruct lpcreatestruct)if (cview:oncreate(lpcreatestruct) = -1)return -1;/ todo: add your s

26、pecialized creation code here/ 安裝定時(shí)器settimer(1,30,null);/1是定時(shí)器的標(biāo)示符, 30ms的間隔, null表示讓窗體接受消息, 不是函數(shù) pmyplane=new cmyplane; / 顯示飛機(jī)cmyplane:loadimage();cbomb:loadimage();cenemy:loadimage();cball:loadimage();cexplosion:loadimage();return 0;void cmyview:ondestroy()/ 釋放定時(shí)器killtimer(1);delete pdc;cview:ondestroy();.4

溫馨提示

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

評(píng)論

0/150

提交評(píng)論