網(wǎng)上書店系統(tǒng)畢業(yè)論文
《網(wǎng)上書店系統(tǒng)畢業(yè)論文》由會員分享,可在線閱讀,更多相關(guān)《網(wǎng)上書店系統(tǒng)畢業(yè)論文(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、目 錄 摘 要 3 第1章 概 述 4 1.2 主要工作內(nèi)容 4 第二章 開發(fā)工具的簡介 5 2.2 Java語言的特點(diǎn) 5 2.3 Java語言的發(fā)展 7 第三章 系統(tǒng)需求分析 9 3.1 系統(tǒng)的任務(wù)概述 9 3.2 系統(tǒng)的綜合要求 9 3.2.1 硬件平臺 9 3.2.2 軟件平臺 9 第四章 系統(tǒng)詳細(xì)設(shè)計 10 4.1 界面設(shè)計的實(shí)現(xiàn) 10 4.1.1 加載圖片 10 4.1.2 分割任意圖片,然后拼圖 11 4.1.3 畫出界面 12 4.2 鼠標(biāo)事件處理 13 4.2.1 判斷鼠標(biāo)點(diǎn)擊的是哪個拼圖 14 4.2.2
2、 判斷這個拼圖可以往哪個方向移動 14 4.2.3 移動該拼圖的事件 15 如果可以移動圖片,那么就編寫以下代碼: 15 public void move(int nRow,int nCol,int nDirection) 15 { switch(nDirection) 15 4.3 判斷游戲的步數(shù)及所用時間 16 4.3.1記錄所用的步數(shù) 16 4.3.2記錄所用的時間 16 4.3.3 計算玩家的分?jǐn)?shù) 17 4.4 讓游戲能夠判斷游戲是否結(jié)束及怎樣重新開始 17 4.4.1游戲怎樣結(jié)束 17 4.4.2 游戲怎樣開始 18 4.5 讓游戲的每次初始化狀態(tài)都
3、不一樣 19 4.6 增加預(yù)覽的功能 19 4.7 添加音響效果 20 4.8 編寫HTML代碼 20 第五章 小結(jié) 22 致 謝 23 參考文獻(xiàn) 24 摘 要 JAVA語言是目前Internet上大型的WEB應(yīng)用程序開發(fā)時使用得最熱門的編程語言,本文描述了JAVA和JSP技術(shù)的特點(diǎn)以及在互聯(lián)網(wǎng)上的使用情況,介紹這兩種技術(shù)的重要編程方法和兩者之關(guān)的聯(lián)系,并完成一個基于這種技術(shù)的網(wǎng)上書店系統(tǒng)。 【關(guān)鍵字】JAVA, JavaBeans, Servlet, JSP, 網(wǎng)絡(luò)編程, 電子商務(wù), 網(wǎng)上書店 第1章 概 述 1.1 引言
4、 隨著Internet 的發(fā)展,網(wǎng)絡(luò)已經(jīng)改變了人們學(xué)習(xí)、工作和生活的方式,電子商務(wù)活動正飛速度發(fā)展,它使人類社會進(jìn)入*和“虛擬化”運(yùn)作的電子商務(wù)時代。網(wǎng)上書店系統(tǒng)是在網(wǎng)絡(luò)上建立一種虛擬的圖書書店,用戶足不出戶就可以購買到自己想要的圖書,使用戶不受時間、空間的限制,讓用戶可以更方便、更快捷地挑選圖書。同時,網(wǎng)上書店可以推動網(wǎng)上支付、郵政、速遞等服務(wù)行業(yè)的迅速發(fā)展。本文從理論和實(shí)際角度出發(fā),設(shè)計了基于XML 技術(shù)和. NET 平臺的網(wǎng)上書店系統(tǒng)。 1.2 主要工作內(nèi)容 網(wǎng)上書店系統(tǒng)主要實(shí)現(xiàn)網(wǎng)上購書和后臺管理的書店系統(tǒng),主要功能模塊描述如下: (1) 注冊登錄功能。系統(tǒng)提供免費(fèi)注冊功能
5、。注冊用戶登錄之后,可以修改個人基本信息、刪除非法用戶以及過期登錄用戶的;用戶必須登錄系統(tǒng)后才可以瀏覽圖書信息。 (2) 書籍管理功能。主要包括顯示書籍信息,增加、刪除或更新數(shù)據(jù)信息。 (3) 圖書瀏覽查詢功能。該功能提供用戶分類書籍查詢功能。用戶登錄系統(tǒng)后,系統(tǒng)應(yīng)提供本店圖書目錄供用戶搜索;用戶根據(jù)搜索條目,系統(tǒng)向用戶提供顯示查找后的書籍詳細(xì)信息。在顯示書籍詳細(xì)信息頁面,系統(tǒng)向用戶提供是否決定購買圖書。 (4) 購物車功能。當(dāng)用戶登錄系統(tǒng)后,系統(tǒng)會為用戶準(zhǔn)備一輛“購物車”。當(dāng)用戶進(jìn)行瀏覽圖書或進(jìn)行搜索到自己想要的書之后,將其添加到購物車中,每次買完后,系統(tǒng)會自動到
6、購物車界面,購物車中要清楚地顯示所購圖書的名稱、數(shù)量、價格、總價格信息。該功能還應(yīng)包括是否允許用戶更改當(dāng)前購物車中購買圖書的數(shù)量。用戶點(diǎn)擊“繼續(xù)購物”可以繼續(xù)搜索圖書,單擊“更新”后可以更新購物車的內(nèi)容。 (5) 圖書結(jié)賬功能。當(dāng)用戶購物結(jié)束,系統(tǒng)提供結(jié)賬功能。 第二章 開發(fā)工具的簡介 2.1 XML 技術(shù)的優(yōu)勢 可擴(kuò)展標(biāo)記語言( eXtensible markup language ,XML) 是由萬維網(wǎng)聯(lián)盟(World Wide Web COMsortium ,W3C) 推出用于新一代網(wǎng)絡(luò)數(shù)據(jù)表示、傳遞和交換的標(biāo)準(zhǔn),是Internet 環(huán)境中跨平臺的、依賴于內(nèi)容的技
7、術(shù)。XML 的優(yōu)勢十分顯著, 主要表現(xiàn)在如下幾個方面: (1) 良好的可讀性。在XML 文檔中,人們可以使用特定的標(biāo)記為數(shù)據(jù)定義相關(guān)的語義。 (2) 數(shù)據(jù)內(nèi)容與形式的分離。在XML 文檔中,數(shù)據(jù)的顯示樣式已從文檔中分離出來,放入相關(guān)的樣式表文件中。如果要改動數(shù)據(jù)的表現(xiàn)形式,就不需要改動數(shù)據(jù)本身,而只要改動控制數(shù)據(jù)顯示的樣式表文件。 (3) 可以輕松跨平臺應(yīng)用。XML 文檔是基于文本的,所以很容易被人和機(jī)器閱讀,也非常容易使用,便于不同設(shè)備和不同系統(tǒng)間的信息交換。XML 可以定義自己的數(shù)據(jù)格式,很容易使用軟件工具去讀、寫、交換這些格式的文檔。 (4) 方便的可擴(kuò)展性。XM
8、L 允許各個組織或個人建立適合他們自己需要的標(biāo)記集合或標(biāo)記庫,并且這些標(biāo)記集合可以迅速地投入到互聯(lián)網(wǎng)的使用中??傊?XML 技術(shù)的優(yōu)勢顯著,應(yīng)用之廣泛。XML主要在B2B (企業(yè)對企業(yè)) 或B2C(企業(yè)對客戶) 的電子商務(wù)中應(yīng)用。網(wǎng)上書店主要是把數(shù)據(jù)庫和XML 技術(shù)結(jié)合起來,讓用戶在瀏覽器中以XML 文檔形式向Web服務(wù)器進(jìn)行數(shù)據(jù)交換,Web 服務(wù)器把XML 文檔提交給XML 解析器,后臺處理程序通過XML 文件或數(shù)據(jù)庫訪問數(shù)據(jù)并進(jìn)行處理,后臺處理程序再把處理后的數(shù)據(jù)封裝成XML 文檔返回給客戶端瀏覽器。2.2 Java語言的特點(diǎn) 1. 簡單性 Java是一種簡單的語言。Java取消
9、了其它的許多編程語言中十分繁瑣的和難以理解的內(nèi)容,例如C/C++中的指針,C++中類的多重繼承等。Java語言在外觀上讓大多數(shù)程序員都感到很熟悉,這樣程序員不需要經(jīng)過長時間訓(xùn)練就能夠?qū)W會使用這種新型的程序開發(fā)工具。Java要求的基本解釋器約為40KB ,若加上基本的程序庫,約為215KB。由于Java程序很小,因此在小型機(jī)上Java程序也能夠很好地執(zhí)行。 2. 面向?qū)ο? Java是一種面向?qū)ο蟮恼Z言。這里的“對象”是指應(yīng)用程序的數(shù)據(jù)及其操作方法。Java程序的設(shè)計思想不同于C語言基于過程的程序設(shè)計思想。設(shè)計面向?qū)ο蟮某绦蛐枰獙⒕幊讨攸c(diǎn)放在資料和接口上。 3. 分布式特性 J
10、ava是一種分布式的語言。Java有一個很周全的程序庫,且很容易與HTTP和TCP/IP通信協(xié)議相配合。Java應(yīng)用程序能在網(wǎng)絡(luò)上開啟并連結(jié)使用對象,就如同透過URL鏈接使用一個本地文件系統(tǒng)。利用Java來開發(fā)分布式的網(wǎng)絡(luò)程序是Java的一個重要應(yīng)用。 4. 健壯性 用Java編寫的程序在多種情況下都能穩(wěn)定地執(zhí)行。Java與C/C++最大的不同點(diǎn)是在于Java有一個專門的指針模型,它的作用是排除內(nèi)存中的數(shù)據(jù)被覆蓋和毀損的可能性。 5. 安全性 Java是一種安全的網(wǎng)絡(luò)編程語言。Java是被設(shè)計用于網(wǎng)絡(luò)及分布的環(huán)境中的,所以Java程序的安全性自然是非常重要的。Java擁有數(shù)個階
11、層的互鎖保護(hù)措施,能有效地防止病毒的侵入和破壞行為的發(fā)生。 6. 結(jié)構(gòu)中立性 眾所周知,網(wǎng)絡(luò)是由很多不同機(jī)型的計算機(jī)組合而成的。這些計算機(jī)的CPU和操作系統(tǒng)體系結(jié)構(gòu)均有所不同。因此,要使一個應(yīng)用程序可以在每一種計算機(jī)上都能夠執(zhí)行是很難的。所幸的是,Java的編譯器能夠產(chǎn)生一種結(jié)構(gòu)中立的目標(biāo)文件格式,這使得編譯碼能夠在多數(shù)的處理器中執(zhí)行。 7. 可移植性 Java的源代碼和C/C++的源代碼一樣具有可移植性,而且Java的可移植性在相比之下還要更強(qiáng)一些。只要有對應(yīng)系統(tǒng)的解釋器,Java程序就可以在所有的系統(tǒng)上執(zhí)行。Java的原始資料形式的大小是被指定的,例如Java之所以
12、一直用“float”來表示一個32位字節(jié)的IEEE754的浮點(diǎn)運(yùn)算數(shù)字,正是因?yàn)榻^大多數(shù)的CPU都有此共同特征。Java自帶的程序庫定義了一些可移植的程序接口,這使Java語言具備了很好的可移植性。 8. 解釋型語言 Java的源程序首先由編譯器編譯成字節(jié)碼,之后再由解釋器解釋執(zhí)行。Java解釋器能直接在任何機(jī)器上執(zhí)行Java字節(jié)碼(Byte Codes),因此在進(jìn)行程序鏈接時節(jié)省了時間,這對于縮短程序的開發(fā)過程有極大的幫助。 9. 高效性 Java字節(jié)碼能迅速地轉(zhuǎn)換成機(jī)器碼(Machine Code)。Java的這種效能幾乎與C/C++沒有分別。用Java編制的Jav
13、a小應(yīng)用程序可以取代部分CGI腳本(CGI Scripts)的功能,但是考到效率方面的問題,在大多數(shù)的情況下很多客戶端的基本操作還是由腳本語言來完成的。涉及到復(fù)雜算法的計算以及一些特別的效果,就可以由Applet或者ActiveX來完成。 10. 多線程性 Java語言具有多個線程,這對于交互回應(yīng)能力和即時行為是有幫助的。 11. 動態(tài)性 Java比C/C++語言更具有動態(tài)性,更能適應(yīng)時刻在變的環(huán)境。Java不會因程序庫的更新而重新編譯程序。 2.3 Java語言的發(fā)展 Java自正式問世以來已經(jīng)歷了四年的歷程,時間雖短,發(fā)展極快。一年一度在美國舊金山召開的世界Java
14、One語言開發(fā)者大會(Java One Developer Conference)盛況空前正說明了這一點(diǎn)。四年中每年的Java One大會,既是了解Java最新技術(shù)動態(tài)、應(yīng)用成果和下一步發(fā)展趨勢的最好場所,又是推動下一年Java快速發(fā)展的重要動力。首屆Java One大會于1996年召開,各屆簡況如下: 1996年5月29-31日,第一屆,出席會議者6500余人,來自工業(yè)界的超過一半。有人評價說:“這是近年計算機(jī)界最光輝的一次盛會”。工業(yè)界相當(dāng)看好Java語言,認(rèn)為它的使用將會引起一場軟件革命:從軟件的設(shè)計風(fēng)格、設(shè)計方法、設(shè)計目標(biāo)到設(shè)計過程,都會產(chǎn)生徹底的變革,“甚至?xí)淖兇诵乔虻纳罘绞?/p>
15、”。 1997年,第二屆,出席會議者10000人。Java的追隨者不斷增加,應(yīng)用開發(fā)迅速起步。 1998年3月24-27日,第三屆,出席會議者14000余人(注冊人數(shù)),注冊門票售價1195美元,否則1395美元,即使如此,仍有不少人不惜工本,擠入會場。本次會議除了軟件巨頭微軟未參加會議外,幾乎所有的計算機(jī)公司都參加了。展廳內(nèi)設(shè)300多個展臺,先后舉行了90場專題討論會,每場參加的人數(shù)從千人至五六千人不等。會議的主題是:通過Java的培訓(xùn)來帶動Java軟件的開發(fā)和技術(shù)研究,從而發(fā)展生產(chǎn)力,獲取高額利潤,提高生活質(zhì)量,推動信息產(chǎn)業(yè)的進(jìn)步。會議展出的內(nèi)容大致如下: Java開發(fā)工具軟件
16、,如:JMF、JDK、Symantec Visual Cafe、Java Dynamic Management Kit、JFC、JNDI、Java Studio 等; 企業(yè)信息管理解決方案軟件,如:EJB(Enterprise JavaBeans); 基于Java技術(shù)的信息家電,如:機(jī)頂盒、Java電話等; 個人信息綜合服務(wù)(Java戒指)、社會信息綜合查詢亭(Kiosk); 電子商務(wù)軟件、智能卡、Java Card API 等; 網(wǎng)絡(luò)計算環(huán)境下的Java服務(wù)器軟件、遠(yuǎn)程方法調(diào)用(RMI)、基于Java技術(shù)的移動計算設(shè)備; JMS(Java Message
17、Service)用于出版、票據(jù)訂閱的軟件; JOS(Java OS)、基于Java技術(shù)的NC和Java Station。 1999年6月15-18日,第四屆,出席會議者達(dá)20000人,300多家廠商參展,舉辦400多場技術(shù)講座,555名演講者慷慨陳詞,精彩紛呈。這次大會的主要特點(diǎn)是: Java框架結(jié)構(gòu)被梳理清晰 本次JavaOne大會上,Sun公司的一個重大舉措就是公布了Java平臺的最新架構(gòu)。重新定義的Java平臺以Java 2為核心,由面向企業(yè)和服務(wù)器市場的企業(yè)版Java 2(J2EE)、面向傳統(tǒng)PC客戶機(jī)市場的標(biāo)準(zhǔn)版Java 2(J2SE)和面向信息電器等后PC終端
18、設(shè)備市場的Micro版Java 2(J2ME)三大部分組成。其中,J2EE包括Enterprise JavaBeans(EJB)、Java Server Pages & Java Servlets、Java Mail API和Java Massage Service組成。而J2ME則是原有的Personal Java、EmbeddedJava、JavaCard以及剛剛推出的Kjava組成。雖然新框架結(jié)構(gòu)中的內(nèi)容都是已有的,但這樣重新定義和組合,使得Java平臺的概念簡單化,從而變得易于理解,更適合于進(jìn)行市場推廣。 第三章 系統(tǒng)需求分析 3.1 系統(tǒng)的任務(wù)概述 這個游戲?qū)⒁粡?/p>
19、大圖打散成9張小圖,然后在游戲里任意挑8張圖,貼在9個位置中的任意位置。通過鼠標(biāo)鍵移動打亂的8張圖片,讓其復(fù)原成原來的順序,玩家就勝利了,游戲結(jié)束。 3.2 系統(tǒng)的綜合要求 3.2.1 硬件平臺 CPU: Pentium II、 Celeron800(或以上)。 內(nèi)存:256MB(或以上)。 顯卡:16MB(或以上)顯存。 硬盤:至少150M剩余空間。 3.2.2 軟件平臺 操作系統(tǒng):Microsoft Windows 2000/XP、Linux等。 開發(fā)工具:JBuilder7.0以上。 文檔工具:Microsoft Word 2000以上簡體中文版。 瀏覽工具:In
20、ternet Explorer 6.0以上。 第四章 系統(tǒng)詳細(xì)設(shè)計 4.1 界面設(shè)計的實(shí)現(xiàn) 4.1.1 加載圖片 首先找一張漂亮的圖片,用作拼圖游戲的畫面,大小為360*360像素。 首先定義兩個常量,來記錄每塊拼圖的大小。在此將大圖片分成3*3的拼圖,則每張拼圖的大小為120*120。并定義以下常量: 每張拼圖的寬:final int IMAGE_WIDTH=120; 每張拼圖的高:final int IMAGE_HEIGHT=120; 再定義10個圖片對象。其中1個用來裝入總的大圖片,9個用來裝入每個拼圖的圖片:image [] m_
21、Image=new Image[9]; 為大圖定義:image m_ImaAll; 在init()中填寫裝入圖片的代碼,如總圖的名稱為:pintu.jpg代碼如下: m_ImaAll=getImage(getCodeBase(),“img\\pintu.jpg”); 通過圖像處理工具把整個圖像分成了9個小圖像,分別命名為0.jpg-8.jpg,然后 分別加載,如圖: 總圖:pintu.jpg 以下是分圖:0.jpg 1.jpg 2.jpg
22、 3.jpg 4.jpg 5.jpg 6.jpg 7.jpg 8.jpg 用以下代碼加載8張圖片: for(int i=0;i<9;i++) { m_Image[i]=getImage(getCodeBase(),"img/"+i+".jpg"); } 將第2行第2列的拼圖初始化為第8個拼圖。將第3行第2列的拼圖初始化為無。 ImageNo[1][1]=7; ImageNo[2][1]=NO_IMAGE;
23、 并對paint方法進(jìn)行處理: if(ImageNo[i][j]==NO_IMAGE)g.fill3DRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT,true) ; else{ g.drawImage(m_Image[ImageNo[i][j]],x,y,this) ; g.drawRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT) ; } 4.1.2 分割任意圖片,然后拼圖 private void jbInit() throws Exception { m_ImaAll=getImage(getCo
24、deBase(),"img\\Image00001.jpg"); for(int i=0;i<9;i++) { m_Image[i]=createImage(IMAGE_WIDTH,IMAGE_HEIGHT); Graphics g=m_Image[i].getGraphics() ; int nRow=i/3; int nCol=i%3; g.drawImage(m_ImaAll,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,nCol*IMAGE_WIDTH,nRow*IMA
25、GE_HEIGHT,(nCol+1)*IMAGE_WIDTH,(nRow+1)*IMAGE_HEIGHT,this); } } 4.1.3 畫出界面 一、分割界面 在4.1.1中介紹了怎樣分割并加載圖片,圖片裝載完畢后,下一步設(shè)計界面,并畫出來。 讓界面在左邊留下一定的區(qū)域用來顯示游戲的一些信息,如玩家走了多少步了,玩家是否已經(jīng)贏了,等等;然后在右邊將拼圖的圖片畫出,可以定義一個常量來標(biāo)識左邊提示信息區(qū)域的寬度,代碼為: final int LEFTX=120; 為了標(biāo)識現(xiàn)在各個拼圖的排列情況,本設(shè)計定義一個二位數(shù)組: int ImageNo[][]=new int[3]
26、[3]; 數(shù)組下標(biāo)表明了這個地方為哪張拼圖,如項ImageNo[i][j]表明第(i+1)行第(j+1)列上的拼圖為第ImageNo[i][j]張拼圖。 定義一個常量,當(dāng)ImageNo的某一項等于這個常量時,表明這個位置的拼圖為空: final int NO_IMAGE=-1; 定義一個方法,用來初始化各個拼圖的排列情況,將拼圖按順序排列在各個位置上。 public void initData() { for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { ImageNo[i][j]=i*3+j; }}} 二、畫左邊的提示信
27、息區(qū)域 在Applet的paint()方法里寫代碼,按照數(shù)組所提供的信息來畫出界面。 將當(dāng)前顏色設(shè)置為深紅色,并填充左邊的提示信息區(qū)域并設(shè)置區(qū)域里的字體為華文行楷,大小20,粗體,白色,顯示位置坐標(biāo)10,40: Color c=new Color(150,0,0); g.setColor(c ); g.fillRect(0,0,LEFTX,IMAGE_HEIGHT*3); g.setFont(new Font("華文行楷",Font.BOLD ,20)) ; g.setColor(Color.white ) ; g
28、.drawString("步數(shù):"+nStep,10,40) ; 三、畫出拼圖區(qū)域 遍歷ImageNo[i][j]數(shù)組,按數(shù)組里所表述的拼圖的排列順序畫出拼圖區(qū)域: for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { int x=j*IMAGE_WIDTH+LEFTX; int y=i*IMAGE_HEIGHT; g.drawImage(m_Image[ImageNo[i][j]],x,y,this) ; g.drawRect(x,y,IMAGE_WIDT
29、H,IMAGE_HEIGHT) ; }} 4.2 鼠標(biāo)事件處理 本設(shè)計將增加對鼠標(biāo)的事件處理,這樣才能使游戲玩起來,能夠判斷游戲是否結(jié)束。 游戲應(yīng)該讓玩家在用鼠標(biāo)點(diǎn)擊能夠移動的拼圖時,移動拼圖到周圍空格的地方。 加上鼠標(biāo)Listener,實(shí)現(xiàn)它的接口: 1)首先導(dǎo)入包含MouseListener接口的包,這一步JBuilder已經(jīng)為本設(shè)計完成。 2)聲明實(shí)現(xiàn)MouseListener接口 public class pintu extends Applet implements MouseListener public void mouseClicked(MouseEvent
30、 e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} 3)給這個Applet添加MouseListener public void init() {…… addMouseListener(this); } 4.2.1 判斷鼠標(biāo)點(diǎn)擊的是哪個拼圖 int nX=e.getX()-LEFTX;
31、 int nY=e.getY(); int nRow=nY/IMAGE_HEIGHT; int nCol=nX/IMAGE_WIDTH; 4.2.2 判斷這個拼圖可以往哪個方向移動 本設(shè)計建立一個獨(dú)立的方法directionCanMove(int nCol,int nRow),返回整型值。用一個整型來代表這個拼圖可以移動的方向。定義常量(其中:1代表向上,2代表向下,3代表向左,4代表向右,-1代表不能移動): final int DIRECTION_UP=1; final int DIRECTION_DOWN=2; final int DIRECTION_LEF
32、T=3; final int DIRECTION_RIGHT=4; final int DIRECTION_NONE=-1; 需要在4個方向上依次判斷有沒有拼圖,若沒有,則返回這個方向值。若4個方向都有拼圖存在,則返回一個整數(shù)值標(biāo)志不能移動。該方法的代碼如下: public int directionCanMove(int nRow,int nCol) {if((nRow-1)>=0) if(ImageNo[nRow-1][nCol]==NO_IMAGE) return DIRECTION_UP; if((nRow+1)<=2
33、) if(ImageNo[nRow+1][nCol]==NO_IMAGE) return DIRECTION_DOWN; if((nCol-1)>=0) if(ImageNo[nRow][nCol-1]==NO_IMAGE) return DIRECTION_LEFT; if((nCol+1)<=2) if(ImageNo[nRow][nCol+1]==NO_IMAGE) return DIRECTION_RIGHT; return
34、DIRECTION_NONE; } 4.2.3 移動該拼圖的事件 如果可以移動圖片,那么就編寫以下代碼: public void move(int nRow,int nCol,int nDirection) { switch(nDirection) { case DIRECTION_UP: ImageNo[nRow-1][nCol]=ImageNo[nRow][nCol]; ImageNo[nRow][nCol]=NO_IMAGE; break; case DI
35、RECTION_DOWN: ImageNo[nRow+1][nCol]=ImageNo[nRow][nCol]; ImageNo[nRow][nCol]=NO_IMAGE; break; case DIRECTION_LEFT: ImageNo[nRow][nCol-1]=ImageNo[nRow][nCol]; ImageNo[nRow][nCol]=NO_IMAGE; break; case DIRECTION_RIGHT:
36、 ImageNo[nRow][nCol+1]=ImageNo[nRow][nCol]; ImageNo[nRow][nCol]=NO_IMAGE; break; } } 4.3 判斷游戲的步數(shù)及所用時間 4.3.1記錄所用的步數(shù) 定義兩個常量,用于存儲當(dāng)前玩家所走的步數(shù)和已經(jīng)玩的時間: int nStep=0; int nTime=0; 在mouseClicked()方法里添加如下代碼了: int nDirection=directionCanMove(nRow,nCol); if(nDirectio
37、n!=DIRECTION_NONE) {move(nRow,nCol,nDirection); nStep++; } 4.3.2記錄所用的時間 本設(shè)計通過Runnable接口來實(shí)現(xiàn)多線程,過程如下: (1)首先聲明要實(shí)現(xiàn)Runnable接口 public class pintu extends Applet implements MouseListener,Runnable{} (2)實(shí)現(xiàn)接口里的方法: public void run() { while(true) { try { timeThread.sleep(999) ;
38、 String str="你玩了"+nTime+"秒的時間"; if(nTime>200)str=str+",你可要加油啦!"; else str=str+"別緊張,慢慢來。"; showStatus(str); if(!WantStartNewGame)nTime++; }catch(Exception e){} } } 在init方法里新建一個線程: timeThread=new Thead(this); timeThread.start(); 在initData里將nTime置為0: nTi
39、me=0; 4.3.3 計算玩家的分?jǐn)?shù) 采用(1000-步數(shù)*10-時間)來記分 4.4 讓游戲能夠判斷游戲是否結(jié)束及怎樣重新開始 4.4.1游戲怎樣結(jié)束 本設(shè)計只要判斷8張拼圖是否都已經(jīng)到了正確的位置上就行了。如果是,游戲結(jié)束,并給出相應(yīng)的分?jǐn)?shù),并讓玩家可以重新開始游戲。 先定義一個Applet的成員WantStartNewGame,用來標(biāo)志游戲是否結(jié)束,是否需要重新開始新游戲: boolean WantStartNewGame=false; 方法如下: public void checkStatus() { boolean Win=true;
40、 int CorrectNum=0; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { if(ImageNo[i][j]!=CorrectNum&&ImageNo[i][j]!=NO_IMAGE) Win=false; CorrectNum++; } } if(Win)WantStartNewGame=true; } 調(diào)用這個方法后,會將當(dāng)前的游戲狀態(tài)存在WantStartNe
41、wGame里,通過查看WantStartNewGame的值,就可以得知當(dāng)前的游戲狀態(tài)是還沒有結(jié)束,還是已經(jīng)贏了。 4.4.2 游戲怎樣開始 由于每次移動拼圖之后,都要調(diào)用重畫方法,所以,本設(shè)計將這個方法的調(diào)用放到paint方法里。 在paint方法里本設(shè)計增加如下代碼,讓游戲能夠判斷當(dāng)前狀態(tài),并能夠在游戲可以結(jié)束時打印出有關(guān)信息,如“你贏了”之類的信息: public void paint(Graphics g) {…… checkStatus(); if(WantStartNewGame) { g.setColor(Color.yellow )
42、 ; g.setFont(new Font(“宋體”,Font.BOLD ,15)) ; g.drawString("你贏了,祝賀你!",5,180) ;} } 4.5 讓游戲的每次初始化狀態(tài)都不一樣 前面寫下的初始化游戲狀態(tài)的方法過于簡單,玩家只要玩過一次之后,就沒有什么可玩的了。本設(shè)計用Math包里的random()方法來產(chǎn)生隨機(jī)數(shù),用這個隨機(jī)數(shù)來初始化游戲的狀態(tài)。 randoam():返回一個double類型的值,這個值是正的,大于等于0小于1。 使用這個方法必須要注意:每個拼圖只能在游戲里出現(xiàn)一次,也就是本設(shè)計應(yīng)該在9張圖片里隨機(jī)挑出其
43、中的8張,隨機(jī)分配到9個位置中的8個位置。代碼如下: public void initData() { int[] HasDistrib=new int[9]; for(int i=0;i<9;i++)HasDistrib[i]=0; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { int ImgNo=-1; do { ImgNo=(int)(Math.random() *9); }while(HasDistrib[ImgNo]==1); ImageNo[i][j
44、]=ImgNo; HasDistrib[ImgNo]=1; } } ImageNo[(int)(Math.random() *3)][(int)(Math.random() *3)]=No_Image; nStep=0; } 4.6 增加預(yù)覽的功能 定義變量Image previewIma; 在jbInit() 方法里繼續(xù)添加: previewIma=createImage(IMAGE_WIDTH,IMAGE_HEIGHT); Graphics g= previewIma.getGraphics() ; g.drawImage(
45、m_ImaAll,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,0,0,360,360,this) ; 在paint方法里添加: g.drawImage(previewIma,0,0,this) ; 4.7 添加音響效果 一、準(zhǔn)備聲音文件 可以隨便找任何*.au或*.wav等的聲音文件,讓游戲在每一次移動拼圖時都發(fā)出這個聲音。 二、裝載聲音文件 先定義一個Applet的公共變量來保存裝載的聲音文件。 AudioClip audio1,audio2; 裝載聲音這一部分代碼寫在init方法中 audio1=getAudioClip(getCodeBase(
46、),”au/move.au”)
audio2=getAudioClip(getCodeBase(),”au/notmove.au”)
三、在必要的地方播放聲音文件。
本設(shè)計準(zhǔn)備在拼圖能夠移動的時候,播放這個聲音文件,那么代碼應(yīng)該加在mouseClicked方法里。
if(nDirection!=DIRECTION_NONE)
{ move(nRow,nCol,nDirection);
nStep++;
audio1.play() ; }
else
{ audio2.play() ; }
4.8 編寫HTML代碼
47、tml>
這是一個拼圖游戲。玩家應(yīng)該將打散的小圖拼成一張大圖
玩家可以通過鼠標(biāo)和鍵盤來移動小圖,移動的次數(shù)在左邊顯示
按replay游戲會重新開始。