“大魚吃小魚”課程設計 報告
學號12080202112013-2014學年 第二學期面向對象程序設計課程設計報告題目: 大魚吃小魚專業(yè):網絡工程班級:網絡工程12(2)姓名: 管蔚雄指導教師: 徐寧成績:計算機與信息工程系2014年 6 月 6 日目 錄第一章 設計的目的與要求.2目錄中,頁碼應該從正文的第一頁算起。你的頁碼設置是錯誤的。另外,word有目錄的自動生成功能,請查詢其使用方式。 1.1設計目的.21.2設計要求.21.3實現(xiàn)功能.21.4界面設計.2第二章 開發(fā)平臺與技術.3 2.1java語言.3 2.2greenfoot.42.3環(huán)境配置.5第3章 模塊具體實現(xiàn)和主要動畫觸發(fā).7小結.8參考文獻.8附錄.92計算機與信息工程系 面向對象程序設計課程設計報告 大魚吃小魚第一章 設計目的與要求1.1 設計目的 通過用greenfoot來設計“大魚吃小魚”這個游戲,來熟悉并學會運用greenfoot這個軟件的同時鞏固我們專業(yè)課java知識。你這課程設計的目的寫的比我給的任務書還少啊。請從網絡中參考別人的課程設計目的,多寫幾行。1.2 設計要求 1.熟悉GreenFoot平臺; 2.對游戲中所需類進行設計; 3.寫出源程序文件; 4.對游戲進行調試和分析。1.3 實現(xiàn)功能敵方有三類魚(鯊魚、藍魚和小黃魚),每一類魚的對象出現(xiàn)后,在游戲中處于隨機自由移動狀態(tài),敵方大魚能吃小魚;主角為紅魚且紅魚只有一條,玩家通過鍵盤方向鍵控制移動,紅魚有兩級狀態(tài),初始時處于低級狀態(tài),只能吃黃魚,能被藍魚或鯊魚吃掉。初級狀態(tài)的紅魚經過重重險惡且吃掉一定數(shù)量的黃魚升級后,能吃黃魚和藍魚,但還是能被鯊魚吃。吃掉一定數(shù)量的魚,則顯示成功信息,結束游戲;若紅魚被鯊魚或藍魚吃掉,則顯示失敗信息。 1.4 界面設計紅魚是主角,玩家通過鍵盤方向鍵控制移動,紅魚有兩級狀態(tài):初級狀態(tài)只能吃小黃魚,會被藍魚和鯊魚吃掉;吃掉20條小黃魚后回升級即長大,能吃掉藍魚,但還是能被鯊魚吃掉。紅魚升級后,吃黃魚數(shù)量達到40,藍魚數(shù)量達到20,顯示成功信息,結束游戲;若紅魚被鯊魚或藍魚吃掉,顯示失敗信息。 敵方大魚能吃小魚,即鯊魚吃藍魚和黃魚,藍魚吃黃魚。1.這不是界面設計,而是實現(xiàn)功能。你的游戲可以升級,但是游戲的背景界面只牽涉到一個。2.文本中有圖時,要在圖片下方居中給圖一個名字,“圖1 用戶界面”,在文檔中要寫“如圖1所示”這樣的提示內容。3.此處用戶界面的截圖,應該是你導出后用戶操作界面。不應該是你的開發(fā)界面。 第二章 開發(fā)平臺和技術2.1 Java語言簡單性:Java最初是為對家用電器進行集成控制而設計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面:Java的風格類似于C+,但是Java摒棄了C+中容易引發(fā)程序錯誤的地方,如指針和內存管理。Java提供了豐富的類庫。Java自身的基本系統(tǒng)所占用空間小于250KB(即編譯器和解釋器),它實現(xiàn)了垃圾自動收集,簡化了內存的管理工作??煽啃院桶踩裕篔ava不支持指針,這杜絕了內存的非法訪問。Java的自動單元收集防止了內存丟失等動態(tài)內存分配導致的問題。Java解釋器運行時實施檢査,可以發(fā)現(xiàn)數(shù)組和宇符串訪問的越界;Java提供了異常處理機制,以便從錯誤處理任務恢復。Java通過自己的安全機制防止了病毒程序的產生和下載程序對本地系統(tǒng)的威脅破壞。當Java字節(jié)碼進進入解釋器時,首先必須經過字節(jié)碼校驗器的檢查,然后Java解釋器將決定程序中類的內存布局,隨后,類裝載器負責把來自網絡的類裝載到單獨的內存區(qū)域。此處的內容介紹顯得沒頭沒腦,如果你想說明其特點,應該在前面加一個提示信息,如“java語言的特點”等。跨平臺性:文檔中應有簡單說明,不應該加一副圖就結束。面向對象:把程序實現(xiàn)的每一個具體功能作為類,然后用類來構成對象。優(yōu)點是代碼可重用、系統(tǒng)易擴展。多線程:通過使用多線程,程序設計者可以分別用不同的線程完成特定的行為,提高系統(tǒng)的運行效率。分布性:分布式包括數(shù)據分布和操作分布。數(shù)據分布是指數(shù)據可以分散在網絡的不同主機上;操作分布是指把一個計箅分散在不同主機上處理。它支持以上兩種分布性。對于前者,Java提供了一個叫做URL的對象,利用這個對象,可以訪問Internet上的所有網絡資源;對于后者,Java提供的基于流套接字的網絡編程接口,為實現(xiàn)網絡的應用和Web應用提供了方便。豐富的類庫和API文檔特點無需面面具到。你的文章是介紹你的設計思路和內容的,對所用工具做簡單介紹就可以了。2.2 GreenFoot Greenfoot是由肯特大學的Michael和Martin開發(fā)的一款游戲程序設計平臺,主要用于程序設計的輔助教學。它是一個功能完整的開發(fā)環(huán)境,可以方便地編寫游戲和進行游戲模擬。Greenfoot也可看做是一個二維圖形程序框架和集成開發(fā)環(huán)境的結合體,它支持面向對象程序設計的全部特性,特別適;多打了符號合進行基于組件的可視化編程。 Greenfoot具備以下幾個特點:(1) 可視化程序設計界面 (2)游戲案例作為項目單元 (3)良好的社區(qū)支持2.3 環(huán)境配置 只需給出自己開發(fā)時的環(huán)境配置就可以。下面的集成開發(fā)環(huán)境介紹和安裝步驟不需要。開發(fā)運行環(huán)境:JDK(Java Development Kit)+文本編輯器( UltraEdit ) JDK是java開發(fā)工具包,包括java類庫、java編譯器、java解釋器、java運行環(huán)境和java命令行工具。 IDE:集成開發(fā)工具 JCreator (Xinox) JBuilder (Borland) Visual J+(MicroSoft) VisualAge for Java(IBM) NetBeans beans.org Eclipse http:/www.eclipse.org/downloadsJDK的安裝安裝:和一般應用程序相似,有向導指引。環(huán)境變量的設置:Path使得系統(tǒng)可以在任何路徑下識別java命令。Classpath為java加載類(class or lib)路徑,只有類在classpath中,java命令才能識別。 JDK的安裝路徑:C:Javajdkpath路徑為:C:Javajdkbinclasspath路徑為:. ; C:JavajdklibGreenfoot安裝: Greenfoot軟件直接在自己的pc機上安裝即可用。第3章 模塊具體實現(xiàn)和主要動畫觸發(fā)此處應該是你文章的主要部分,你應該有條理的介紹自己的思路。以及問題的解決思路,你的介紹太過簡單潦草,缺乏條理性。涉及的類及類名給出編號,如3.1之類。 本實驗中world類中有一個子類sea,actor類中有十個子類,分別是主角類即紅魚類Redfish,黃魚兩個類yellowfish1與yellowfish2,藍魚兩個類bluefish1與bluefish2,鯊魚類shark,水泡類blister,一個計數(shù)器Counter,一個Scoreboard,一個success。1.應首先對主界面做介紹,給出用戶界面的截圖,該圖應是你導出后的用戶操作界面。不應該是你的開發(fā)界面。你可以將環(huán)境中類的組織結構截圖下來。2.文本中有圖時,要在圖片下方居中給圖一個名字,“圖1 用戶界面”,在文檔中要寫“如圖1所示”這樣的提示內容。3.分別介紹游戲中用到的類,類的組織結構可以用開發(fā)環(huán)境中類組織結構圖,截圖下來放在文檔中,更易于人們理解。各類實現(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語句來限定。yellowfish1與yellowfish2類:黃魚在邊界消失。bluefish1與bluefish2類:藍魚在邊界消失;在其act方法里設置了吃黃魚,通過if語句,并調用sea類的getCount()方法,其數(shù)值小于等于20情況下可以吃紅魚。shark類:鯊魚在邊界消失;在act方法中設置了吃黃魚,藍魚,紅魚,并且當吃到紅魚,游戲結束,調用sea類的gameover方法。blister類:水泡在邊界消失。ScoreBoard與success類:主要是繪制分數(shù)界面背景。Counter類:用于計數(shù)的類。小結 此次課程設計,使我更扎實的掌握了本學期專業(yè)課java知識。當然,設計過程中遇到了一些困難和問題,實在想不出來的問同學或請教老師,終于游逆而解。 課程設計體現(xiàn)出自己綜合運用知識的能力,體會了學以致用、突出自己勞動成果的喜悅心情,從中發(fā)現(xiàn)自己平時學習的不足和薄弱之處。實踐出真知,通過親自設計,使我們掌握的知識不再是是紙上談兵。說實話,本次課程設計花了不少時間,時間主要花在游戲設計即代碼上,游戲做好后,感覺所花時間是值得的,個人對自己設計游戲較滿意,雖然不是做得那么精致,還存在些許需要改進的地方,我想以后有機會繼續(xù)完善它。 我認為,在這次課程設計中,不僅培養(yǎng)了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗中,我學會了很多學習的方法。而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰(zhàn),只有不斷的學習、實踐,再學習、再實踐。這對于我們的將來也有很大的幫助。以后,不管有多苦,我想我們都能變苦為樂,找尋有趣的事情,發(fā)現(xiàn)其中珍貴的事情。就像中國提倡的艱苦奮斗一樣,我們都可以在實驗結束之后變的更加成熟,會面對需要面對的事情。此次設計也讓我明白了思路即出路,有什么不懂不明白的地方要及時請教或上網查詢,只要認真鉆研,動腦思考,動手實踐,就沒有弄不懂的知識。參考文獻:Greenfoot官方網站;Java程序設計教程(牛曉太 主編)。參考文獻格式不對。附錄:(部分代碼)sea類:import greenfoot.*; public class sea extends World Counter mycounter; Counter mycounter1; GreenfootSound music;public sea() super(800, 600, 1); addObject(new Redfish(),400,300); mycounter=new Counter("吃掉的yellowfish數(shù)量:"); mycounter1=new Counter("吃掉的blue數(shù)量:"); addObject(mycounter,100,20); addObject(mycounter1,300,20); music=new GreenfootSound("justin bieber - mistletoe.mp3"); public void act() music.playLoop(); if(Greenfoot.getRandomNumber(100)<3) addObject(new yellowfish1(),0,Greenfoot.getRandomNumber(600); addObject(new yellowfish2(),800,Greenfoot.getRandomNumber(600); if(Greenfoot.getRandomNumber(100)<1) addObject(new bluefish1(),0,Greenfoot.getRandomNumber(600); addObject(new bluefish2(),800,Greenfoot.getRandomNumber(600); addObject(new shark(),0,Greenfoot.getRandomNumber(600); addObject(new blister(),Greenfoot.getRandomNumber(800),600); public void countChange() mycounter.setValue(mycounter.getValue()+1);public void countChange1() mycounter1.setValue(mycounter1.getValue()+1);public int getCount()return mycounter.getValue();public int getCount1()return mycounter1.getValue();public void gameOver()addObject(new ScoreBoard(10*(mycounter.getValue()+20*(mycounter1.getValue(), getWidth()/2, getHeight()/2);public void gameWin()addObject(new success(10*(mycounter.getValue()+20*(mycounter1.getValue(),getWidth()/2, getHeight()/2);Redfish類:import greenfoot.*; public class Redfish extends Actor GreenfootImage smallL=new GreenfootImage("Z1L.png"); GreenfootImage smallR=new GreenfootImage("Z1R.png"); GreenfootImage oldL=new GreenfootImage("Z2L.png"); GreenfootImage oldR=new GreenfootImage("Z2R.png"); public Redfish() setImage(smallL); public void act() if(Greenfoot.isKeyDown("right") if(sea)getWorld().getCount()>20 ) setImage(oldR); else setImage(smallR); move(5); if(Greenfoot.isKeyDown("left") if(sea)getWorld().getCount()>20 ) setImage(oldL); else setImage(smallL); move(-5); if(Greenfoot.isKeyDown("up") setLocation(getX(),getY()-5); if(Greenfoot.isKeyDown("down") setLocation(getX(),getY()+5); if(sea)getWorld().getCount()>20 ) if(getImage()=smallL) setImage(oldL); if(getImage()=smallR) setImage(oldR); getbluefish(); getyellowfish(); if(sea)getWorld().getCount()>40&&(sea)getWorld().getCount1()>20) Greenfoot.stop(); (sea) getWorld().music.stop(); (sea) getWorld().gameWin(); public void getyellowfish() yellowfish1 yellow1=(yellowfish1)getOneIntersectingObject(yellowfish1.class); yellowfish2 yellow2=(yellowfish2)getOneIntersectingObject(yellowfish2.class); if(yellow1!=null) Greenfoot.playSound("pop.wav"); yellow1.disappear(); (sea) getWorld().countChange(); if(yellow2!=null) Greenfoot.playSound("pop.wav"); yellow2.disappear(); (sea) getWorld().countChange(); public void getbluefish() bluefish1 blue1=(bluefish1)getOneIntersectingObject(bluefish1.class); bluefish2 blue2=(bluefish2)getOneIntersectingObject(bluefish2.class); if(blue1!=null) blue1.disappear(); Greenfoot.playSound("eating.wav"); (sea) getWorld().countChange1(); if(blue2!=null) blue2.disappear(); Greenfoot.playSound("eating.wav"); (sea) getWorld().countChange1(); 14