“大魚吃小魚”課程設計 報告
計算機與信息工程系面向對彖程序設計課程設計報告學號12080202112013-2014學年第二學期面向對象程序設計課程設計報告網(wǎng)絡工程12管蔚雄題目: 專業(yè): 班級: 姓名: 指導教師: 成績:大魚吃小魚網(wǎng)絡工程徐寧計算機與信息工程系2014年6月6日目錄第一章 設計的目的與要求21.1設計目的21.2設計要求21.3實現(xiàn)功能21.4界面設計2第二章開發(fā)平臺與技術32.1java 語言32e2greenfoot42.3環(huán)境配置5第三章模塊具體實現(xiàn)禾口主要動畫觸發(fā)7小結8參考文獻8附錄9計算機與信息工程系面向對象程序設計課程設計報告大魚吃小魚第一章設計目的與要求1.1設計目的通過用greenfoot來設計“大魚吃小魚”這個游戲,來熟悉 并學會運用greenfoot這個軟件的同時鞏固我們專業(yè)課java知識。1.2設計要求1.熟悉GreenFoot平臺;2 對游戲中所需類進行設計;3 寫出源程序文件;4.對游戲進行調(diào)試和分析。1. 3實現(xiàn)功能敵方有三類魚(鯊魚、藍魚和小黃魚),每一類魚的對象出現(xiàn)后,在游戲中 處于隨機自由移動狀態(tài),敵方大魚能吃小魚;主角為紅魚且紅魚只有一條,玩家 通過鍵盤方向鍵控制移動,紅魚有兩級狀態(tài),初始時處于低級狀態(tài),只能吃黃魚, 能被藍魚或鯊魚吃掉。初級狀態(tài)的紅魚經(jīng)過重重險惡且吃掉一定數(shù)量的黃魚升級 后,能吃黃魚和藍魚,但還是能被鯊魚吃。吃掉一定數(shù)量的魚,則顯示成功信息,結束游戲;若紅魚被鯊魚或藍魚吃掉, 則顯示失敗信息。1.4界面設計紅魚是主角,玩家通過鍵盤方向鍵控制移動,紅魚有兩級狀態(tài):初級狀態(tài)只 能吃小黃魚,會被藍魚和鯊魚吃掉;吃掉20條小黃魚后回升級即長大,能吃掉 藍魚,但還是能被鯊魚吃掉。紅魚升級后,吃黃魚數(shù)量達到40,藍魚數(shù)量達到 20,顯示成功信息,結束游戲;若紅魚被鯊魚或藍魚吃掉,顯示失敗信息。敵方大魚能吃小魚,即鯊魚吃藍魚和黃魚,藍魚吃黃魚。第二章開發(fā)平臺和技術2. 1 Java 語言簡單性:Java最初是為對家用電器進行集成控制而設計的一種語言,因此它必 須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面:Java的風格類似于C+,但是Java摒棄了 C+中容易引發(fā)程序錯誤的地方,如 指針和內(nèi)存管理。Java提供了豐富的類庫。Java自身的基本系統(tǒng)所占用空間小于250KB (即編譯器和解釋器),它實現(xiàn)了垃 圾自動收集,簡化了內(nèi)存的管理工作??煽啃院桶踩裕篔ava不支持指針,這杜絕了內(nèi)存的非法訪問。Java的自動單元收集防止了內(nèi)存丟失等動態(tài)內(nèi)存分配導致的問題。Java解釋器運行時實施檢査,可以發(fā)現(xiàn)數(shù)組和宇符串訪問的越界;Java提供了異 常處理機制,以便從錯誤處理任務恢復。Java通過自己的安全機制防止了病毒程序的產(chǎn)生和下載程序對本地系統(tǒng)的威脅 破壞。當Java字節(jié)碼進進入解釋器時,首先必須經(jīng)過字節(jié)碼校驗器的檢査,然后 Java解釋器將決定程序中類的內(nèi)存布局,隨后,類裝載器負責把來自網(wǎng)絡的類 裝載到單獨的內(nèi)存區(qū)域??缙脚_性:面向對象:把程序實現(xiàn)的每一個具體功能作為類,然后用類來構成對象。 優(yōu)點是代碼可重用、系統(tǒng)易擴展。多線程:通過使用多線程,程序設計者可以分別用不同的線程完成特定的行為, 提高系統(tǒng)的運行效率。分布性:分布式包括數(shù)據(jù)分布和操作分布。數(shù)據(jù)分布是指數(shù)據(jù)可以分散在網(wǎng)絡的 不同主機上;操作分布是指把一個計算分散在不同主機上處理。它支持以上兩種 分布性。對前者,Java提供了一個叫做URL的對象,利用這個對象,可以訪問Internet 上的所有網(wǎng)絡資源;對于后者,Java提供的基于流套接字的網(wǎng)絡編程接口,為 實現(xiàn)網(wǎng)絡的應用和Web應用提供了方便。豐富的類庫和API文檔2.2 GreenFootGreenfoot是由肯特大學的Michael和Martin開發(fā)的一款游戲程序設計平 臺,主要用于程序設計的輔助教學。它是一個功能完整的開發(fā)環(huán)境,可以方便地 編寫游戲和進行游戲模擬。Greenfoot也可看做是一個二維圖形程序框架和集成 開發(fā)環(huán)境的結合體,它支持面向對象程序設計的全部特性,特別適;合進行基于 組件的可視化編程。Greenfoot具備以卜幾個特點:(1) 可視化程序設計界面(2) 游戲案例作為項目單元(3) 良好的社區(qū)支持2.3環(huán)境配置開發(fā)運行環(huán)境:JDK (Java Development Kit) + 文本編輯器(UltraEdit )JDK是java開發(fā)工具包,包括java類庫、java編譯器、java解釋器、java 運行環(huán)境和java命令行工具。http:/www oracle. com/technetwork/java/javase/downloads/index html IDE:集成開發(fā)工具JCreator (Xinox)www. jcreator. comJBuilder (Borland)www. borland com/jbuiIder/Visual J+(Microsoft)VisualAge forJava(IBM)www-3 ibm com/software/vajava/about/index htmlNetBeanswww. netbeans orgEclipsehttp:/www eclipse org/downloadsJava SE Development Kit 7ufi1Yom muni McetM th Ofew iHnnmI tcmiM Mreement fat- i to oowmgd tht*oftwar*.you for accept mg the Oracle flinary Cod*foe Java S: you may nowdownload this sortwatvuProduct i r” D script ionOowtiKMHlLinuc ARM yOiVT Horn Float abi67 F M> |UklinuM irn vfp hVitMr<grLlHUt ARM90ft FIO41 Afil67MMB Klk-ZuM 4tnux<4irm vtp nLlav.9<Linut <86115M MB |dk卩“3、"cu其 lS843b rpmLinux*2 96 MB7u5i lintiM 1586LIHU4 *64116 96 MB jdk fu&1 .UniiMLinui131 8 MB jdkJnuM MM.lar.yf.Mac OSXaM179 49 MB >dk 7u51 nwiCMx x<M.<9ingSalMtlt JiflO(SVH4140 02 MB |dk /u>1 “oiiHgS8<itaUSolaris ifiA05 13 MB気 忖-7u5l -%oian>4506Jnr.grSol arts .C4 (SVR424 53 MO曼 ><1k TuM WCUKif|.x644ftfZSolans.16 28MD |dk FuS1 &cj<AHi mG4.tnr.qJSolaris S尸ARC (SVR4 p4CkM0l139 3勁 MH >dk > MUinw BtMSolans 9PARCea 19 MB l<lk ?m5T olwns |M<c4Ar.Q*$Ola4tS SPARC 6a mi (SVR423 94 MB |<1k Zu&1nparcvO.tArSotans SPARCIfl 33 MB Klk /u51sotann S|xncvO.Utt.g/Windows EO04 MB曼 |dk-?u5i -windowflk45S0,ex4Windows <M125 40 MB ><lte Fu51JDK的安裝安裝:和一般應用程序相似,有向導指引。Java(TK) SE Development Kit 6 Update 5-自定義安裝區(qū)自定義安裝選擇要安裝的程期能-安裝到:功能說明JavafTM) SE Deve<opment Kit 6Update 5 包括專用JRE 6Update 5.這將需要300 MB的 硬盤驅動器空間.D:3avajok<上一步下一步(LD a 辭著珈g癘険圖驚安裝完如您犧使用控制面板沖的添如9環(huán)境變量的設置:Path使得系統(tǒng)可以在任何路徑下識別java命令。Classpath 為 java 加載類(class or lib)路徑,只有類在 classpath 中,java 命令才能識別。JDK的安裝路徑:C:Javajdkpath 路徑為:C:Javajdkbinclasspath 路徑為:.;C:JavajdklibGreenfoot 安裝:Greenfoot軟件直接在自己的pc機上安裝即可用。第三章模塊具體實現(xiàn)和主要動畫觸發(fā)涉及的類及類名本實驗中world類中有一個子類sea, actor類中有十個子類,分別是主角 類即紅魚類Redfish,黃魚兩個類yellowfishl與yellowfish2,藍魚兩個類 bluefishl 與 bluefish2,鯊魚類 shark,水泡類 blister, 一個計數(shù)器 Counter, 一個 Scoreboard, 一個 successo各類實現(xiàn)的效果sea類:添加了一個紅魚的對象即主角;計數(shù)器的兩個對象分別是用于計數(shù)吃掉 黃魚的數(shù)量和吃掉藍魚的數(shù)量;黃魚與藍魚在世界里處于隨機出現(xiàn)自由移動狀 態(tài);實現(xiàn)計數(shù)器加一的方法;游戲結束的方法;游戲成功的方法;背景音樂循環(huán) 播放。Redfish類:紅魚設置四種狀態(tài),在構造方法中設置了其初始狀態(tài),然后通過if 判斷語句來限制它的狀態(tài);在act方法中設置了關聯(lián)鍵盤向左移游戲動作;吃黃 魚藍魚動作,具體實現(xiàn)通過if語句控制;魚升級及游戲成功也是在act方法中 用if語句來限定。yellowfishl與yellowfish2類:黃魚在邊界消失。bluefishl與bluefish2類:藍魚在邊界消失;在其act方法里設置了吃黃魚, 通過if語句,并調(diào)用sea類的getCount ()方法,其數(shù)值小于等于20情況下 可以吃紅魚。shark類:鯊魚在邊界消失;在act方法中設置了吃黃魚,藍魚,紅魚,并且當 吃到紅魚,游戲結束,調(diào)用sea類的gameover方法。blister類:水泡在邊界消失。 ScoreBoard與success類:主要是繪制分數(shù)界面背景。Counter類:用于計數(shù)的類。小結此次課程設計,使我更扎實的掌握了本學期專業(yè)課java知識。當然,設計 過程中遇到了一些困難和問題,實在想不出來的問同學或請教老師,終于游逆而 解。課程設計體現(xiàn)出自己綜合運用知識的能力,體會了學以致用、突出自己勞動 成果的喜悅心情,從中發(fā)現(xiàn)自己平時學習的不足和薄弱之處。實踐出真知,通過親自設計,使我們掌握的知識不再是是紙上談兵。說實話, 本次課程設計花了不少時間,時間主要花在游戲設計即代碼上,游戲做好后,感 覺所花時間是值得的,個人對自己設計游戲較滿意,雖然不是做得那么精致,還 存在些許需要改進的地方,我想以后有機會繼續(xù)完善它。我認為,在這次課程設計中,不僅培養(yǎng)了獨立思考、動手操作的能力,在各 種其它能力上也都有了提高。更重耍的是,在實驗中,我學會了很多學習的方法。 而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰(zhàn),只有不斷的學習、 實踐,再學習、再實踐。這對于我們的將來也有很大的幫助。以后,不管有多苦, 我想我們都能變苦為樂,找尋有趣的事情,發(fā)現(xiàn)其中珍貴的事情。就像中國提倡 的艱苦奮斗一樣,我們都可以在實驗結束之后變的更加成熟,會面對需要面對的 事情。此次設計也讓我明白了思路即出路,有什么不懂不明白的地方要及時請教 或上網(wǎng)查詢,只要認真鉆研,動腦思考,動手實踐,就沒有弄不懂的知識。參考文獻:Greenfoot官方網(wǎng)站;Java程序設計教程(牛曉太主編)。附錄:(部分代碼)sea 類:import greenfoot.*;public class sea extends WorldCounter mycounter;Counter mycounterl;GreenfootSound music; public seaOsuper (800, 600, 1);addObject(new Redfish 0,400, 300);mycou nt er=new Cou nt er (吃掉的 yellowfish 數(shù)量:“); mycounterl=new Counter (z,吃掉的 blue 數(shù)量:“); addObject(mycounter, 100, 20);addObject(mycounterl, 300, 20); music=new Greenf oot Sound (z,jus tin bieber - mis tleto e. mp3);public void act () music. playLoop ();if(Greenfoot. getRandomNumber (100)<3)addObject(new yellowfishl(), 0, Greenfoot, getRandomNumber(600); addObject(new yellowfish2(), 800, Greenfoot. getRandomNumber (600);if(Greenfoot. getRandomNumber (100)<1) addObject(new bluefishl(), 0, Greenfoot. getRandomNumber(600); addObject(new bluefish2 0,800, Greenfoot. getRandomNumber (600);addObject(new shark(), 0, Greenfoot, getRandomNumber(600); addObject(new blister (), Greenfoot, getRandomNumber(800), 600);public void countChange()mycouriter. setValue (mycounter. getValue ()+1);public void countChangel()mycounterl. setValue (mycounterl. getValue 0+1);public int getCount()return mycounter. getValue0;public int getCountl()return mycounterl. getValue0;public void gameOver()addObject(newScoreBoard(10*(mycouliter. getValue() +20*(mycounterl. getValue(), getWidth ()/2, getHeight ()/2);public void gameWin()addObject(newsuccess(10*(mycounter. getValue()+20*(mycounterl. getValue(), getWidt h 0 /2, getHeight ()/2);Redfish 類:import greenfoot.*;smallL=new Greenfootlmage(Z1L png); smallR=new Greenfootlmage(Z1Rpng); oldL=new Greenfootlmage(Z2L png); oldR二new Greenfootlmage (,zZ2R png);public class Redfish extends Actor GreenfootlmageGreenfootlmageGreenfootlmageGreenfootlmagepublic Redfish0 setlmage(smallL);public void act()if(Greenfoot. isKeyDown("right") if (sea) getWorld (). getCount () >20 ) setlmdge(oldR) ;else setlmage(smallR) ; move(5) ;if(Greenfoot. isKeyDown("left)if (sea) getWorld (). getCount () >20 ) 計算機與信息工程系面向對象程序設計課程設計報告setlmage(oldL) ;else setlmage(smallL) ; move (-5);if(Greenfoot. isKeyDown(up)setLocation (getX (), getY () -5);if(Greenfoot. isKeyDown(dowrT)setLocation (getX(), getY () +5);if (sea)getWorld(). getCount ()>20 )if (ge tl mage () =smallL) setlmage(oldL) ;if (getImage()=smallR) setlmage(oldR) ;getbluefish 0;getyellowfish();if (sea) getWorld (). getCount () >40&& (sea) getWorld (). getCount 1 () >20) Green foot, sto p();(sea) get World (). music, stop ();(sea) getWorld (). gameWin ();public void getyellowfishOyellowfishlyellowl=(yellowfishl)getOnelntersectingObject(yellowfishl. class); yellowfish2yellow2=(ye11owfish2)getOnelntersectingObject (yellowfish2 class); if(yellowl!=null)Greenfoot. playSound (z/pop. wav);yellowl. disappear 0 ;(sea) get World () cou nt Change ();if(yellow2!=null)Greenfoot. playSound (zzpop. wavzz);yellow2. disappear 0;(sea) get World () cou nt Change ();public void getbluefishO bluefishlbluel=(bluefishl)getOnelntersectingObject(bluefishl. class); bluefish2blue2=(bluefish2)getOnelntersectingObject(bluefish2. class); if(bluel!=null)bluel. disappear 0;Greenfoot. playSound (zzeating. wav); (sea) get World (). cou nt Changel ();if(blue2!=null)blue2. disappear 0;Greenfoot. playSound (z,eating. wav); (sea) get World (). cou nt Changel ();11