泡泡堂網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第1頁
泡泡堂網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第2頁
泡泡堂網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第3頁
泡泡堂網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第4頁
泡泡堂網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

畢業(yè)設(shè)計(jì)(論文)泡泡堂網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)論文作者姓名:申請學(xué)位專業(yè):申請學(xué)位類別:論文提交日期:泡泡堂網(wǎng)絡(luò)游戲的設(shè)計(jì)與實(shí)現(xiàn)摘要網(wǎng)絡(luò)游戲開發(fā)是一項(xiàng)很大的工程,需要很多綜合性的知識。這對于剛剛?cè)腴T的開發(fā)者來說很難理解。本論文從研究開發(fā)一個(gè)模仿泡泡堂網(wǎng)絡(luò)游戲的例子出發(fā),講述網(wǎng)絡(luò)游戲開發(fā)中用到的一些最根本的知識和設(shè)計(jì)思想,使大家清晰的理解游戲開發(fā)的過程。整個(gè)設(shè)計(jì)中利用java中的swing編程,結(jié)合游戲的操作流程,對整個(gè)游戲進(jìn)行精心的設(shè)計(jì)和大量的測試,實(shí)現(xiàn)游戲軟件效勞器端和客戶端的開發(fā),為玩家提供一個(gè)友好美觀的操作界面,并添加聊天等功能以增加玩家之間的互動(dòng)性,此外實(shí)現(xiàn)了可編輯場景地圖的功能,使得游戲內(nèi)容的更加豐富,玩家交互性更好,確保了游戲更具有趣味性、靈活性,以滿足玩家對這款網(wǎng)絡(luò)游戲的要求。關(guān)鍵詞:消息傳輸;java-swing;網(wǎng)絡(luò)游戲;線程;場景TheDesignandImplementationof“PaoPaoTang〞NetworkGameAbstractNetworkgamedevelopmentisabigprojectthatrequiresalotofintegrationofknowledge.Itisdifficulttounderstandforbeginnerinthisfield.ThisthesisbaseontheresearchanddevelopmentofaGamenamed“PaoPaoTang〞,asanexample,itdescriptthedevelopmentoffundamentalknowledgeandtheorywhendesignanetworkgame,sothatwecanmoreclearlyunderstandthegamedevelopmentprocess.Thewholedesignusesthejava-swingprogramming,combineswiththeoperationofthegame,designstheentiregameanddoesnumeroustests,realizethegamesoftwarerunningatserverandclient,provideafriendlyandaestheticallypleasinginterfaceforplayers,andaddchatfunctionstoincreasethecommunionbetweentheplayerseachother.Inadditiontodesignsthescenemapeditingfunctionstomakethegameforrichercontentandbetterinteractivewithplayers.Finallytoensurethatthegameismorefunandflexibilityitcansatisfythenetworkgamerequirementsforplayers.Keywords:messagetransfers;java-swing;networkgame;thread;scene目錄論文總頁數(shù):21頁1 引言 11.1 課題背景 11.2 泡泡堂游戲簡介 11.3 本課題研究的意義 12 開發(fā)的環(huán)境及相關(guān)技術(shù)的介紹 22.1 開發(fā)環(huán)境 22.2 Java語言的特點(diǎn) 23 需求分析 23.1 游戲的操作流程 23.2 應(yīng)該解決的問題 44 系統(tǒng)設(shè)計(jì) 44.1 處理流程 44.2 數(shù)據(jù)流 54.3 部署方案 65 系統(tǒng)實(shí)現(xiàn) 65.1 代碼結(jié)構(gòu) 65.2 公共類的介紹 75.3 效勞器端的開發(fā) 85.4 客戶端 9 模塊設(shè)計(jì) 9 游戲入口程序 10 登陸 10 游戲大廳 11 對戰(zhàn)場地 136 測試 18結(jié)論 19參考文獻(xiàn) 19致謝 20聲明 21引言課題背景最近幾年游戲產(chǎn)業(yè)特別是網(wǎng)絡(luò)游戲得到飛速開展。而隨著人們工作節(jié)奏的加快,小型的、競技性的網(wǎng)絡(luò)游戲因?yàn)橛螒蛩钑r(shí)間短,競技性和娛樂性強(qiáng)等特點(diǎn),越來越受到工作人士的喜愛。盛大公司推出的“泡泡堂〞是一款比擬好也是比擬成功的網(wǎng)絡(luò)小游戲。本課題就是想對該游戲進(jìn)行分析研究,借助于它的游戲規(guī)那么,用java語言模擬開發(fā)一個(gè)類似的,功能相對簡單的網(wǎng)絡(luò)小游戲。從而使自己更清楚的認(rèn)識小游戲開發(fā)需要的知識和開發(fā)的環(huán)節(jié)和涉及到的領(lǐng)域。泡泡堂游戲簡介在2004年全世界最火爆、在線人數(shù)最多的網(wǎng)絡(luò)游戲,不是?傳奇?、?奇跡?等深受歡送的傳統(tǒng)MMO,也不是?夢幻西游?、?劍網(wǎng)?、?巨商?等一大批后起之秀,而是盛大旗下的一款休閑游戲—?泡泡堂?。?泡泡堂?是韓國第一人氣網(wǎng)絡(luò)游戲,擁有多達(dá)2500萬的注冊用戶。它以簡單趣味征服玩家。有專家將玩家區(qū)分為臨時(shí)玩家、中間玩家和忠實(shí)玩家三類。而?泡泡堂?的效勞對象大局部都是臨時(shí)玩家。對于這一概念的定義為:年齡層從10歲到20歲甚至35歲左右,每天平均游戲時(shí)間約為2小時(shí),希望選擇可以即刻得到結(jié)果、界面簡潔的游戲。臨時(shí)玩家是互聯(lián)網(wǎng)娛樂初級階段的玩家層,對數(shù)字娛樂有一定渴望,對上手較難的游戲有畏懼感。他們比忠實(shí)玩家要更廣泛,而且還是最有開發(fā)價(jià)值的目標(biāo)人群。有資料統(tǒng)計(jì),在美國臨時(shí)玩家和忠實(shí)玩家之間的比例大約是50:1,在中國這種差距可能會(huì)更高。而休閑游戲恰恰抓住了這些臨時(shí)玩家對互動(dòng)娛樂的需求。休閑游戲簡單輕松,趣味十足,臨時(shí)玩家們在短時(shí)間內(nèi)就可獲得游戲所帶來的互動(dòng)趣味和成就感。這些其實(shí)是休閑游戲成功的最大法寶。開發(fā)商非常清楚的認(rèn)識到了這一點(diǎn),他們以紅白機(jī)的?炸彈人?作為原形,針對市場開發(fā)出了?泡泡堂?。使游戲操作簡單,極易上手,富有樂趣,充分吸收了?炸彈人?的諸多優(yōu)點(diǎn)。在保存精髓的同時(shí),?泡泡堂?還開發(fā)了一些有創(chuàng)意的玩點(diǎn),參加一些很有影響力的娛樂元素〔Avatar〕,使產(chǎn)品線更豐富,滿足了臨時(shí)玩家多方面的互聯(lián)網(wǎng)娛樂需求。本課題研究的意義本課題以開發(fā)該游戲?yàn)槠脚_,綜合運(yùn)用網(wǎng)絡(luò)編程,數(shù)據(jù)之間的通訊,程序中算法的實(shí)現(xiàn),線程的分配,程序運(yùn)行中的內(nèi)存使用情況的控制等。通過這些技術(shù)的綜合運(yùn)用,更深入的了解計(jì)算機(jī)程序方面的相關(guān)知識,熟悉游戲開發(fā)的理念和流程,了解整個(gè)游戲工程開發(fā)的關(guān)注點(diǎn)。該課題屬于研究性的一個(gè)課題,不考慮商業(yè)上的應(yīng)用。只是對技術(shù)研究的并不是游戲本身的娛樂性。開發(fā)的環(huán)境及相關(guān)技術(shù)的介紹開發(fā)環(huán)境操作系統(tǒng):MicrosoftWindowsXP開發(fā)語言:java2開發(fā)包:Java(TM)2StandardEdition(5.0),JFCSwing.IDE:Eclipse3.2測試環(huán)境:局域網(wǎng),PC機(jī)Java語言的特點(diǎn)1.平臺無關(guān)性Java引進(jìn)虛擬機(jī)原理,并運(yùn)行于虛擬機(jī),實(shí)現(xiàn)不同平臺之間的Java接口。Java的數(shù)據(jù)類型與機(jī)器無關(guān)。2.平安性Java的編程類似C++,但舍棄了C++的指針對存儲器地址的直接操作,程序運(yùn)行時(shí),內(nèi)存由操作系統(tǒng)分配,這樣可以防止病毒通過指針入侵系統(tǒng)。它提供了平安管理器,防止程序的非法訪問。3.面向?qū)ο驤ava吸收了C++面向?qū)ο蟮母拍?,將?shù)據(jù)封裝于類中,實(shí)現(xiàn)了程序的簡潔性和便于維護(hù)性,使程序代碼可以只需一次編譯就可反復(fù)利用。4.分布式Java建立在TCP/IP網(wǎng)絡(luò)平臺上,提供了用HTTP和FTP協(xié)議傳送和接收信息的庫函數(shù),使用其相關(guān)技術(shù)可以十分方便的構(gòu)建分布式應(yīng)用系統(tǒng)。5.健壯性Java致力與檢查程序在編譯和運(yùn)行時(shí)的錯(cuò)誤,并自動(dòng)回收內(nèi)存,減少了內(nèi)存出錯(cuò)的可能性。Java取消了C語言的結(jié)構(gòu)、指針、#define語句、多重繼承、goto語句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動(dòng)回收不用的內(nèi)存空間。需求分析本設(shè)計(jì)主要是實(shí)現(xiàn)一個(gè)類似于“泡泡堂〞功能的網(wǎng)絡(luò)游戲。其操作流程及其主要功能如下介紹游戲的操作流程游戲的操作類似于網(wǎng)絡(luò)游戲QQ堂。其操作流程如圖1所示。圖1游戲操作流程1.首先要先運(yùn)行效勞器端,來處理各個(gè)客戶端發(fā)來的請求。2.玩家運(yùn)行客戶端,首先展現(xiàn)一個(gè)版權(quán)聲明的界面,因?yàn)橛螒蛑械膱D片來源于騰迅公司的QQ堂游戲,圖片的版權(quán)歸騰迅公司所有。3.幾秒后自動(dòng)跳到登錄界面。在這里輸入用戶名稱,密碼。因系統(tǒng)中沒有對數(shù)據(jù)庫進(jìn)行操作,并沒有保存用戶的相關(guān)信息,所以沒有注冊的功能,也沒有對密碼的正確與否進(jìn)行驗(yàn)證。輸入密碼后點(diǎn)擊登錄進(jìn)入游戲大廳,退出那么關(guān)閉程序。4.進(jìn)入大廳后,用戶可以選擇自己的角色,藍(lán)隊(duì)或者紅隊(duì),并可以進(jìn)行聊天對話。點(diǎn)擊準(zhǔn)備時(shí)將進(jìn)入準(zhǔn)備狀態(tài)。當(dāng)所有用戶都進(jìn)入準(zhǔn)備狀態(tài),游戲自動(dòng)進(jìn)入對戰(zhàn)場地進(jìn)行對戰(zhàn)游戲。5.在對戰(zhàn)時(shí),玩家可以用方向鍵盤控制人物的移動(dòng),人物只能在空地中移動(dòng),當(dāng)遇到“箱子〞時(shí),可以使用“空格鍵〞放置“泡泡〞,利用“泡泡〞的爆炸的威力去破壞周圍的障礙物〔“仙人掌〞不能被破壞掉〕。同時(shí)可以一連串放置多個(gè)“泡泡〞,放置“泡泡〞后,“泡泡〞將持續(xù)幾秒鐘才會(huì)爆炸,在這段時(shí)間玩家可以放置更多的“泡泡〞來攻擊對手,在運(yùn)動(dòng)過程中還要及時(shí)躲開“泡泡〞的爆炸區(qū)域。當(dāng)玩家被“泡泡〞炸中,那么該玩家的生命將結(jié)束,不能繼續(xù)進(jìn)行游戲6.當(dāng)有一個(gè)隊(duì)中的所有玩家都死掉,那么該隊(duì)挑戰(zhàn)失敗,對方獲勝。應(yīng)該解決的問題本程序需要解決的主要問題:1. 游戲程序是一項(xiàng)精度要求很高的程序系統(tǒng),因?yàn)槠浯a利用率很高。一個(gè)實(shí)時(shí)運(yùn)行的最終作品,每秒都會(huì)運(yùn)行成千上萬行程序,繪圖事件、鍵盤事件都會(huì)以極高的頻率在后臺等待響應(yīng),假設(shè)有絲毫的差異都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。因此,其邏輯設(shè)計(jì)應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計(jì)中。2. 網(wǎng)絡(luò)計(jì)算機(jī)之間的數(shù)據(jù)通訊:用socket進(jìn)行編程,同時(shí)由于對人同時(shí)游戲,要盡量減少網(wǎng)絡(luò)數(shù)據(jù)的傳輸量,提高傳輸效率,防止堵塞。3. 算法的設(shè)計(jì):算法是游戲的核心,要設(shè)計(jì)很好的算法,提高游戲運(yùn)行的效率,運(yùn)行速度要高,并且資源占用的要少。4. 線程的控制:由于涉及到對個(gè)玩家,并且要即時(shí)的將數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)傳輸,因此可以用多個(gè)線程來并發(fā)執(zhí)行這些操作。線程之間的同步和調(diào)度上要很好的控制。5. 雙緩存:在圖片之間相互調(diào)用轉(zhuǎn)換時(shí),圖像的畫面要流暢,不能有停頓和閃爍6. 游戲中為了美觀,適用性強(qiáng),可能需要采用外部文件引入的圖片貼圖,有關(guān)貼圖,這里使用了QQ堂游戲里的一些截圖來美化界面,同時(shí)對解決靜態(tài)或動(dòng)態(tài)、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案。以上相關(guān)技術(shù)細(xì)節(jié)和整體流程將分別在以下小節(jié)闡述。系統(tǒng)設(shè)計(jì)本游戲開發(fā)采用C/S結(jié)構(gòu),分為效勞器端和客戶端兩局部。處理流程效勞器端主要處理各個(gè)客戶端發(fā)過來的消息〔Message〕,并根據(jù)消息的類型,對消息進(jìn)行不同的處理,然后將處理后的消息轉(zhuǎn)發(fā)或者直接轉(zhuǎn)發(fā)消息到所有玩家??蛻舳四敲幢O(jiān)聽用戶的輸入動(dòng)作,包括鍵盤和鼠標(biāo)動(dòng)作,對于不同的動(dòng)作做不同的處理,并根據(jù)玩家動(dòng)作的類型,把所有信息封裝為一個(gè)消息的實(shí)體〔Message〕,然后發(fā)到效勞器端。同時(shí)要監(jiān)聽效勞器端的回復(fù)過來的消息當(dāng)收到一個(gè)新的消息,將對消息進(jìn)行解析,根據(jù)消息的類型作不同的處理,從而改變游戲場景或者狀態(tài)等。處理流程如圖2所示。圖2處理流程數(shù)據(jù)流在整個(gè)系統(tǒng)中,客戶端和效勞器端所有的信息都是通過一個(gè)封裝的Message來傳輸?shù)?,它們的傳輸?shù)據(jù)流如圖3所示〔這里以一次通訊為例〕圖3數(shù)據(jù)流當(dāng)一個(gè)客戶端把玩家的動(dòng)作封裝為一個(gè)的消息,之后發(fā)送到效勞器端。效勞器端接收到該消息,并對該消息進(jìn)行解析處理。然后將處理過的消息轉(zhuǎn)發(fā)給當(dāng)前的所有客戶端,包括消息的發(fā)出者??蛻舳耸盏皆撓ⅲ鶕?jù)消息的類型來解析,然后處理并改變當(dāng)前的場景。部署方案因?yàn)橛螒驗(yàn)橐粋€(gè)網(wǎng)絡(luò)游戲,要多個(gè)玩家同時(shí)參加互動(dòng)。所有程序有效勞器端和客戶端兩局部。它們部署圖如圖4所示:圖4部署圖效勞器端部署效勞器端程序,負(fù)責(zé)保存當(dāng)前玩家的信息,對客戶端發(fā)過來的消息進(jìn)行處理并轉(zhuǎn)發(fā)等。客戶端只需要部署客戶端程序,負(fù)責(zé)發(fā)送消息并處理游戲主要邏輯。系統(tǒng)實(shí)現(xiàn)代碼結(jié)構(gòu)圖5代碼結(jié)構(gòu)程序是用eclipse平臺開發(fā),在該平臺下代碼組織如圖5所示。代碼結(jié)構(gòu)的詳細(xì)介紹參考表1。表1代碼結(jié)構(gòu)介紹文件夾包名稱類描述Src游戲源代碼〔存放系統(tǒng)中經(jīng)常用到的類,系統(tǒng)級〕GameKey.java系統(tǒng)級參數(shù)Util.java系統(tǒng)級的類〔存放效勞器端相關(guān)的類〕Server.java效勞器端的主程序〔存放啟動(dòng)游戲所有到的類〕Game.java啟動(dòng)游戲的入口類〔存放處理一些業(yè)務(wù)邏輯的類〕Bomb.java管理放置的“泡泡〞的類Message.java用來封裝客戶端和效勞器端直接通訊的消息的類MessageManager.java管理消息的接收和發(fā)送〔存放一些可以被重用的swing組件,主要是用來UI的設(shè)計(jì)〕CenterShowDialog.java把窗口顯示的位置在屏幕上居中GameImage.java管理圖片加載創(chuàng)立的類ImageButton.java定義一個(gè)圖片按鈕ImageLabel.java定義一個(gè)圖片的label.ImagePanel.java定義一個(gè)圖片的panel〔游戲主要顯示的界面〕Login.java登陸游戲的界面GameHall.java游戲大廳的界面QQFrame.java啟動(dòng)對戰(zhàn)場景的窗口QQPad.java對戰(zhàn)場景中的畫布Images〔存放游戲所用到的圖片〕Map〔存放游戲?qū)?zhàn)場景中的地圖?!彻差惖慕榻B系統(tǒng)中定義了一些公共的類,可以被客戶端和效勞器端屢次使用,這些類里的方法多是靜態(tài)的。GameKey.java這里定義了一些系統(tǒng)級的一些參數(shù),都是靜態(tài)的。Util.java主要定義了4個(gè)方法,用戶測試時(shí)候打印信息的,全屏的,和關(guān)閉顯示窗口的方法。MessageManager.java聲明了發(fā)送消息和接收消息的兩個(gè)方法??刂浦蛻舳撕托谄鞫酥g的數(shù)據(jù)交換。效勞器端的開發(fā)效勞器端開發(fā)是使用JAVA語言中的套接字,采用TCP協(xié)議進(jìn)行通訊的。通訊的數(shù)據(jù)全部封裝在一個(gè)Message類里面。這些數(shù)據(jù)在網(wǎng)絡(luò)之間傳輸并在客戶端和效勞器端進(jìn)行解析,得到后作出相應(yīng)的動(dòng)作。處理流程參考圖6.圖6效勞器端處理流程效勞器端主要用到了java中的網(wǎng)絡(luò)編程和線程。在構(gòu)造函數(shù)中,利用默認(rèn)端口創(chuàng)立一個(gè)套接字ServerSocket〔Port〕;然后進(jìn)入一個(gè)無限循環(huán)來監(jiān)聽網(wǎng)絡(luò)連接,每當(dāng)有一個(gè)新的客戶端連接到效勞器,建立一個(gè)新的線程來處理該客戶請求。之后效勞器端繼續(xù)監(jiān)聽,等待新的客戶端連接。try{ serversocket=newServerSocket(port); System.out.println("GameServerstartedat:" +serversocket.getInetAddress().getLocalHost()+":" +serversocket.getLocalPort()); while(true){ //設(shè)置玩家的編號:1-8 if(number<8){ number++; }else{ number=0; continue; } clientsocket=serversocket.accept(); System.out.println("Connectionfrom:"+clientsocket); out=newObjectOutputStream(clientsocket.getOutputStream()); ht_out.put(clientsocket,out); ServerThreadserverThread=newServerThread(clientsocket, ht_out,number,out,allMessage); Threadthread=newThread(serverThread); thread.start(); }ServerThread被啟動(dòng)后,也執(zhí)行一個(gè)無限循環(huán),對連接通道進(jìn)行監(jiān)聽,如果有該通道發(fā)過來的信息,就對相關(guān)的信息進(jìn)行處理,之后把處理后的消息轉(zhuǎn)發(fā)給所有玩家??蛻舳耸紫仍诔绦蛑卸x了幾個(gè)通用的組件和方法:CenterShowDialog,GameImage.java,ImageButton.java,ImageLabel.java和ImagePanel.javaCenterShowDialog:這個(gè)類的功能是使顯示的圖形界面居中。ImagePanel:定義一個(gè)背景為一個(gè)image的畫板〔panel〕GameImage:這里定義了一些對圖片操作的類,如創(chuàng)立一個(gè)圖片等。ImageButton:定義一個(gè)圖片按鈕〔JButton〕ImageLabel:定義一個(gè)圖片的標(biāo)簽這些通用的組件和方法供各個(gè)模塊所公用。一些場景的設(shè)置是在它們的根底上進(jìn)行搭建的。模塊設(shè)計(jì)如圖7所示,游戲客戶端總體分為4個(gè)大的模塊:游戲入口,登陸,游戲大廳,和對戰(zhàn)場地??蛻舳丝蛻舳擞螒蛉肟诘顷懹螒虼髲d對戰(zhàn)場地提示一些版權(quán)信息輸入玩家名稱,密碼角色選擇,聊天,狀態(tài)改變利用泡泡攻擊對方圖7客戶端模塊劃分圖以下對具體模塊的設(shè)計(jì)進(jìn)行詳細(xì)介紹。游戲入口模塊主要類:Game.java 描述:顯示一個(gè)無標(biāo)題欄的窗口,提示一些版權(quán)信息,如圖8所示。圖8游戲聲明首先在它的構(gòu)造方法中初始化該JFrame的相關(guān)屬性。在main方法中,先聲明一個(gè)Game類,創(chuàng)立聲明窗口。之后調(diào)用Util方法中的showWindow()方法,顯示該窗口的動(dòng)態(tài)展開,產(chǎn)生一個(gè)動(dòng)畫的效果。窗口將停頓5秒,以便玩家有足夠的時(shí)間來閱讀相關(guān)內(nèi)容。最后調(diào)用Util方法中的closeWindow()方法來動(dòng)態(tài)地收縮關(guān)閉該窗口。隨后創(chuàng)立一個(gè)Login類,并將其顯示,進(jìn)入登錄模塊,同時(shí)隱藏該聲明信息窗口。登陸模塊主要類:Login.java描述:顯示登陸界面〔效果請參考圖9〕,并處理相關(guān)的鼠標(biāo)動(dòng)作,輸入玩家名稱,密碼等,登陸后和效勞器建立連接,并發(fā)送信息到效勞器。〔因?yàn)椴辉O(shè)計(jì)到數(shù)據(jù)庫,這里并沒有對玩家輸入的相關(guān)信息進(jìn)行驗(yàn)證,也沒有注冊玩家信息的功能〕圖9登陸界面因設(shè)計(jì)到對一些組件的監(jiān)聽,并對鼠標(biāo)事件進(jìn)行監(jiān)聽,該類實(shí)現(xiàn)了相關(guān)方法:publicclassLoginextendsJFrameimplementsActionListener,mouseMotionListener構(gòu)造方法調(diào)用init()方法對類進(jìn)行初始化,這里主要是創(chuàng)立了兩個(gè)ImageButton:login_bt和exit_bt,兩個(gè)文本框:user和password,設(shè)置它們被顯示的位置和樣式,同時(shí)為兩個(gè)ImageButton增加鼠標(biāo)監(jiān)聽事件。當(dāng)鼠標(biāo)點(diǎn)擊login_bt時(shí),將觸發(fā)一個(gè)事件,捕捉該事件,并進(jìn)行處理。處理過程:從user和password兩個(gè)文本框得到玩家輸入的信息,把這些信息作為屬性值賦值給一個(gè)新的Message實(shí)體。創(chuàng)立一個(gè)和效勞器的新的連接,把這個(gè)message發(fā)送到效勞器段。之后創(chuàng)立一個(gè)GameHall:newGameHall(msg,in,out);游戲大廳模塊主要類:GameHall.java描述:游戲大廳的主界面,同時(shí)負(fù)責(zé)處理玩家一些鼠標(biāo)事件,并和效勞器進(jìn)行通訊,發(fā)送/接受消息。當(dāng)鼠標(biāo)觸發(fā)一些事件時(shí)候,對事件的內(nèi)容進(jìn)行解析,然后根據(jù)不同的事件,創(chuàng)立不同類型的消息,把相關(guān)的必要的信息進(jìn)行封裝,最后發(fā)給效勞器。由效勞器進(jìn)行處理后,效勞器發(fā)送消息給所有客戶端,客戶端接收到消息,并對接收到的消息進(jìn)行處理,來改變大廳場景。該類中設(shè)計(jì)到對整個(gè)大廳中鼠標(biāo)和鍵盤事件的監(jiān)聽,并創(chuàng)立一個(gè)主的線程來監(jiān)聽從效勞器端發(fā)來的消息。因此該類實(shí)現(xiàn)了MouseListener,MouseMotionListener,Runnable,KeyListener等接口。構(gòu)造方法中調(diào)用了init()方法。初始化大廳用到的一些組件。整個(gè)大廳是一個(gè)ImagePanel,一個(gè)畫布。所有的組件都是在這個(gè)畫布上增加。并為這些組件增加一個(gè)監(jiān)聽器來監(jiān)聽它們的動(dòng)作。之后程序啟動(dòng)主線程,對效勞器發(fā)來的消息進(jìn)行監(jiān)聽,并在解析后作出相應(yīng)的動(dòng)作。thread=newThread(this);thread.start();當(dāng)受到一個(gè)消息時(shí),根據(jù)消息的類型,作出不同的動(dòng)作。最后調(diào)用paint()方法來刷新主畫布從而改變場景。調(diào)用paint()方法時(shí),首先把所要玩家都移除,然后重新畫整個(gè)場景:removeAllPlayer()for(Enumeratione=htPlayer.elements();e.hasMoreElements();){Messagemsg=(Message)e.nextElement();showPlayer(msg);}其中的showPlayer()方發(fā)中是根據(jù)玩家不同的編號〔number〕和小組〔team〕來把玩家的圖片畫到畫布的不同位置。并判斷該玩家現(xiàn)在的準(zhǔn)備情況,如果準(zhǔn)備好了就顯示準(zhǔn)備狀態(tài)。游戲大廳中主要實(shí)現(xiàn)了小組的選擇,聊天功能,準(zhǔn)備和取消準(zhǔn)備等功能。小組的選擇:游戲中的小組分為“藍(lán)隊(duì)〞和“紅隊(duì)〞,它們的選擇圖標(biāo)都是一個(gè)ImageButton。當(dāng)有鼠標(biāo)點(diǎn)擊它們的動(dòng)作時(shí),將觸發(fā)一個(gè)鼠標(biāo)點(diǎn)擊事件,這時(shí)鼠標(biāo)監(jiān)聽器將捕捉到該動(dòng)作。然后創(chuàng)立一個(gè)新的消息,把玩家的一些信息賦值給該消息,同時(shí)設(shè)置消息的類別為“更換小組〞,最后發(fā)送消息.這里以選擇藍(lán)隊(duì)為例:Messagetest=newMessage();test.team=GameKey.TEAM_BLUE;test.type=GameKey.MESSAGE_TYPE_CHANGE_TEAM;test.number=meMessage.number;test.UserName=meMessage.UserName;Util.printMessage("SelectTeam",test);當(dāng)客戶端收到Type為GameKey.MESSAGE_TYPE_CHANGE_TEAM〔數(shù)值為5〕的消息時(shí),從保存的所有玩家的信息中得到狀態(tài)改變的該玩家,并更換它的TEAM,之后還放到HashTable中。 for(Enumeratione=htPlayer.elements();e.hasMoreElements();){ Messagetest=(Message)e.nextElement(); if(test.number==msg.number){ test.team=msg.team; htPlayer.put(Integer.toString(test.number),test); } }最后要調(diào)用paint()方法來重新刷新該畫布,改變場景,使該玩家的顏色顯示和選擇小組顏色一致。 聊天功能:原理和小組選擇相似,首先玩家在文本框中輸入要發(fā)送的消息內(nèi)容,當(dāng)點(diǎn)擊“發(fā)送〞的圖片按鈕時(shí),觸發(fā)一個(gè)鼠標(biāo)動(dòng)作。監(jiān)視器攔截該動(dòng)作,并得到輸入文本框中的信息,把它封裝到一個(gè)消息里面Message。最后發(fā)往效勞器。效勞器端只是把消息進(jìn)行轉(zhuǎn)發(fā)給所有玩家。玩家的客戶端收到消息后,判斷該消息的類型,如果是聊天消息,將聊天的內(nèi)容提取,然后顯示在聊天信息板里面。準(zhǔn)備/取消準(zhǔn)備功能:點(diǎn)擊準(zhǔn)備圖片按鈕,觸發(fā)一個(gè)事件,然后封裝生成一個(gè)消息發(fā)送到效勞器,效勞器轉(zhuǎn)發(fā)。客戶端收到消息后把該玩家的狀態(tài)改為“準(zhǔn)備〞。之后判斷是否所有玩家都已經(jīng)準(zhǔn)備好,如果都準(zhǔn)備好,把全局變量Ready的數(shù)值設(shè)置為“OK〞,然后在主線程里判斷這個(gè)值從而得到是否所有玩家都已經(jīng)準(zhǔn)備好。都準(zhǔn)備好的話就創(chuàng)立一個(gè)新的窗口進(jìn)入對戰(zhàn)區(qū)。對戰(zhàn)場地模塊主要類:QQPad.java描述:這個(gè)類為游戲大廳的畫布,同時(shí)處理對戰(zhàn)時(shí)的主要邏輯,是整個(gè)游戲的核心。負(fù)責(zé)處理了玩家移動(dòng),泡泡的放置及引爆,障礙物的去除和勝負(fù)判斷等多個(gè)功能。當(dāng)玩家進(jìn)入大廳時(shí),程序首先要初始化場景,包括對地圖和玩家位置的初始化,并為場景增加監(jiān)聽器監(jiān)聽玩家鍵盤和鼠標(biāo)的動(dòng)作,之后啟動(dòng)一個(gè)主線程。該線程負(fù)責(zé)處理玩家的鼠標(biāo)和鍵盤動(dòng)作,并對從效勞器端接收到的消息進(jìn)行處理,從而改變當(dāng)前的場景。當(dāng)有一個(gè)小組的全部玩家都被消滅后,就判斷勝負(fù)并顯示結(jié)果,這次對戰(zhàn)就結(jié)束,返回到游戲大廳。整體流程如圖10所示。圖10對戰(zhàn)處理流程以下將對幾個(gè)主要的流程作詳細(xì)的介紹。地圖的生成地圖是每個(gè)游戲必需的一個(gè)元素,地圖主要是生成游戲的場景,然后在畫布上顯示該場景。在開發(fā)很多類型的游戲中,地圖系統(tǒng)都需要良好的設(shè)計(jì),直觀的說,我們需要的地圖系統(tǒng)僅僅是一個(gè)2D數(shù)組,然后用最快的方式將數(shù)組影射到屏幕上。地圖的設(shè)計(jì)方式有很多,大多數(shù)2D游戲是通過開發(fā)的地圖編輯器來實(shí)現(xiàn)的。而該游戲的設(shè)計(jì)是首先定義一個(gè)地圖文件,這個(gè)地圖文件是用一些0,1等數(shù)字表示一種物體。然后在用流對該文件進(jìn)行讀取,把內(nèi)容讀取到一個(gè)數(shù)組里面。不同的數(shù)字就會(huì)在場景中顯示出不同的物體。程序中首先在map文件夾下定義好一個(gè)“map1.txt〞文件,該文件是由0,1,2三種數(shù)字組成:其中,0在場景中顯示的是一個(gè)空地,1顯示的是一個(gè)箱子,2顯示為一個(gè)植物。之后通過流將數(shù)據(jù)讀取到一個(gè)數(shù)組里面:while(true){ Stringline=reader.readLine(); if(line==null){ reader.close(); break; } //過濾掉#開頭的行 if(!line.startsWith("#")){ line=line.trim(); lines.add(line); width=Math.max(width,line.length()); } }height=lines.size(); //對數(shù)組賦值 for(inti=0;i<height;i++){ Stringline=(String)lines.get(i); for(intj=0;j<line.length();j++){ intc=(int)line.charAt(j); c=c-48; //把ASC碼轉(zhuǎn)化成數(shù)字 map[j][i]=c; } }根據(jù)初始化好的數(shù)組,對數(shù)組中每一個(gè)元素的值,將顯示不同的物體,從而實(shí)現(xiàn)地圖的初始化。上例中地圖數(shù)組最終顯示到畫布中的場景如圖11所示:圖11對戰(zhàn)場地初始化場景:初始化場景主要是初始化場景中使用到的圖片,玩家的位置,為場景中的相關(guān)組件增加監(jiān)聽器等。對于玩家的位置的初始化,這里先判斷玩家的編號,每個(gè)編號對應(yīng)一個(gè)不同的位置。而顯示玩家時(shí),是通過地圖中的數(shù)據(jù)來顯示的。每一個(gè)地圖代碼代表不同的玩家狀態(tài)。地圖中的一個(gè)格子是一個(gè)數(shù)據(jù),拿map[m][n]=1322為例,這個(gè)數(shù)據(jù)“1322〞它們組成為:小組編號+當(dāng)前朝向+X軸方向的格子數(shù)+Y軸方向的格子數(shù)。其中小組和朝向的代碼制定如下:玩家的小組:1->藍(lán)隊(duì);2->紅隊(duì)朝向:1->朝北;2->朝東;3->朝南;4->朝西最后根據(jù)該數(shù)值,來最終決定該玩家的當(dāng)前的狀態(tài),根據(jù)狀態(tài)中的位置朝向等信息,在場景中顯示相應(yīng)的圖片來創(chuàng)造當(dāng)前狀態(tài)下玩家的實(shí)體。玩家移動(dòng)對戰(zhàn)過程處理流程的原理和大廳相似,不過很多是對鍵盤的監(jiān)聽。當(dāng)按下鍵盤的方向鍵的時(shí)候,監(jiān)聽器將捕獲該動(dòng)作,然后將該動(dòng)作的信息封裝為一個(gè)消息,在效勞器端再對消息進(jìn)行轉(zhuǎn)發(fā)給所有玩家。玩家收到消息,對消息進(jìn)行解析,得用戶的操作,然后改變玩家對應(yīng)單元格的代碼,之后刷新整個(gè)畫布,玩家的位置將做出變化。其中在移動(dòng)玩家的時(shí)候,要先判斷前方是否有障礙物或者是否已經(jīng)到達(dá)了邊界,是的話將不能進(jìn)行移動(dòng)。泡泡處理泡泡的顯示也是用一個(gè)數(shù)組坐標(biāo)來表示,不過這個(gè)是另外建了一個(gè)新的數(shù)組map2[][],它的大小和場景坐標(biāo)一樣,但是狀態(tài)只有兩種:放置的泡泡和爆炸中的泡泡。當(dāng)玩家按下空格建,將會(huì)把玩家當(dāng)前位置出放置一個(gè)泡泡,即把map2中的對應(yīng)狀態(tài)改為“8〞。放置泡泡的時(shí)候,其實(shí)建立了一個(gè)泡泡的線程,為這個(gè)泡泡設(shè)置位置,然后就啟動(dòng)該線程,當(dāng)停頓4妙后,將把這個(gè)泡泡給引爆。pad.setBomb(m,n); sleep(sleepTime);//sleepTime=4s pad.Bombing(m,n,power); sleep(500); pad.cleanBomb(); sleep(1000); pad.cleanPlayer();引爆時(shí)調(diào)用了Bombing方法。該方法主要是根據(jù)泡泡的威力,把在爆炸范圍內(nèi)的箱子或者玩家給去除。也就是改變坐標(biāo)的代碼。首先要顯示一個(gè)爆炸時(shí)候的圖片,之后清楚相關(guān)的物體。for(inti=m;i<=m+power;i++){//向右 if(i>=15){ break; } if(map[i][n]==2){ break; } if(map[i][n]==0){ map[i][n]=88; } if(map[i][n]==1){ map[i][n]=88; break; } ……}泡泡的爆炸場景顯示持續(xù)半秒后,將把爆炸范圍內(nèi)的物體〔植物除外〕的值設(shè)置為0,這樣在下次刷新場景時(shí)將清理被炸掉的物體。結(jié)束判斷:在每次泡泡爆炸后,都要進(jìn)行一次判斷,首先要判斷是否有玩家被炸到,如果有就將該玩家的狀態(tài)設(shè)置為’DEAD’,然后判斷整個(gè)小組是否所有成員都已經(jīng)dead掉,如果是,那么認(rèn)定該組失敗,而對方獲勝。游戲結(jié)束。if(myLive==0&&blue_team_alive==true&&red_team_alive==true){ g.drawImage(deathImg,84,140,this); } if(myTeam==1){ if(!blue_team_alive){ g.drawImage(lossImg,84,140,this); } if(!red_team_alive){ g.drawImage(winImg,84,140,this); } } if(myTeam==-1){ if(!red_team_alive){ g.drawImage(lossImg,84,140,this); } if(!blue_team_alive){ g.drawImage(winImg,84,140,this); } }測試因?yàn)橥耆_發(fā)一個(gè)完整的網(wǎng)絡(luò)游戲需要巨大的時(shí)間和精力上的投入,該程序的主要目的是研究泡泡堂游戲的主體開發(fā)原理和流程。在開發(fā)過程中還有一些BUG要完善。測試過程中主要精力分析數(shù)據(jù)在傳輸過程中數(shù)據(jù)喪失和對戰(zhàn)中玩家坐標(biāo)的調(diào)整上。為了最大可能的增加系統(tǒng)的穩(wěn)定性,曾大范圍的改變了游戲的設(shè)計(jì)思想,爭取做到最優(yōu)。通過測試,整個(gè)游戲能夠很好的完成整個(gè)操作流程。并可以實(shí)現(xiàn)多人登陸,在游戲大廳進(jìn)行信息交換,和在對戰(zhàn)場地進(jìn)行對戰(zhàn)等功能,到達(dá)了預(yù)期目標(biāo)。結(jié)論通過本次課題的研究,很好的把握開發(fā)網(wǎng)絡(luò)游戲的整個(gè)流程及其設(shè)計(jì)思想,更加深入的理解JAVA語言的編程思想。開發(fā)改游戲綜合靈活的運(yùn)用了swing中主要組件,很好的設(shè)計(jì)并優(yōu)化美觀了游戲的界面,使其更加貼近玩家。作為一個(gè)可運(yùn)行的網(wǎng)絡(luò)游戲,游戲全部實(shí)現(xiàn)了登陸,游戲大廳,對戰(zhàn)等必須的場景。并為玩家提供一個(gè)互動(dòng)的聊天平臺,這樣極大的提高了游戲的趣味性,吸引玩家的興趣。開發(fā)一個(gè)好的網(wǎng)絡(luò)游戲是一項(xiàng)很復(fù)雜的工程,不僅僅是程序的實(shí)現(xiàn),游戲劇本,美工,人物角色劃分,任務(wù)分派等,都是影響一個(gè)游戲成敗的關(guān)鍵因素。為了獲得最大化的市場空間,增加吸引玩家興趣的趣味性必不可少。作為本課題研究的對象,“泡泡堂〞游戲在實(shí)際的開發(fā)中,可以在課題研究的理論根底上增加數(shù)據(jù)庫管理,記錄游戲中必要的信息,并增加速度和威力等因素,增強(qiáng)游戲的趣味性,使游戲真正產(chǎn)生實(shí)際的使用價(jià)值。參考文獻(xiàn)[1]耿祥義,張躍平.java2使用教程[M].北京:清華大學(xué)出版社,2004[2]DavidBrackeen[美].Java游戲編程[M].邱仲潘譯.北京:科學(xué)出版社,2004[3]KathyWalrath[美].JFCSwing標(biāo)準(zhǔn)教材[M].鄧一凡譯.北京:電子工業(yè)出版社,2005[4]BruceEckel[美].Java編程思想[M].陳昊鵬譯.北京:機(jī)械工業(yè)出版社,2005[5]赤金,聶松.JavaApplet實(shí)例編程[M].北京:中國水利水電出版社,2003[6]彭波,孫一林.java多媒體技術(shù)[M].北京:清華大學(xué)出版社,2005[7]黃嘉輝.Java網(wǎng)絡(luò)程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002致謝本論文的工作是2007年2月至2007年06月在成都信息工程學(xué)院網(wǎng)絡(luò)工程系完成的。在整個(gè)系統(tǒng)設(shè)計(jì)和論文寫作過程中得到了很多人的支持。在此感謝他們感謝我的導(dǎo)師甘剛老師,感謝我的室友們,從遙遠(yuǎn)的家來到這個(gè)陌生的城市里,是你們和我共同維系著彼此之間兄弟般的感情,維系著寢室那份家的融洽。在論文完成過程中為我提供了很好的環(huán)境。感謝我的爸爸媽媽,養(yǎng)育之恩,無以回報(bào),你們永遠(yuǎn)健康快樂是我最大的心愿。在論文完成過程中,本人還得到了其他老師和許多同學(xué)的熱心幫助,本人向他們表示深深的謝意!最后向在百忙之中評審本文的各位專家、老師表示衷心的感謝!作者簡介姓名:何震雨 性別:男出生年月:1985年02月 民族:漢E-mail:聲明本論文的工作是2007年2月至2007年6月在成都信息工程學(xué)院網(wǎng)絡(luò)工程系完成的。文中除了特別加以標(biāo)注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機(jī)構(gòu)的學(xué)位或證書而使用過的材料。除非另有說明,本文的工作是原始性工作。關(guān)于學(xué)位論文使用權(quán)和研究成果知識產(chǎn)權(quán)的說明:本人完全了解成都信息工程學(xué)院有關(guān)保管使用學(xué)位論文的規(guī)定,其中包括:〔1〕學(xué)校有權(quán)保管并向有關(guān)部門遞交學(xué)位論文的原件與復(fù)印件?!?〕學(xué)??梢圆捎糜坝 ⒖s印或其他復(fù)制方式保存學(xué)位論文?!?〕學(xué)??梢詫W(xué)術(shù)交流為目的復(fù)制、贈(zèng)送和交換學(xué)位論文?!?〕學(xué)??稍试S學(xué)位論文被查閱或借閱?!?〕學(xué)??梢怨紝W(xué)位論文的全部或局部內(nèi)容〔保密學(xué)位論文在解密后遵守此規(guī)定〕。除非另有科研合同和其他法律文書的制約,本論文的科研成果屬于成都信息工程學(xué)院。特此聲明!作者簽名:2007年06月日"Areyouhungrynow?""No,Iamtiredandlazynow;ifIpursueyouIwillnotcatchyou,andifIcatchyou-throughyourownslownessandclumsiness-Iwillnotkillyou,andifIkillyouIwillnoteatyou."Nicholashadbeguntobackaway,andatthelast;words,realizingthattheywereasignal,heturnedandbegantorun,splashingthroughtheshallowwater.Ignacioranafterhim,muchhelpedbyhislongerlegs,hishairflyingbehindhisdarkyoungface,hissquareteeth-eachwhiteasaboneandasbigasNicholas'sthumbnail-showinglikespectatorswholinedtherailingsofhislips."Don'trun,Nicholas,"Dr.Islandsaidwiththevoiceofawave."Itonlymakeshimangrythatyourun."Nicholasdidnotanswer,butcuttohisleft,upthebeachandamongthetrunksofthepalms,sprintingallthewaybecausehehadnowayofknowingIgnaciowasnotrightbehindhim,abouttograbhimbytheneck.Whenhestoppeditwasinthethickjungle,amongthebolesofthehardwoods,whereheleaned,.;outofbreath,thethumpingofhisownhearttheonly'.soundinanatmospheresilentandunwakedasEarth'slong,prehumanday.ForatimehelistenedforanysoundIgnaciomightmakesearchingforhim;therewasnone.Hedrewadeepbreaththenandsaid,"Well,that'sover,"expectingDr.Islandtoanswerfromsomewhere;therewasonlythegreenhush.Thelightwasstillbrightandstrongandnearly,shadowless,butsomeinteriorsensetoldhimtheday,wasnearlyover,andhenoticedthatsuchfaintshadesashecouldseestretchedlong,horizontaldistortionsoftheirobjects.Hefeltnohunger,buthehadfastedbe-'foreandknewonwhichsideofhungerhestood;hewasnotasstrongashehadbeenonlyadaypast,andbythistimenextdayhewouldprobablybeunabletooutrunIgnacio.Heshould,henowrealized,haveeatenthemonkeyhehadkilled;buthisstomachrevoltedatthethoughtoftherawflesh,andhedidnotknowhowhemightbuildafire,althoughIgnacioseemedtohavedonesothenightbefore.Rawfish,evenifhewereabletocatchafish,wouldbeasbad,orworse,thanrawmonkey;herememberedhisefforttoopenacoconut-hehadfailed,butitwassurelynotimpossible.Hismindwashazyastowhatacoconutmightcontain,buttherehadtobeanediblecore,becausetheywereeateninbooks.HedecidedtomakeawidesweepthroughthejunglethatwouldbringhimbacktothebeachwellawayfromIgnacio;hehadseveraltimesseencoconutslyinginthesandunderthetrees.Hemovedquietly,stillalittleafraid,tryingtothinkofwaystoopenthecoconutwhenhefoundit.Heimaginedhimselfstandingbeforealargeandraggedlyfacetedstone,holdingthecoconutinbothhands.Heraiseditandsmasheditdown,butwhenitstruckitwasnolongeracoconutbutMaya'shead;heheardhernosecartilagebreakwithadistinct,rubberysnap.Hereyes,asblueastheskyaboveMadhyaPradesh,thesparklingblueskyoftheegg,lookedupathim,buthecouldnolongerlookintothem,theyretreatedfromhisown,anditcametohimquitesuddenlythatLucifer,infalling,musthavefallenup,intothefiresandthecoldnessofspace,neveragaintoseethewarmbluesandbrownsandgreensofEarth:1waswatchingSatanfallaslightningfromheaven.Hehadheardthatontapesomewhere,buthecouldnotrememberwhere.HehadreadthatonEarthlightningdidnotcomedownfromtheclouds,butleapedupfromtheplanetarysurfacetowardthem,nevertoreturn."Nicholas."Helistened,butdidnothearhisnameagain.Faintlywaterwasbabbling;hadDr.Islandusedthatsoundtospeaktohim?Hewalkedtowarditandfoundalittlerillthatthreadedawayamongthetrees,andfollowedit.Inahundredstepsitgrewbroader,slowed,andendedinalongblindpoolunderadomeofleaves..Dianewassittingonmossonthesideoppositehim;shelookedupasshesawhim,andsmiled."Hello,"hesaid."Hello,Nicholas.IthoughtIheardyou.Iwasn'tmistakenafterall,wasI?""Ididn'tthinkIsaidanything."Hetestedthedarkwaterwithhisfootandfoundthatitwasverycold."Yougavealittlegasp,Ifancy.Iheardit,andIsaidtomyself,that'sNicholas,andIcalledyou.ThenIthoughtImightbewrong,orthatitmightbeIgnacio.""Ignaciowaschasingme.Maybehestillis,buththinkhe'sprobablygivenupbynow."Thegirlnodded,lookingintothedarkwatersoftheypool,butdidnotseemtohaveheardhim.Hebegantoworkhiswayaroundtoher,climbingacrossthesnakelikerootsofthecrowdingtrees."WhydoesIgnaciowanttokillme,Diane?""Sometimeshewantstokillme,too,"thegirlsaid."Butwhy?""Ithinkhe'sabitfrightenedofus.Haveyouevertalkedtohim,Nicholas?""TodayIdidalittle.Hetoldmeastoryaboutapetfishheusedtohave.""Ignaciogrewupallalone;didhetellyouthat?On=Earth.OnaplantationinBrazil,wayuptheAmazon--Dr.Islandtoldme.""IthoughtitwascrowdedonEarth.""Thecitiesarecrowded,andthecountrysideclosestothecities.Butthereareplaceswhereit'semptiethanitusedtobe.WhereIgnaciowas,therewouldhavebeenRedIndianhunterstwoorthreehundredyearsago;whenhewasthere,therewasn'tanyone,`justthemachines.Nowhedoesn'twanttobelookedat,doesn'twantanyonearoundhim."Nicholassaidslowly,"Dr.Islandsaidlotsofpeoplewouldn'tbesickifonlythereweren'totherpeoplearoundallthetime.Rememberthat?"a"Onlythere.areotherpeoplearoundallthetime;that'showtheworldis." "NotinBrazil,maybe,"Nicholassaid.HewastryingtoremembersomethingaboutBrazil,buttheonlythinghecouldthinkofwasaparrotsinginginastrawhatfromthecomviewcartoons;andthenaturtleandahedgehogthatturnedintoarmadillosfortheloveofGod,Montressor.Hesaid,"Whydidn'thestaythere?" "DidItellyouaboutthebird,Nicholas?"Shehadbeennotlisteningagain. "Whatbird?" "Ihaveabird.Inside."Shepattedtheflatstomachbelowhersmallbreasts,andforamoment,Nicholasthoughtshehadreallyfoundfood."Shesitsinhere.Shehastangledanestinmyentrails,whereshesitsandtearsatmybreathwithherbeak.Ilookhealthytoyou,don'tI?ButinsideI'mhollowandrottenandturningbrown,dirtandoldfeathers,oozingaway.Herbeakwillbreakthroughsoon." "Okay."Nicholasturnedtogo. "I'vebeendrinkingwaterhere,tryingtodrownher.IthinkI'veswallowedsomuchIcouldn'tstandupnowifItried,butsheisn'tevenwet,anddoyouknowsomething,Nicholas?I'vefoundoutI'mnotreallyme,I'mher." TurningbackNicholasasked,"Whenwasthelasttimeyouhadanythingtoeat?" "Idon'tknow.Two,threedaysago.Ignaciogavemesomething." "I'mgoingtotrytoopenacoconut.IfIcanI'llbringyoubacksome." Whenhereachedthebeach,Nicholasturnedandwalkedslowlybackinthedirectionofthedeadfire,thistimealongtherimofdampenedsandbetweentheseaandthepalms.Hewasthinkingaboutmachines. Therewerehundredsofthousands,perhapsmillions,ofmachinesoutbeyondthebelt,butfewornoneofthesophisticatedservantrobotsofEarth-thosewereluxuries.WouldIgnacio,inBrazil(whateverthatwaslike),havehadsuchluxuries?Nicholasthoughtnot;thoserobotswerealmostlikepeople,andlivingwiththemwouldbelikelivingwithpeople.NicholaswishedthathecouldspeakBrazilian. TherehadbeenthetherapyrobotsatSt.John's;Nicholashadnotlikedthem,andhedidnotthinkIgnaciowouldhavelikedthemeither.Ifhehadlikedhistherapyrobotheprobablywouldnothavehadtobesenthere.Hethoughtofthechippedandrustedoldmachinethathadcleanedthecorridors-MayahadcalleditCorradora,butnooneelseevercalleditany-FthingbutHey!Itcouldnot(oratleastdidnot)speak,1andNicholasdoubtedthatithademotions,exceptpossiblyasortofloveofcleannessthatdidnotextendtoitsownperson."Youwillunderstand,"someonewassayinginsidehishead,"thatmotivesofallsortscanbedividedintotwosorts."Adoctor?Atherapyrobot?Itdidnotmatter."Extrinsicandintrinsic.Anextrinsicmotivehasalwayssomefurtherendinview,andthatendwecallanintrinsicmotive.Thuswhenwehavereducedmotivationtointrinsicmotivationwehavereducedittoitssimplestparts.Takethatmachineoverthere." Whatmachine? "Freudwouldhavesaidthatitwasfixatedatthelatteranalstage,perhapsduetothecareitsbuildersexercisedinseeingthatthedirtitcollectsisnotreleasedagain.Becauseofitsfixationitis,asyousee,obsessedwithcleanlinessandorder;compulsivesweepingandscrubbingpalliateitsanxieties.ItisastrengthofFreud'stheory,andnotaweakness,thatitserves`toexplainmanyoftheactivitiesofmachinesaswellastheactsofpersons." Hellothere,Corradora. Andhello,Ignacio. Myhead,movingfromsidetoside,mustremindyouofaradarscanner.Mystepsaremeasured,slow,andprecise.1emitascarcelyaudiblehummingas1walk,andmyeyesarefixed,as1swingmyhead,notonyou,Ignacio,butonthewavesattheedgeofsight,wheretheycurveupintothesky.1stoptenmetersshortofyou,and1stand.Yougo1follow,tenmetersbehind.Whatdo1want?Nothing.Yes,1willpickupthesticks,and1willfollow-fivemetersbehind."Breakthem,andputthemonthefire.Notallofthem,justafew."Yes."Ignaciokeepsthefirehereburningallthetime.Sometimeshetakesthecoalsoffirefromittostartothers,buthere,underthebigpalmlog,hehasafirealways.Theraindoesnotstrikeithere.Alwaysthefire.Doyouknowhowhemadeitthefirsttime?Replytohim!"" "No."No,Patrdo!""`No,Patrao.'""Ignaciostoleitfromthegods,fromPoseidon.NowPoseidonisdead,lyingatthebottomofthewater.Whichisthetop.Wouldyouliketoseehim?""Ifyouwishit,Patrdo.""Itwillsoonbedark,andthatisthetimetofish;doyouhaveaspear?""No,Patrdo.""ThenIgnaciowillgetyouone."Ignaciotookahandfulofthesticksandthrusttheendsintothefire,blowingonthem.AfteramomentNicholasleanedoverandblew,too,untilallthestickswereblazing."Nowwemustfindyousomebamboo,andthereissomebackhere.Followme."Thelight,stillnearlyshadowless,wasdimmingnow,sothatitseemedtoNicholasthattheywalkedoninsubstantialsoil,thoughhecouldfeelitbeneathhisfeet.Ignaciostalkedahead,holdinguptheburningsticksuntilthefireseemedabouttodie,thenpointingtheendsdown,allowingittolickupwardtowardhishandandcometolifeagain.Therewasagentlewindblowingouttowardthesea,carryingawaythesoundofthesurfandbringingadampcoolness;andwhentheyhadbeenwalkingforseveralminutes,Nicholasheardinitafaint,dry,almostrhythmicrattle.Ignaciolookedbackathimandsaid,"Themusic.Thebigstemstalking;hearit?"TheyfoundacanealittlethinnerthanNicholas'swristandpiledtheburningsticksarounditsbase,thenaddedmore.Whenitfell,Ignacioburnedthroughtheupperend,too,makingapoleaboutaslongasNicholaswastall,andwiththeedgeofaseashellscrapedthelargerendtoapoint."Nowyouareafisherman,"hesaid.Nicholassaid,"Yes,Pardo,"stillcarefulnottomeethiseyes."Youarehungry?""Yes,Patrdo.""Thenletmetellyousomething.WhateveryougetisIgnacio's,youunderstand?Andwhathecatches,thatishis,too.Butwhenhehaseatenwhathewants,whatisleftisyours.Comeonnow,andIgnaciowillteachyoutofishordrownyou."Ignacio'sownspearwasburiedinthesandnotfarfromthefire;itwasmuchbiggerthantheonehehadmadeforNicholas.Withitheldacrosshischesthewentdowntothewater,wadinguntilitwaswaisthigh,thenswimming,notlookingtoseeifNicholaswasfollowing.Nicholasfoundthathecouldswimwiththespearbyputtingallhiseffortintothemotionofhislegs,holdingthespearinhislefthandandstrokingonlyoccasionallywithhisright."Youbreathe,"hesaidsoftly,"andwatch

溫馨提示

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

評論

0/150

提交評論