目次
第1章 需求分析....................................................................... 3
1.1 項目分析....................................................................... 3
1.2 項目概述....................................................................... 3
1.2.1 白晝模式................................................................. 3
1.2.2 夜晚模式................................................................. 3
1.2.3 游戲設置................................................................. 4
1.2.4 查看幫助................................................................. 4
第2章 概要設計....................................................................... 5
2.1 游戲設計....................................................................... 5
2.1.1 游戲背景................................................................. 5
2.1.2 游戲邏輯................................................................. 5
2.1.3 僵屍作戰單位............................................................. 5
2.1.4 植物作戰單位............................................................. 5
2.1.5 碰撞邏輯說明............................................................. 6
2.1.6 狀態播放規則............................................................. 6
2.2 軟件架構....................................................................... 6
2.3 軟件功能模塊基本介紹........................................................... 7
2.3.1 主要模塊選擇功能......................................................... 7
2.3.2 游戲模式選擇功能......................................................... 7
2.3.3 游戲聲音開關功能......................................................... 7
2.3.4 查看幫助功能............................................................. 8
第3章 界面設計....................................................................... 8
3.1 結構設計....................................................................... 8
3.2 交互設計....................................................................... 8
3.3 視覺設計....................................................................... 9
第4章 詳細設計與實現................................................................ 10
4.1 搭建游戲基本框架.............................................................. 10
4.1.1 Welcome(歡迎界面)類................................................... 10
4.1.2 Menu(菜單)類.......................................................... 10
4.1.3 Help(游戲幫助)類...................................................... 10
4.1.4 Select(游戲選項)類.................................................... 10
4.2 游戲model包.................................................................. 11
4.2.1 Plant接口............................................................... 11
4.2.2 BaseMadol(基本)類..................................................... 11
4.2.3 Config(變量)類........................................................ 11
4.3 游戲具體實現及相關的實體類.................................................... 11
4.3.1 太陽花的種植及其產生陽光實現............................................ 11
4.3.2 豌豆射手種植及射擊實現.................................................. 14
4.3.3 生成僵屍的實現.......................................................... 14
4.3.4 游戲管家................................................................ 14
4.3.5 根據有無僵屍判斷是否射擊................................................ 16
4.3.6 僵屍碰到植物停止當吃掉植物后繼續前進.................................... 16
總結.................................................................................. 18
致謝.................................................................................. 19
參考文獻.............................................................................. 20
作者簡歷.............................................................................. 21
學位論文數據集........................................................................ 22
第1章 需求分析
1.1 項目分析
本項目分為三個主要部分:游戲部分有:白天、夜晚兩個模式,設置部分:游戲設置幫助部分:查看幫助。用例圖如圖1.1。
圖 1.1 系統用例圖
1.2 項目概述
1.2.1 白晝模式
此部分主要講述的是玩家在白天模式下的游戲,此關背景為白天,具體如表1.1。
表 1.1 常規模式
用例名稱 |
白晝模式 |
功能說明 |
在白晝模式下進行游戲 |
前置條件 |
進入游戲 |
后置條件 |
進入白晝模式開始游戲 |
游戲流程 |
1、選擇主菜單頁面的“游戲模式”按鈕,選擇進入白晝模式開始游戲 2、點擊“返回”按鈕,游戲終止 |
1.2.2 夜晚模式
此部分主要講述的是玩家在白天模式下的游戲,此關背景為白天,具體如表1.2。
用例名稱 |
夜晚模式 |
功能簡述 |
在夜晚模式下進行游戲 |
前置條件 |
玩家選擇並進入游戲 |
后置條件 |
進入夜晚模式並開始游戲 |
基本流 |
1、點擊主頁面“夜晚模式”按鈕,進入夜晚模式開始游戲 2、點擊“返回”按鈕,游戲終止 |
表 1.2 夜晚模式
1.2.3 游戲設置
此部分主要實現對游戲背景音樂的控制,玩家可以在此選項里面調整控制游戲背景音樂的開關[8]。此部分實現如表1.3。
用例名稱 |
游戲設置 |
功能簡述 |
對游戲的背景音樂的開關進行操作 |
前置條件 |
設置游戲背景音樂 |
后置條件 |
游戲背景音樂的開關 |
基本流 |
1、點擊主界面“游戲設置”,進入游戲背景音樂設置。 2、點擊音效鍵。 3、點擊“返回”鍵回到主界面。 |
表 1.3 游戲設置
2.2.4 查看幫助
此部分主要實現游戲玩家查看幫助。
第2章 概要設計
2.1 游戲設計
2.1.1 游戲背景
自古以來就有人類與僵屍之間的斗爭,為了奪取生存空間,一有機會,僵屍就向人類發起攻擊。當然人類也不會束手就擒,他們培養出的植物可以傷害僵屍,植物就是人類防備僵屍進攻的武器[9]。
2.1.2 游戲邏輯
(1)僵屍是攻擊方,為了攻擊,防御僵屍,人類通過栽種培植出的各種植物來抵御進攻型僵屍的攻擊。植物需要相應的陽光值成長。
(2)在作戰地點,玩家需要通過種植各種攻擊植物來消滅僵屍,也可以通過種防御植物來阻擋僵屍,還需要太陽花來產生種植需要的陽光。
2.1.3 僵屍作戰單位
(1)普通僵屍。速度(1幀),血限3,毀掉植物需要3s。
(2)戴帽子類僵屍。速度(1幀),血限4,毀掉植物需要3s。
(3)戴鐵桶類僵屍。速度(1幀),血限5,毀掉植物需要3s。
(4)運動員類僵屍。速度(2幀),血限3,毀掉植物需要3s。
(5)鐵網類僵屍。速度(1幀,)血限6,毀掉植物需要3s。
2.1.4 植物作戰單位
(1)太陽花。種植需陽光值50,作用:生產種植所需的陽光值,每隔10s生產50點陽光值,不具備攻擊力。
(2)普通碗豆射手。種植需陽光值100,作用:5s發射一顆炮彈,戰斗值1。
(3)冰凍豌豆射手。種植需陽光值175,作用:5s發射一顆炮彈,戰斗值1。
(4)加強型碗豆射手。種植需陽光值250,作用:5s發射兩顆連續的炮彈,每顆炮彈戰斗值為1。
(5)土豆衛士。種植需陽光值50,作用:抵擋各種僵屍3s,主要用來防御,沒有任何戰斗力。等共14種可供選擇種植的植物。
關卡簡介:所有的僵屍都會參與攻擊,所有的植物也都會參與作戰,每次只能選取六種植物參與作戰。[10]
2.1.5 碰撞邏輯說明
僵屍會在屏幕的右邊生成,然后緩慢向左邊屏幕移動,如果在僵屍移動的線路上有攻擊型植物,則發射炮彈。當種植的植物或炮彈與僵屍接觸,即當他們的坐標相同的時候,即為接觸,接觸大小的區域就是圖片的大小區域。當炮彈與僵屍碰撞之后,炮彈也就會立即消失,同時僵屍生命值的也隨之減少一點。若炮彈未擊中任何僵屍,越出屏幕后也將消失[11]。
2.1.6 狀態播放規則
動畫的播放速率人100ms/幀,其中植物的播放速度均為8幀,僵屍的播放速度為7幀。當全部播放完成以后,系統又從第一幀開始,如此循環播放。
2.2 軟件架構
根據玩家的需求,我們可以分析得到如下的幾點基本要求,游戲加載、主界面、模式選擇、主要功能選擇、開始游戲等構成了如下架構。總體架構如圖2.1。
![]() |
圖 2.1 軟件總體架構圖 |
游戲加載:玩家打開游戲后會進入游戲加載,此界面用來歡迎玩家使用該游戲;
主界面:游戲功能界面的展示,可以選擇功能;
模式選擇:可以選擇在不同模式下進行游戲;
開始游戲:實現植物大戰僵屍的功能;
游戲設置:控制游戲背景音樂的開關;
2.3 軟件功能模塊基本介紹
根據游戲的功能模塊:選擇主要功能、選擇模式、查看幫助等模塊。
此游戲軟件功能模塊主要有以下功能:
2.3.1 主要模塊選擇功能
其功能是用來顯示植物大戰僵屍游戲的主菜單,玩家可以根據自己的興趣愛好選擇在不同的模式開始游戲,此模塊也有游戲幫助提供給玩家查看。MENU狀態下才會激活該模塊,然后根據玩家作出的不同選擇調用相應的功能,想要退出游戲點擊推出按鈕即可[[12]。功能選擇模塊流程如圖2.3。
圖 2.3 功能選擇模塊流程圖
2.3.2 游戲模式選擇功能
該游戲分兩種模式,白天和夜晚模式。根據自己興趣玩家可以選擇不同的模式開始游戲。
2.3.3 游戲聲音開關功能
該款游戲默認的游戲背景音樂是開啟的,玩家可以根據自己的愛好對背景音樂進行設置,玩家可以選擇是否開啟音樂。該選項在游戲設置中進行設置。
2.3.4 查看幫助功能
此款軟件還具有幫助功能,點擊可以進入幫助界面,點擊屏幕返回鍵將會自動轉到主菜單界面[3]。
第3章 界面設計
游戲的界面是直接影響玩家體驗的重要因素,一個好的游戲必須有非常吸引眼球的界面,為了使該游戲在界面上有更好的效果,不斷對其界面進行了美化、規范化的設計。
3.1 結構設計
根據對軟件需求的分析,該游戲應有以下界面:歡迎界面、游戲菜單界面、模式選擇界面、查看幫助界面、游戲界面[14]。游戲結構設計如圖4.1
圖 3.1 游戲結構設計圖
3.2 交互設計
該游戲專為中國Android用戶而設計,因此語言選擇使用中文。在每一個界面,都有onTouch()函數和onKeyDown()函數存在,為用戶觸屏和點擊按鍵事件做響應,其功能都是退出當前所在的頁面,為了方便程序退出,在歡迎、主菜單界面都設有退出按鈕,點擊這些按鈕即可退出游戲。[10]
游戲界面有一個植物選取,點擊相應植物后,就能在種植區域種植植物,種植區有五個橫着的跑道,僵屍在每行都會進攻。游戲界面設計如圖3.3。
3.3 視覺設計
綠色為該游戲采主色調,迎合大部分植物的顏色,給玩家一種相對柔和的色調。角色造型模仿網絡已有的素材。游戲菜單設計如圖3.2,界面設計圖如圖3.3。
圖 3.2 游戲菜單圖
圖 3.3 游戲界面設計圖
第4章 詳細設計與實現
4.1 搭建游戲基本框架
4.1.1 Welcome(歡迎界面)類
這是游戲的歡迎界面類,此類定義了開始游戲按鈕的橫坐標、縱坐標等,用draw()函數來繪制歡迎界面的一些圖片按鈕和主界面的背景。設計中還用到了onTouchEvent()函數來回應並控制玩家在圖片按鈕區域所觸發的ACTION_DOWN事件,其目的就是用來控制和顯示按鈕所按下的圖片。
在玩家觸發完成ACTION_UP事件后,按鈕圖片將會被改變為未按下狀態並會通過MainSurfaceView.gameState = MainSurfaceView.GAME_MENU代碼將游戲轉到主菜單界面。
4.1.2 Menu(菜單)類
游戲菜單,用boolean類型定義按鈕是否按下狀態,並初始化值全部為false。在主菜單界面設計中的布局繪制菜單選項涉及到的全部按鈕。
用ACTION_DOWN或者ACTION_MOVE來檢測每個按鈕的狀態,(是否被按下),如果是被按下的,則會在draw()函數中繪制按鈕被按下狀態時的相對應的圖片。然后會在ACTION_UP事件中會把按鈕的狀態重新修正並且游戲界面會跳轉到相應的游戲狀態,就拿“游戲幫助”來說,點擊“游戲幫助”后調用MainSurfaceView.gameState = MainSurfaceView.GAME_HELP改變游戲狀態。如果點擊“退出”,則調用System.exit(0),系統退出游戲。
4.1.3 Help(游戲幫助)類
Help類主要是給玩家提供相關幫助信息,把內容繪制在一張圖片上,玩家需要幫助時可以打開此功能,該類通過把幫助圖片顯示在屏幕上,方便玩家查看。點擊屏幕即可觸發ACTION_UP事件,回到主菜單界面。
4.1.4 Select(游戲選項)類
為玩家提供游戲選項的一個類。玩家點擊屏幕的不同游戲模式觸發ACTION_UP事件,控制玩家進入不同的游戲。
接着在MainSurfaceView類中將游戲狀態gameState初始化為GAME_WELCOME,定義並初始化SELECT類,在myDraw()狀態下調用draw()函數,在onTouchEvent()狀態調用onTouchEvent()函數。
4.2 游戲model包
4.2.1 Plant接口
種植植物是按照坐標來種植的,五條線路來顯示植物和僵屍的作戰區,不能隨便選取,每條路線都有九個格子的位置可以用來種植植物,玩家只能在這些規定的格子內種植植物,布局中,我們定義了54個這樣的格子,並且規定每個格子能且只能栽種一種植物,不可以種植多種,就算是同一種植物也不可以在同一個格子里面種植。每個格子都有一個屬於自己的編號,起作用是為了記錄該區域是否已經種植了植物。該接口是用來實現getMapIndex()方法[15]。
4.2.2 BaseMadol(基本)類
在游戲中,無論是植物單位,僵屍單位或者種子選擇欄中的種子,他們都會有一些共同的方法或者屬性,就如他們的坐標,即這些圖片所在的位置。為了減少代碼的編寫量,也方便查看,在面向對象中我通常會將各個類的公共部分編寫成一個類,方便其他類的調用。所以在程序中建立了這所有的公共父類BaseMadol。
4.2.3 Config(變量)類
Config類是用來全局變量的,這些都是游戲中所需要的變量。為什么要這么做?因為開發過程中測試是必須的,為了能夠快速完成這個過程,要修改上述這些變量,當不是設置成全局變量將可能浪費大量時間做重復的修改操作。
該類還定義了游戲中所有對象的圖片素材。普通類不能從圖片工廠中獲取圖片,普通類如果要使用圖片都會從構造函數中傳遞進去,如果以此方法使用的多了,這將使程序顯得混亂,不方便管理。
該類還定義了所有植物種植點。
4.3 游戲具體實現及相關的實體類
4.3.1 太陽花的種植及其產生陽光實現
太陽花卡片我們用SunSeed類定義,它就是繼承了BaseMadol類,實現了TauchAble接口。除了定義其坐標、是否存在的成員變量外,還定義了一個觸摸區域。它的成員變量及成員方法如圖4.1。
圖4.1 SeedFlower類成員變量及成員方法示意圖
SeedFlower():SeedFlower類的構造函數,在這里的屬性我們會將其初始化,我們isAlive默認為true。
drawSelf():繪畫函數,主要功能是實現能在各個位置下顯示種植的太陽花種子。具體實現方法如下。
onTouch():對觸屏事件處理,在該函數中它會首先記錄玩家點擊的觸摸點坐標,檢測touchArea.contains(pointX,pointY) && Config.sunshineValue>=Config.flowerCost,如果成立,就會此坐標顯示一個玩家所要種植的植物,這個功能用定義在Game類里的apply4EmplacePlant(int locationX,int locationY)函數來實現。該函數會檢測所要種植的植物並創建一個要被種植的植物對象。
EmplaceFlower類是玩家所選擇的並且將要被種植的太陽花類,也是繼承自BaseMadol,實現了TauchAble接口。
touchArea:手指觸屏跟隨區域,根據構造函數所接收到的參數,為即將種植太陽花大小的區域進行初始化。
Flower類是玩家可以看到的顯示屏上已經種植的太陽花,也是繼承自BaseMadol,實現了Plant接口。不僅有從父類繼承來變量,它還有屬於自己新增成員變量:frameIndex和長整型變量lastShineTime,他們用來表示太陽花位圖數組下標,所在格子編號。如圖4.2。
圖4.2 Flower類成員變量及成員方法示意圖
drawSelf():繪圖函數,繪制當前幀的圖片。
Sunshine類,太陽花所生產出來的陽光值,每10s都會產生一個。此類只存在5s,在這段時間內,如果玩家點擊了陽光,那么對應的陽光值就會得到增長,每個增加50,要是在這5s內沒有點擊到,那么陽光機會自動消失。從上述設計可以知道陽光有兩種狀態,一種是顯示狀態,另一種是待拾取狀態。
drawSelf():在陽光存活狀態下,若它此時是SHOW狀態,判斷陽光存在時間是否已經有5s,如果存在時間已經過了5s,那么isAlive值就將被賦值為false,如果沒有的話,就不會進行任何操作。在MOVE狀態下,此時,陽光的橫縱坐標就會以xSpeed,ySpeed的速度遞減,當到達上邊邊界時,即當縱坐標小於屏幕的邊界時,此時顯示欄的陽光值就會顯示增加50,並且isAlive就會被賦值為false。
當玩家點擊到陽光時,此時它的狀態就會被設置為MOVE,並且記錄運動起點到終點的橫縱距離,分別用xDistance,yDistance表示,然后將xSpeed,ySpeed分別設置為xDistance/5f,yDistance/5f。
狀態圖如圖4.3所示。
圖4.3 陽光的狀態圖
4.3.2 豌豆射手種植及射擊實現
根太陽花一樣,我們也定義SeedPea、EmplacePea、Pea、Bullet,其中SeedPea、EmplacePea、Pea前三個類與太陽花相似。
Bullet:炮彈類,也是繼承自BaseMadol。游戲中我們用xSpeed來表示炮彈在水平方向的移動速度,其初始值為5。在它的drawSelf()函數中,炮彈被先畫出來,接着給它的橫坐標加上xSpeed,這樣,在我們看來,炮彈就是在直線勻速運動的,當炮彈越過右邊邊界時,那么isAlive就會自動設置為false。若炮彈與僵屍碰撞,我們用getModelWidth()方法來處理此事件。
4.3.3 生成僵屍的實現
Zombie類(僵屍類)繼承BaseMadol。構造方法參數也會用到僵屍剛生成使得坐標,用raceWay來傳遞一個整型變量來表示跑道,簡單的來說,就是僵屍進攻的線路,在做碰撞檢測的時候,系統會檢測跑道上的炮彈和所種植的植物。由於僵屍是橫向向着屏幕的左邊移動,所以在drawSelf()函數中要在繪制每一幀之后再把動畫幀下標加一,然后它的橫坐標還要減去僵屍前進的速度xSpeed。
為了方便管理僵屍的生成,我們定義了一個ZombieManager類,此類會控制僵屍在15s隨機生成一類的僵屍。我們用以下方法來實現僵屍的生成:
public boolean isExistPlant(int key, int raceWayIndex) {
switch (raceWayIndex) {
case 0:
for (BaseModel model : gameLayout4plant0) {
if (model instanceof Plant) {
if (key == ((Plant) model).getMapIndex())
return false;
}
}
break;
……
}
return true;
}
4.3.4 游戲管家
此游戲是通過不斷繪制圖片來,因此必須非常清楚的划分回吐的順序,不然會產生非正常的覆蓋將大大影響游戲的視覺效果。最后畫的元素覆蓋在屏幕最上層,並且將其規定為第一層,依次類推。
種植植物時,我們設定種子圖片是隨着玩家的手指移動而移動的,這個時候種子圖片顯示在所有屏幕對象的最上邊,為第一層,最后畫這一層。植物的種子設定為第2層,陽光則規定為第3層,然后將植物、僵屍、炮彈統一設定為第4層。定義容器gamesLayout1,gamesLayout2,gamesLayout3分別用來表示第1、2、3層容納的單位。用gamesLayout4plant0,gamesLayout4zombie0表示第4層第一條跑道植物和僵屍單位。剩下的跑到依次類推。定義createElement()為陽光值Config.sunshineValue賦初值為100,初始化各種容器,並且新建會SeedFlower、SeedPea類對象seedFlower、seedPea,將他們初始化到種子欄中相應位置,用gamesLayout2.add()添加到第二層。用如下代碼來設計植物與僵屍的跑道:
private void createElement() {
……
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 9; j++) {
Config.plantPoints.put(i * 10 + j, new Point((j + 2)* Config.screenW / 11
- Config.screenW / 11 / 2,(i + 1) * Config.screenH / 6 - 10));
if (j == 0) {
Config.raceWayYpoints[i] = (i + 1) * Config.screenH / 6- 10;
}
}
}
}
以下代碼是用來記錄植物並添加植物到相應的跑道的植物容器里面:
public void apply4Plant(int locationX, int locationY, BaseModel baseModel) {
……
for (Integer key : Config.plantPoints.keySet()) {
point = Config.plantPoints.get(key);
if ((Math.abs(locationX - point.x) < Config.screenW / 11 / 2)
&& (Math.abs(locationY - point.y) < Config.screenH / 6 / 2)) {
int raceWayIndex = 6;
for (int i = 0; i < Config.raceWayYpoints.length; i++) {
if (point.y == Config.raceWayYpoints[i]) {
raceWayIndex = i;
}
}
……
}
}
}
游戲的初始化:
/**
* 初始化游戲基本參數
* @param plantTypes
*/
public void initGameParas (ViewGroup root,int type, int[] plantTypes) {
// 獲取屏幕寬高
ScreenWidth = ((Activity) getContext()).getWindow().getWindowManager()
.getDefaultDisplay().getWeight();
ScreenHeight = ((Activity) getContext()).getWindow().getWindowManager()
.getDefaultDisplay().getHeight();
// 初始化植物、僵屍、子彈、卡片管理者
plantMgr = new PlantManager(getResources());
zoManager = new ZoobieManager(getResources());
bulletManager = new BulletManager(getResources());
cardManager = new CardManager(getContext(), root,plantTypes);
sunManager = new SunManager(getResources());
// 初始化游戲線程
gameDrawThread = new GameDrawThread(surfaceHolder, plantMgr, zoManager,
bulletManager, sunManager, choooseDayOrNight(type));
}
4.3.5 根據有無僵屍判斷是否射擊
根據需求,只有當跑道有僵屍時豌豆射手才需要發射炮彈,當該跑道還沒有生成或所有僵屍時豌豆射手將不會射擊,即不發射炮彈。在Pea類中,isShoot用來表示定義的一個布爾變量,其初始值設為false,定義其get、set方法,檢測isShoot值是否為true,true時調用shootBullet()函數。在Game類apply4AddZombie()中當產生僵屍的時候,檢測該產生僵屍的跑道是否有豌豆射手存在,如果有,那么isShoot就被設置為true,如果沒有,那么依然為false。然而若是在產生僵屍時判斷是否有豌豆射手,每次都要對isShoot判斷。所以應當在豌豆射手發射炮彈時檢測是否有僵屍在跑道上,如果有僵屍則發射導彈,否則不發射。
4.3.6 僵屍碰到植物停止當吃掉植物后繼續前進
當僵屍和植物相遇后就會停止前進,此時,僵屍開始進食植物,在此過程中,植物會抵抗3s,接着,僵屍還會繼續前進。在Zombie類中用布爾變量isMove來定義僵屍的活動狀態,並初始化為true、僵屍碰撞植物后用變量eatTime(長整型)記錄此時系統時間,並設置變量get(),set()屬性。在僵屍橫向移動代碼上添加條件語句:只有isMove為true時僵屍才從右向左移動。在Game類中當碰撞函數檢測到僵屍與植物碰撞時,若僵屍還處於移動狀態,則使其停止前進,將這刻系統時間用zombie.setEatTime(System.currentTimeMillis())記錄。當僵屍與植物的接觸超過3s時,系統將植物isAlive賦值為false,此時植物即被吃掉消失,然后僵屍會繼續進攻,向左屏幕前進。
參考文獻
[1] 張士誠.基於Google Android平台的應用程序開發與研究[J]電腦知識與技,
術2009.(5)
[2]高蘭蘭.基於Android平台的多分辨率解決方案[J]軟件。2011.(32)
[3] 宋小倩,周東升。基於Android平台的應用開發研究[J]軟件導刊。2011(2)
[4] 王志超,王敏。基於Android平台的MP3播放器分析與設計[J]科教導刊。2011(25)
[5]盧宏偉 基於Android平台的在線播放器設計與實現[J]電腦知識與技,術2011.(07)
[6] 楊帆. 基於Java技術的網上書店系統的設計與實現[J] . 計算機應用研究, 2003 .
[7] 李志義,劉奕然. 基於JSP的網上書店的一種設計與實現[J]. 情報雜志,2007,(7).
[8] 劉冰. 基於JSP的網上書店系統的研究與設計[J]. 科技廣場,2009,(5).
[9] 官全龍, 姚國祥. 基於Struts的應用架構的研究[J]. 計算機工程與設計, 2005, 26(12): 3225-3227
[10] Mohammad Jafar Tarokh ,Javad Soroor. Supply Chain Management Information Systems Critical Failure Factors .IEEE, 2006, :425-431.
[11] 汪孝宜,劉中兵,徐佳晶.JAVA數據庫開發實例精粹[J].北京:電力工業出版社,2006.
[12] 官全龍, 姚國祥. 基於Struts的應用架構的研究[J]. 計算機工程與設計, 2005, 26(12): 3225-3227
[13] 閆斐, 王亞弟, 韓繼紅. 基於Struts架構的J2EE應用軟件的設計與開[N].微計算機信息, 2006, 22(30): 227-229.
[14] Red Johnson. Expert One-on-One J2EE Development without EJB[M].電子工業出版社,2005.