骑士进化论RPG游戏实现
騎士進(jìn)化論RPG游戲?qū)崿F(xiàn)
聲明:本博文系本人原創(chuàng)作品,未經(jīng)本人許可,不得擅自轉(zhuǎn)載,甚至修改內(nèi)容,僅限于學(xué)習(xí)交流。本人保留該博文的 ? ? ? ? ? ?所有權(quán)利。 ? ? ? ? ? ?博文地址:http://blog.csdn.net/u012027907前言
? ? ? ? 這是第一次使用java語(yǔ)言和Myeclipse集成開發(fā)環(huán)境進(jìn)行多人協(xié)作開發(fā)一款小游戲,其實(shí),我之前就想讓多個(gè)人開發(fā)一個(gè)小程序或軟件。畢竟,以后到公司去,開發(fā)任何的軟件都不是一個(gè)人能完成的,如何從現(xiàn)在開始就鍛煉大家的團(tuán)結(jié)協(xié)作的能力顯得非常重要,如果能將多個(gè)人的力量有效地整合,就能實(shí)現(xiàn)1+1大于2的效果,否則,就無(wú)法進(jìn)行軟件的開發(fā)。即使一個(gè)人的能力很強(qiáng),如果不能學(xué)會(huì)與人協(xié)作,在這樣的社會(huì)恐怕不能夠生存下去。
? ? ? ? 本次開發(fā)的游戲是RPG(角色扮演)游戲,這樣的游戲我們經(jīng)常見(jiàn)到。本來(lái)老師要求是文字版的RPG,我想盡量接近通常玩的那種游戲,盡量少使用文字,當(dāng)然,如果以目前的知識(shí)無(wú)法實(shí)現(xiàn)的,可以用文字來(lái)描述。我們應(yīng)該以高標(biāo)準(zhǔn)來(lái)要求自己,這樣才能真正的鍛煉自己。
1.? 任務(wù)分工:(暫定)
張XX(組長(zhǎng)):負(fù)責(zé)整體的架構(gòu)設(shè)計(jì)及主游戲模塊。
房X(組員):跑步模塊及游戲介紹模塊。
南XX(組員):智力闖關(guān)模塊及幫助模塊。
白X(組員):飛鏢模塊及地圖模塊。
2.? 對(duì)所有成員要求:
1).小組成員必須按時(shí)完成各自的任務(wù)。
2).設(shè)計(jì)上與技術(shù)上有問(wèn)題的先自行解決(看書、上網(wǎng)查),如不能解決的集體討論解決。有其它的問(wèn)題及時(shí)提出來(lái)!
3).必須寫文檔(寫把各自模塊的整體設(shè)計(jì)用UML圖或Viso畫的圖(盡量不要只是簡(jiǎn)單的語(yǔ)言敘述)表達(dá)出來(lái)),學(xué)會(huì)用面向?qū)ο蟮乃枷雭?lái)來(lái)設(shè)計(jì),采用模塊化的思想分解模塊。(設(shè)計(jì)原則與設(shè)計(jì)模式能用的用)
4)每個(gè)類必須有類說(shuō)明,每個(gè)函數(shù)也必須有函數(shù)說(shuō)明,函數(shù)的具體設(shè)計(jì)也必須有必要的注釋。
5)如果不能遵守規(guī)定或要求的可以提前退出,不強(qiáng)留。
(注:即使不會(huì)寫代碼,也沒(méi)關(guān)系,只要一能用UML圖或其他的圖等表達(dá)出自己的設(shè)計(jì)思想及具體的實(shí)現(xiàn)設(shè)計(jì)也行)
3.?說(shuō)明:
? ?運(yùn)行環(huán)境:Myeclipse集成開發(fā)環(huán)境,jdk 1.6版本。
?? 使用語(yǔ)言:Java語(yǔ)言。
? ?版本控制:SVN進(jìn)行版本控制。
?? 代碼管理:Google Code 進(jìn)行上傳下載以實(shí)現(xiàn)多人同時(shí)開發(fā)。
一、需求分析:
1.1游戲背景:
時(shí)代:劍與魔法的中古騎士時(shí)代。
國(guó)家:神圣的卡拉斯王國(guó)。
社會(huì)結(jié)構(gòu):卡拉斯王國(guó)是由多數(shù)農(nóng)民和少數(shù)騎士所組成的王國(guó),因此沒(méi)有和魔王對(duì)抗的能力,
背景介紹:
? ? 卡拉斯王國(guó)的統(tǒng)治者是現(xiàn)任的國(guó)王卡拉斯七世,但由于由于受到魔王的危害,使得王國(guó)受到了威脅,整個(gè)王國(guó)實(shí)際上被魔王控制,小公主已經(jīng)在上一次魔王手下的來(lái)襲時(shí)被抓走了。
一天,在一個(gè)殘破的村莊,一名有名騎士的妻子生了四個(gè)孩子,三個(gè)男孩,一個(gè)女孩,據(jù)村里人說(shuō):這四個(gè)孩子可能是神之子,他們從小就各個(gè)力大無(wú)比、與眾不同。他們分別是:
人物角色:惡靈騎士、幻影騎士、火龍騎士、玉女騎士。
?當(dāng)他們長(zhǎng)到十幾歲時(shí),父母告訴他們整個(gè)王國(guó)都被魔王所控制,國(guó)王和公主都被軟禁。于是,他們立志要打敗魔王,拯救自己的國(guó)家。
但他們現(xiàn)在年紀(jì)還小,且實(shí)力還無(wú)法與魔王抗衡。
必須先進(jìn)行訓(xùn)練(跑步、智力闖關(guān)、飛鏢練習(xí)),獲得一定的體力值、智力值及武藝值后,才能出去征戰(zhàn),奪回被魔王占領(lǐng)的土地。要想打敗魔王,必須先取得傳說(shuō)中的勇者之劍及勇者之鎧。勇者之鎧被放置在大陸西邊的神殿里,那里已經(jīng)被魔王的部下所占領(lǐng)了;勇者之劍則要取得大陸南邊火山里的金屬,再交給老鐵匠來(lái)打造,老鐵匠被魔王綁在大陸東邊的暗室里。騎士先來(lái)到大陸西邊的神殿,打敗了占領(lǐng)此地的魔王手下,取得了勇者之鎧。接下來(lái)南邊的火山,在通過(guò)了迷宮洞窟的考驗(yàn)后,找到了可以打造勇者之劍的神秘金屬。帶著神秘的金屬去解救被綁的老鐵匠,將神秘金屬交給他,就可以打造出勇者之劍。有了勇者之劍和勇者之鎧之后,前往魔王的宮殿與魔王展開決戰(zhàn),在打敗了魔王救回公主后,使王國(guó)恢復(fù)了和平,而騎士也和公主結(jié)婚成為下一任的國(guó)王。
1.2游戲設(shè)置:
可選人物角色:惡靈騎士、幻影騎士、火龍騎士、玉女騎士。
人物成長(zhǎng)等級(jí):0-13。
普通裝備:鎧甲、盾牌、頭盔、戰(zhàn)靴、利劍、魔刀等。
???????????? (這些裝備可以在店鋪使用金幣購(gòu)買)
??特殊裝備:勇者之劍、勇者之鎧。
??生存值:體力值(血量)、智力值(防御力)、武藝值(攻擊力)。
?????????? (體力值越高,血量越多;
??????????? 智力值越高,防御力越高。
??????????? 武藝值越高,攻擊力越高)
??訓(xùn)練內(nèi)容:跑步(獲得血量值)
??????????? 智力闖關(guān)(獲得防御值)
??????????? 飛鏢練習(xí)(獲得攻擊值)
??地圖:大陸西邊(放著勇者之鎧)
????????? 大陸南邊(鑄造勇者之劍的金屬)
????????? 大陸東邊(鑄劍師)
????????? 大陸北邊(魔王的的宮殿)
?????????地圖如下:(找個(gè)游戲地圖)
1.3功能需求:
A.任務(wù)整體分為兩大塊:
1) 訓(xùn)練階段(跑步、智力闖關(guān)、飛鏢練習(xí))。
2) 征戰(zhàn)階段(到西邊獲取勇者之鎧、到南邊獲取鑄造勇者之劍的金屬、到東邊解救鑄劍師、到北邊大戰(zhàn)魔王)。
B.設(shè)計(jì)需求:(單機(jī)版窗體顯示)
1)顯示各模塊的窗體設(shè)計(jì)。
2)讀文件或讀數(shù)據(jù)庫(kù)中數(shù)據(jù)的模塊設(shè)計(jì)。
3)加載音樂(lè)的模塊。
4)不同人物及資源類的設(shè)計(jì)。
C.用例圖:
D.功能模塊圖:
二、總體設(shè)計(jì)
1.架構(gòu)設(shè)計(jì)
A.? 包UI(視圖、界面層):只負(fù)責(zé)界面的顯示。
B.? 包Business(業(yè)務(wù)邏輯層):核心業(yè)務(wù)的處理。
C.? 包DataAccess(數(shù)據(jù)訪問(wèn)層):讀寫數(shù)據(jù)。
2.業(yè)務(wù)處理流程圖:
3.UML圖
MVC架構(gòu)圖:
A.? 主模塊設(shè)計(jì):
三、詳細(xì)設(shè)計(jì)
1.UI包:
(1).CommonFrm類:
? ? ?公共窗體,其他窗體都繼承自它,保持窗體的一致性,其設(shè)置了窗體的大小和顯示位置。
(2).JMainMenuFrm類:
? ? 顯示游戲主菜單,包括:新建游戲、加載游戲、游戲設(shè)置、游戲幫助及退出按鈕。
(3)JPlayGameFrm類:
? ? 主游戲顯示窗口,主要顯示游戲。
(4)JLaborTrainFrm類:
? ? 體力訓(xùn)練模塊(跑步)界面。
(5)JIntelligenceTrainFrm類:
??? 智力訓(xùn)練界面(走迷宮)界面。
(6)MartialArtsTrainFrm類:
??? 武藝訓(xùn)練(射擊)界面。
(7)JSettingFrm類:
?? 游戲設(shè)置界面。
(8)JSkillTraining類:
?? 選擇開始主游戲還是個(gè)訓(xùn)練的界面。
(9)JGameDescription類:
?? 游戲簡(jiǎn)介。
?2.Business包
A.輸入管理包(Business.input)
(1).InputManager類:負(fù)責(zé)主游戲的鍵盤輸入處理。
| 構(gòu)造方法摘要 | |
| InputManager()? | ? |
| InputManager(JMainGamePanel?contentPanel,?Knight?knight)? | ? |
| InputManager(Knight?knight)? | ? |
?
| 方法摘要 | |
| ?Knight | GetKnight()? |
| ?boolean | IsFightPressed()? |
| ?boolean | IsMovePressed()? |
| ?void | keyPressed(java.awt.event.KeyEvent?e)? |
| ?void | keyReleased(java.awt.event.KeyEvent?e)? |
| ?void | keyTyped(java.awt.event.KeyEvent?e)? |
?
(1)??? RunKeyDown類:跑步模塊的輸入類
?? ?
| 方法摘要 | |
| ?boolean | IsMovePressed()? |
| ?void | keyPressed(java.awt.event.KeyEvent?arg0)? |
| ?void | keyReleased(java.awt.event.KeyEvent?arg0)? |
| ?void | keyTyped(java.awt.event.KeyEvent?arg0)? |
| ? | ? |
(2)??? 智力模塊的輸入類:
Carelistenner類
?B.面板管理包(Business.PanelManager)
(1).JMainGamePanel類:負(fù)責(zé)主游戲的面板業(yè)務(wù)邏輯,通過(guò)重寫paintComponet(Graphics g)方法,來(lái)加載顯示的界面。
?
| 構(gòu)造方法摘要 | |
| JMainGamePanel(JPlayGameFrm?playFrm, boolean?isLoad)? | ? |
?
| 方法摘要 | |
| ?void | display()? |
| ?void | drawBackGround(java.awt.Graphics?g)? |
| ?void | drawGameOver(java.awt.Graphics?g)? |
| ?void | drawVictory(java.awt.Graphics?g)? |
| ?Knight | getKnight()? |
| ?boolean | IsLive()? |
| ?boolean | IsLivedemon()? |
| ?boolean | isLoadData()? |
| ?void | NextGate()? |
| ?void | nextPerson()? |
| ?void | paintComponent(java.awt.Graphics?g)? |
| ?void | readAtk()? |
| ?void | readDfe()? |
| ?void | reSet()? |
| ?void | reStart()? |
| ?void | saveGame()? |
?
C.人物類管理包(Business.Person)
(1).Person類:
| 構(gòu)造方法摘要 | |
| Person()? | ? |
?
| 方法摘要 | |
| ?void | drawLevel(java.awt.Graphics?g)? |
| ?void | DrawPerson()? |
| ?void | DrawWeapon()? |
| ?int | GetVit()? |
| ?void | MoveDown(int?y)? |
| ?void | MoveLeft(int?x)? |
| ?void | MoveRight(int?x)? |
| ?void | MoveUp(int?y)? |
| ?void | SetVit(int?newVit)? |
| ? | ? |
?
(2).Knight類:
| 構(gòu)造方法摘要 | |
| Knight()? | ? |
| Knight(JMainGamePanel?panel)? | ? |
?
| 方法摘要 | |
| ?void | actionChanged()? |
| ?void | addScore(int?x)? |
| ?void | changeWeapon(int?weaponType)? |
| ?void | drawAttack(java.awt.Graphics?g)? |
| ?void | drawBlood(java.awt.Graphics?g)? |
| ?void | drawDefense(java.awt.Graphics?g)? |
| ?void | drawDied(java.awt.Graphics?g)? |
| ?void | drawFight(java.awt.Graphics?g)? |
| ?void | drawGetHurt(java.awt.Graphics?g)? |
| ?void | drawLevel(java.awt.Graphics?g)? |
| ?void | drawPerson(java.awt.Graphics?g)? |
| ?void | drawPhoto(java.awt.Graphics?g)? |
| ?void | drawPlace(java.awt.Graphics?g)? |
| ?void | drawScore(java.awt.Graphics?g)? |
| ?void | drawWeapon(java.awt.Graphics?g)? |
| ?void | fight()? |
| ?java.awt.geom.AffineTransform | flip(javax.swing.ImageIcon?icon, int?x, int?y)? |
| ?int | getAtk()? |
| ?int | getDfe()? |
| ?int | getDiedNum()? |
| ?int | getDirection()? |
| ?void | getHurt()? |
| ?boolean | GetisFight()? |
| ?boolean | GetisGethurt()? |
| ?boolean | getIsVictory()? |
| ?int | getLevel()? |
| ?int | getPersonNum()? 獲得人物數(shù) |
| ?int | getScore()? |
| ?int | getWeaponType()? |
| ?int | getX()? |
| ?int | getY()? |
| ?void | improveLevel()? |
| ?void | improvevit(int?vit)? |
| ?boolean | IsOver()? |
| ?boolean | IsPersonsub()? |
| ?void | MoveDown(int?y)? |
| ?void | MoveLeft(int?x)? |
| ?void | MoveRight(int?x)? |
| ?void | MoveUp(int?y)? |
| ?void | setAtk(int?atk)? |
| ?void | setDemon(Demon[]?demo, int?num)? |
| ?void | setDfe(int?dfe)? |
| ?void | setIsPersonSub()? |
| ?void | setLevel(int?level)? |
| ?void | setPerson(int?x)? |
| ?void | setPosX(int?x)? |
| ?void | setPosY(int?y)? |
| ?void | setScore(int?score)? |
| ?void | setVictory(boolean?isvic)? |
| ?void | StateRun()? |
| ?void | StaticState(java.awt.Graphics?g)? |
| ?void | subVit()? |
?
(3).Demon類:
| 構(gòu)造方法摘要 | |
| Demon()? | ? |
| Demon(JMainGamePanel?panel, int?P_posx, int?P_posy, int?starttime)? | ? |
?
| 方法摘要 | |
| ?void | drawPerson(java.awt.Graphics?g)? |
| ?java.awt.geom.AffineTransform | flip(javax.swing.ImageIcon?icon, int?x, int?y)? |
| ?void | getKnightPosXY(int?x, int?y)? |
| ?int | getPosX()? |
| ?int | getPosY()? |
| ?int | getSpritetype()? |
| ?boolean | IsOver()? |
| ?void | recover()? |
| ?void | Run()? |
| ?void | setFullBlood()? |
| ?void | setKnight(Knight?knight)? |
| ?void | setPosX(int?x)? |
| ?void | setPosY(int?y)? |
| ?void | setspritetype()? |
| ?void | setspritetype(int?x)? |
| ?void | spritegetHurt()? |
| ?void | subVit()? |
?
D.資源管理包(Business.ReourceManager)
(1).ResourceManager類:
| 構(gòu)造方法摘要 | |
| ResourceManager()? | ? |
?
| 方法摘要 | |
| ?javax.swing.ImageIcon | GetImage(java.lang.String?imageName)? |
| ?java.awt.Image | GetImage1(java.lang.String?imageName)? |
?
(2).SoundManager類:
| 構(gòu)造方法摘要 | |
| SoundManager()? | ? |
?
| 方法摘要 | |
| ?void | bgMusic()? |
| ?void | CloseGmMusic(java.lang.String?str)? |
| static?boolean | isGameMusic()? |
| ?boolean | isOpenBgMusic()? |
| ?void | PlayGmMusic(int?soundType)? |
| ?void | PlayGmMusic(java.lang.String?str)? |
?
(3).FileManager類:
| 構(gòu)造方法摘要 | |
| FileManager()? | ? |
?
| 方法摘要 | |
| ?void | clearData(java.lang.String?name)? |
| ?void | readData(int[]?data, int?n)? |
| ?int | readData(java.lang.String?name)? |
| ?java.lang.String | readfile(java.lang.String?name)? |
| ?void | writeData(int[]?data, int?n)? |
| ?void | writeData(java.lang.String?name, int?data)? |
?E.換武器包(Business.WeaponBehaviour)
(1).ChangeWeapon接口
| 方法摘要 | |
| ?int | getWeaponType()? |
| ?void | setFightEffect(int?fightEffect)? |
| ?void | setWeapon()? |
| ?void | setWeaponEffect(int?i)? |
| ?void | setXY(int?x, int?y, int?direction)? |
| ?void | useWeapon(java.awt.Graphics?g)? |
?
(2).AxeWeapon類:
實(shí)現(xiàn)以上接口。
(3).KnifeWeapon類:
實(shí)現(xiàn)以上接口。
(4).HammerWeapon類:
實(shí)現(xiàn)以上接口。
(5).Weapon類:
| 方法摘要 | |
| ?int | getWeaponType()? |
| ?void | setFightEffect(int?fightEffect)? |
| ?void | setWeapon()? |
| ?void | setWeaponEffect(int?i)? |
| ?void | setWeaponType(int?type)? |
| ?void | setXY(int?x, int?y, int?direction)? |
?F.跑步訓(xùn)練包( ?Business.LaborTrain)
(3)??? RunPanel類:
| 構(gòu)造方法摘要 | |
| RunPanel(JLaborTrainFrm?labor)? | ? |
?
| 方法摘要 | |
| ?void | closePanel()? |
| ?void | CompareScore(int?score)? |
| ?void | display()? |
| ?void | drawBackGround(java.awt.Graphics?g)? |
| ?void | drawBlood(java.awt.Graphics?g)? |
| ?void | drawCoins(java.awt.Graphics?g)? |
| ?void | drawDistance(java.awt.Graphics?g)? |
| ?void | drawJinbi(java.awt.Graphics?g)? |
| ?void | drawPaiHangBang(java.awt.Graphics?g)? |
| ?void | drawPerson(java.awt.Graphics?g)? |
| ?void | drawShitou(java.awt.Graphics?g)? |
| ?void | drawSun(java.awt.Graphics?g)? |
| ?void | drawZhangai(java.awt.Graphics?g)? |
| ?void | init()? |
| ?void | MoveDown()? |
| ?void | MoveJump()? |
| ?void | paintComponent(java.awt.Graphics?g)? |
| ?void | PlayGame(java.awt.Graphics?g)? |
| ?void | setBackGround(java.lang.String?background)? |
| ?void | setPerson(java.lang.String?person)? |
| ?void | storeScore(int?score)? |
智力訓(xùn)練包
| 方法摘要 | |
| ?void | display()? |
| ?void | drawmigongPhoto(java.awt.Graphics?g)? |
| ?void | drawpeoplePhoto(java.awt.Graphics?g)? |
| ?void | drawzhangaiwu(java.awt.Graphics?g)? |
| ?void | movedown()? |
| ?void | moveleft()? |
| ?void | moveright()? |
| ?void | moveup()? |
| ?void | paintComponent(java.awt.Graphics?g)? |
| ?void | storeScore(int?score)? |
?
(1)主要的類和接口:
????武藝訓(xùn)練窗體類:ClassJMartialArtsTrainFrm{};
?武藝訓(xùn)練面板類:Class JMartialArtsTrainPanel{};
?接口:interfaceDraw{};
(2)主要的方法有:
?2.1構(gòu)造方法public JMartialArtsTrainPanel(){};
???2.2飛鏢的計(jì)時(shí)器
????? timer1.schedule(new TimerTask() {
??? 2.3 盤的計(jì)時(shí)器
?????? timer2.schedule(new TimerTask() {
? ?2.3 繪制騎士最后輸贏狀態(tài)
??? public void drawGame(Graphics g)
??? 2.4 判斷飛鏢是否可以移動(dòng)
??? public boolean JianMove() ? ?
?? ?2.5 設(shè)置計(jì)分制,飛鏢射擊靶數(shù)等
??? public void drawValue(Graphics g)
?? 2.6 顯示當(dāng)前分?jǐn)?shù)
??? publicvoid drawScore(Graphics g)
?2.7從JPanel派生子類,復(fù)寫父類中paintComponent(Graphicsg)方法。
??? @Override
??? protected void paintComponent(Graphics g)
?3.數(shù)據(jù)訪問(wèn)包
(1).加載文件類(LoadImage)
主要方法:
| 方法摘要 | |
| ?java.awt.Image | loadImage(java.lang.String?name)? |
| ?javax.swing.ImageIcon | LoadImageIcon(java.lang.String?name)? |
?(2). 加載音樂(lè)類(LoadMusic)
| 方法摘要 | |
| static?void | closeMusic()? |
| static?boolean | isBgMusic()? |
| static?boolean | isGameMusic()? |
| static?void | playMusic(java.lang.String?str)? |
| static?void | setBgMusic(boolean?bgMusic)? |
| static?void | setGameMusic(boolean?gameMusic)? |
(3).讀文本文件類(ReadData)
?
| 方法摘要 | |
| ?java.lang.String | read(java.lang.String?name)? |
| ?void | readData(int[]?a, int?n)? |
| ?int | readData(java.lang.String?name)? |
(4).寫文件類
| 方法摘要 | |
| ?void | clearData(java.lang.String?name)? |
| ?void | write(int?value)? |
| ?void | writeData(int[]?data, int?n)? |
| ?void | writeData(java.lang.String?name, int?data)? 寫整型數(shù)據(jù) |
?四、測(cè)試與實(shí)現(xiàn)
1.歡迎界面
2.游戲主菜單
3.游戲選擇界面
4.主游戲界面
5.跑步訓(xùn)練界面
6.射箭訓(xùn)練界面
7.智力訓(xùn)練界面
8.游戲設(shè)置界面
9.幫助界面
五、總結(jié)
張XX的總結(jié):
? ? ? ? 通過(guò)對(duì)RPG游戲的開發(fā),使我學(xué)到了很多東西,但我認(rèn)為最重要的是如何多人協(xié)作共同開發(fā)一款軟件,這是最重要的東西,因?yàn)楝F(xiàn)在的軟件的都是多人同時(shí)并行開發(fā),沒(méi)有單打獨(dú)斗的軟件了,學(xué)會(huì)與人協(xié)作就顯得十分重要了。如何有效的協(xié)調(diào)每個(gè)人的任務(wù),如何使得四個(gè)人相加的結(jié)果大于4.這是一門很深的學(xué)問(wèn),還需要繼續(xù)學(xué)習(xí)。但我覺(jué)得我們這一組,不管是任務(wù)分工,還是溝通交流都還不錯(cuò),大家也都很盡力。從最后完成的作品來(lái)看,效果還不錯(cuò)。
? ? ? ? 我們?cè)谲浖募軜?gòu)初期,就用了MVC這樣的好的框架,這為后面的不同類之間的訪問(wèn)和協(xié)調(diào)都提供了好的框架基礎(chǔ)。這一點(diǎn)我覺(jué)得做的比較好。也有效的分裝了變化,為軟件的擴(kuò)充打下了堅(jiān)實(shí)的基礎(chǔ)。在軟件的設(shè)計(jì)過(guò)程中也是遇到了各種問(wèn)題,從最初的什么都不會(huì),到遇到各種困難然后逐一解決,再到最后完成了整個(gè)軟件,在這其中有最初的BUG到處有的痛苦、也有解決了某個(gè)問(wèn)題時(shí)的激動(dòng)等酸甜苦辣。正是由于我們不懼困難,堅(jiān)持不懈,有著不解決它就誓不罷休的精神,才使得我們堅(jiān)持到最后,并很好地完成它。當(dāng)然,學(xué)到的東西只有自己清楚,不光是java的技術(shù),更是軟件設(shè)計(jì)及溝通協(xié)作的思想和技巧。
房X的總結(jié):
? ? ? ? 通過(guò)這次小組一起開發(fā)RPG游戲,總體感覺(jué)學(xué)了不少知識(shí),一些通過(guò)組長(zhǎng)的講解整體架構(gòu)和參看組長(zhǎng)的代碼,另外通過(guò)自己查找資料,感覺(jué)組長(zhǎng)的整體架構(gòu)非常好,同時(shí)也感覺(jué)到j(luò)ava語(yǔ)言編程比較容易上手,更加增加我對(duì)java語(yǔ)言的學(xué)習(xí)興趣。?在編寫代碼過(guò)程中遇到過(guò)不少的問(wèn)題,通過(guò)不段的思考,反復(fù)修改和尋求組長(zhǎng)等組員幫助,最終解決了問(wèn)題。感覺(jué)在小組中,相互之間學(xué)到很多,而且編起代碼來(lái)更有激情,看到了別人的編程思想,學(xué)習(xí)他人,改進(jìn)自己,學(xué)習(xí)非常高效。
南XX總結(jié):
? ? ? 這次RPG游戲的制作,非常的感謝組長(zhǎng)的努力,為我們的整體構(gòu)架打下了非常好的基礎(chǔ),運(yùn)用了mvc架構(gòu)方式,第一次了解到,感覺(jué)整體架構(gòu)非常清晰,修改和添加都非常容易,是一個(gè)非常好的架構(gòu)模式,并且在主框架下,用到了組長(zhǎng)所寫的的一些函數(shù),使我的智力模塊的編寫如雨得水,通過(guò)此次的RPG游戲編寫,熟悉了封裝類的實(shí)現(xiàn),不僅使代碼非常清晰,而且容易讀懂,這次的編寫讓我對(duì)java產(chǎn)生了深深的興趣,更會(huì)激勵(lì)我在未來(lái)的路上好好學(xué)習(xí) ? ?
白X總結(jié):
? ? 飛鏢模塊的整體設(shè)計(jì)過(guò)程還算是比較順利的,沒(méi)有什么過(guò)多的算法,就只要實(shí)現(xiàn)分?jǐn)?shù)的計(jì)算就行。在一開始還沒(méi)有學(xué)習(xí)Java Swing圖形用戶界面的時(shí)候,覺(jué)得游戲無(wú)從下手,在組長(zhǎng)已經(jīng)設(shè)計(jì)好整個(gè)框架的時(shí)候還是不知道怎么做,我的模塊也就做的有點(diǎn)晚了,開始只實(shí)現(xiàn)了飛鏢的移動(dòng),盤沒(méi)有設(shè)置成移動(dòng)的,游戲玩起來(lái)玩家只可以控制飛鏢的發(fā)射,操作是否進(jìn)行下一輪的游戲,而且分?jǐn)?shù)都是隨機(jī)生成的,這樣一來(lái),感覺(jué)整個(gè)游戲失去了趣味性。后來(lái)在組長(zhǎng)的審查和小組討論后,對(duì)游戲做了進(jìn)一步改進(jìn),首先讓盤也動(dòng)起來(lái),然后讓玩者控制什么時(shí)候發(fā)射飛鏢,并且可以對(duì)飛鏢的速度進(jìn)行操控,這樣便使得游戲玩著更有趣了。整個(gè)飛鏢模塊的游戲界面友好,符合主題,基本功能也實(shí)現(xiàn)了。期間遇到了各種各樣的問(wèn)題,但是在請(qǐng)教我們的組長(zhǎng)和其他成員之后,問(wèn)題得到了解決,通過(guò)這些錯(cuò)誤的修改,個(gè)人的分析能力也得到了加強(qiáng)。對(duì)于我們小組的整個(gè)RPG游戲設(shè)計(jì),由我們組長(zhǎng)精心策劃,為我們?cè)O(shè)計(jì)出了MVC這樣好的框架,并為大家分配好了每個(gè)人的任務(wù),我們都在組長(zhǎng)的指導(dǎo)下順利的完成了我們的任務(wù)。以后希望還會(huì)有這樣的合作學(xué)習(xí),向大家學(xué)習(xí)更多的東西,不斷擴(kuò)展自己的知識(shí)面。
軟件的優(yōu)點(diǎn):有漂亮的圖形界面,有很好的架構(gòu)設(shè)計(jì),用戶體驗(yàn)較好,功能多樣以滿足不同玩家的需求,有游戲幫助及游戲設(shè)置等完善的功能等。
軟件的缺點(diǎn):部分功能還未實(shí)現(xiàn),如商店購(gòu)買裝備等。有些地方還可以進(jìn)一步改進(jìn)。
??? 總體而言,軟件較好的完成了功能需求!
總結(jié)
以上是生活随笔為你收集整理的骑士进化论RPG游戏实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 没有GPS模块无人机无法解锁解决方法测试
- 下一篇: 排队论的计算机模拟,8.2 排队论模型(