基于Java語言的俄羅斯方塊游戲課程設(shè)計報告書_第1頁
基于Java語言的俄羅斯方塊游戲課程設(shè)計報告書_第2頁
基于Java語言的俄羅斯方塊游戲課程設(shè)計報告書_第3頁
基于Java語言的俄羅斯方塊游戲課程設(shè)計報告書_第4頁
基于Java語言的俄羅斯方塊游戲課程設(shè)計報告書_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

/基于Java語言的俄羅斯方塊游戲課程設(shè)計學(xué)院:X專業(yè):X班級:X姓名:X學(xué)號:X指導(dǎo)老師:X摘要第一章引言1.1設(shè)計的課題背景1.2研究課題的任務(wù),目的和意義1.2.1課題的任務(wù)1.2.2課題的目的1.2.3課題的意義1.3系統(tǒng)的主要功能和特色1.3.1系統(tǒng)的主要功能1.3.2系統(tǒng)的特色第二章系統(tǒng)需求分析2.1本課題研究現(xiàn)狀分析2.2要解決的問題及解決方法2.3系統(tǒng)設(shè)計的主要內(nèi)容、目標(biāo)2.3.1系統(tǒng)設(shè)計的主要內(nèi)容2.3.2設(shè)計的目標(biāo)2.4使用的關(guān)鍵技術(shù)第三章系統(tǒng)的詳細(xì)設(shè)計3.1系統(tǒng)的總體系結(jié)構(gòu)3.2系統(tǒng)各模塊的界面設(shè)計及實現(xiàn)3.2.1主窗體程序模塊設(shè)計與實現(xiàn)3.2.2方塊變換模塊設(shè)計與實現(xiàn)3.2.3滿行消除并計分模塊設(shè)計與實現(xiàn)第四章系統(tǒng)的安裝與測試4.1系統(tǒng)的安裝4.1.1系統(tǒng)的運行環(huán)境4.1.2系統(tǒng)的安裝4.2系統(tǒng)的測試結(jié)束語參考文獻(xiàn)附錄:有關(guān)程序代碼摘要:在現(xiàn)代,高科技的飛躍發(fā)展,人們工作習(xí)慣的改變,特別是電腦的大量普及,人們生活節(jié)奏越來越快,一些有趣的桌面游戲已經(jīng)成為人們在使用計算機(jī)進(jìn)行工作或?qū)W習(xí)之余休閑娛樂的首選,而俄羅斯方塊游戲是人們最熟悉的小游戲之一。俄羅斯方塊是一款風(fēng)靡全球的電視游戲機(jī)和掌上游戲機(jī)游戲,它由俄羅斯人阿列克謝·帕基特諾夫發(fā)明,故得此名。俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡單、老少皆宜,從而家喻戶曉,風(fēng)靡世界。為此,我設(shè)計了一款簡單的俄羅斯方塊JAVA游戲程序,以便更好的滿足廣大電腦工作者閑暇之余的消遣,并且也讓我學(xué)到編程技術(shù)。關(guān)鍵字:俄羅斯方塊游戲、Java語言、編程第一章引言1.1設(shè)計的課題背景俄羅斯方塊是一款電視游戲機(jī)和掌上游戲機(jī)游戲,它由俄羅斯人阿列克謝·帕基特諾夫發(fā)明,故得此名。俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡單、老少皆宜,從而家喻戶曉,風(fēng)靡世界。20XX2月22日,英國心理學(xué)家發(fā)現(xiàn),減肥者通過玩俄羅斯方塊,可以降低對富含脂肪的食物和零食的心理需求;嘗試戒煙者的煙癮也能得到遏制。本學(xué)期學(xué)習(xí)java程序后,對該語言有了更深了解,可以嘗試實現(xiàn)小程序的開發(fā)。因此利用所學(xué)知識,編寫了俄羅斯方塊這一游戲,實現(xiàn)了它的部分簡單功能。1.2研究課題的任務(wù),目的和意義1.2.1課題的任務(wù)本游戲開發(fā)的總體任務(wù)是實現(xiàn)游戲的可操作性,以及界面的美觀性。采用JAVAGUI編程實現(xiàn)界面以及事件的控制。用戶根據(jù)鍵盤的四個方向鍵控制翻轉(zhuǎn)、向左、向右、和向下操作。1.2.2課題的目的用所學(xué)的Java知識編寫小游戲,學(xué)會使用Java中的相關(guān)知識,熟練掌握開發(fā)程序的流程。熟練使用eclipse軟件進(jìn)行Java編程,并進(jìn)行調(diào)試和測試?;緦崿F(xiàn)俄羅斯方塊的基本功能。1.2.3課題的意義本課題的選擇,完成后,可方便人們進(jìn)行游戲的玩耍,開發(fā)相應(yīng)智力與推理能力。如果加以推廣,必將使人們在枯燥的時間有娛樂的游戲,使人們的生活更加豐富。1.3系統(tǒng)的主要功能和特色1.3.1系統(tǒng)的主要功能用戶根據(jù)鍵盤的四個方向鍵控制翻轉(zhuǎn)、向左、向右、和向下操作,每當(dāng)整一行全滿時,自動消除,并計分。1.3.2系統(tǒng)的特色本次設(shè)計的游戲中增加了計分功能,可以方便游戲玩家查看分?jǐn)?shù),查看自己的實際水平。設(shè)計框圖:俄羅斯俄羅斯方塊游戲幫助新游戲暫停繼續(xù)退出關(guān)于總體界面:界面界面左側(cè)右側(cè)游戲區(qū)域計分文字區(qū)域整體的大致效果:俄羅斯方塊游戲幫助游戲區(qū)域計分:好好學(xué)習(xí)課程。珍惜美好時光!第二章系統(tǒng)需求分析2.1本課題研究現(xiàn)狀分析俄羅斯方塊不僅有益智力,還能促進(jìn)手指靈活性。目前,手機(jī)普及的程度相當(dāng)大,人們可以在閑暇時間娛樂。它趣味性強(qiáng),易上手,能滿足人們對它的娛樂要求。因此,俄羅斯方塊游戲,可以為用戶提供一個可在普通個人電腦上運行的游戲,如果時間足夠,開發(fā)出手機(jī)版俄羅斯方塊后,將更方便人們閑暇時玩耍。2.2要解決的問題及解決方法解決了程序太大不能進(jìn)行簡單游戲娛樂的弊端,以相當(dāng)簡單的代碼完成了相應(yīng)功能,解決了人們玩游戲不方便的弊端,使人們能隨意在任何地方都能娛樂,消遣空閑時間。2.3.1系統(tǒng)設(shè)計的主要內(nèi)容在eclipse英文LUNA版中編寫代碼,使用Java中Frame、Button等相關(guān)組件進(jìn)行合理的組合設(shè)計,實現(xiàn)相應(yīng)效果,達(dá)到預(yù)期效果。2.3.2設(shè)計的目標(biāo)在編程完成后,可以利用鍵盤的上、下、左、右鍵,能夠?qū)崿F(xiàn)對游戲的控制,其中表示方塊翻轉(zhuǎn),表示方塊左移,表示方塊右移,表示方塊加速下降。游戲者在游戲時可以利用這四個鍵進(jìn)行相應(yīng)的操作,使其完成相應(yīng)變化,從而得到游戲者想要的形狀,以完成整行的匹配。第三章系統(tǒng)的詳細(xì)設(shè)計3.1系統(tǒng)的總體系結(jié)構(gòu)不同的隨機(jī)方塊會從區(qū)域上方緩慢落下,能以90度為單位旋轉(zhuǎn)每一方塊,以一格為單位左右移動方塊,讓方塊加速落下。區(qū)域中橫向格子方塊填滿,則該行會自動消除并為玩家的得分。當(dāng)固定的方塊推到區(qū)域最上方,則游戲結(jié)束。編寫主方法,對所編寫的類進(jìn)行測試。方塊的消去,變換形狀通過編寫的成員方法實現(xiàn)。使用隨機(jī)函數(shù)確定每次掉落的方塊形狀。使用ActionListiner響應(yīng)鍵盤事件。3.2系統(tǒng)各模塊的界面設(shè)計及實現(xiàn)3.2.1主窗體程序模塊設(shè)計與實現(xiàn)主窗體使用Frame窗體,在窗體上實現(xiàn)相應(yīng)功能。把菜單欄添加到窗體上。將不同菜單添加到菜單欄上,完成新游戲、暫停、繼續(xù)、退出等功能。相應(yīng)代碼如下:publicclassGameextendsJFrame{publicGame<>{Tetrisbloka=newTetrisblok<>;addKeyListener<a>;add<a>;}publicstaticvoidmain<String[]args>{Gameframe=newGame<>;JMenuBarmenu=newJMenuBar<>;frame.setJMenuBar<menu>;JMenugame=newJMenu<"游戲">;JMenuItemnewgame=game.add<"新游戲">;JMenuItempause=game.add<"暫停">;JMenuItemgoon=game.add<"繼續(xù)">;JMenuItemexit=game.add<"退出">;JMenuhelp=newJMenu<"幫助">;JMenuItemabout=help.add<"關(guān)于">;menu.add<game>;menu.add<help>;frame.setLocationRelativeTo<null>;//設(shè)置窗口相對于指定組件的位置,null將其置為屏幕中間frame.setDefaultCloseOperation<JFrame.EXIT_ON_CLOSE>;//關(guān)閉游戲frame.setSize<220,275>;frame.setTitle<"俄羅斯方塊">;frame.setVisible<true>;frame.setResizable<false>;//改變生成的窗體的大小,默認(rèn)為true<可改變>}}3.2.2方塊變換模塊設(shè)計與實現(xiàn)共設(shè)置有7種不同的形狀,分別為I形、S形、T形、Z形、O形、J形、L形。相應(yīng)形態(tài)舉例如下:1.I形:2.O形3.T形4.L形5.J形6.S形7.Z形相應(yīng)代碼如下://方塊的形狀方塊類型有S、Z、L、J、I、O、T共7種privatefinalintshapes[][][]=newint[][][] {//I類型 {{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0}},//S形{{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0}},//Z形{{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0}},//J形{{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0}},//O形{{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0}},//L形{{1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},{1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0}},//T形{{0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0},{1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0}}};3.2.3滿行消除及計分模塊設(shè)計與實現(xiàn)當(dāng)滿一整行后,需要自動消除,并實現(xiàn)計分。規(guī)定每滿一行,總分加10分。相應(yīng)代碼如下://滿一整行后消除,并加分publicvoiddelline<>{intc=0;for<intb=0;b<22;b++>{for<inta=0;a<12;a++>{if<map[a][b]==1>{c=c+1;if<c==10>{score+=10;for<intd=b;d>0;d-->{for<inte=0;e<11;e++>{map[e][d]=map[e][d-1];}}}}}c=0;}}第四章系統(tǒng)的安裝與測試4.1系統(tǒng)的安裝4.1.1系統(tǒng)的運行環(huán)境系統(tǒng)是在eclipse的LUNA英文版本下進(jìn)行編寫與調(diào)試的。4.1.2系統(tǒng)的安裝在eclipse官網(wǎng)直接下載、安裝eclipse,版本為eclipse-java-luna-SR2-win32-x86_64,在Myproject工作空間,text包下編寫、測試、執(zhí)行。4.2系統(tǒng)的測試程序完成后,進(jìn)行系統(tǒng)測試后,達(dá)到了預(yù)期目標(biāo),能進(jìn)行簡單的游戲,當(dāng)滿一整行時,可以自動消除,并實現(xiàn)計分功能。鍵盤功能測試:測試結(jié)果:方向鍵"↑":實現(xiàn)了旋轉(zhuǎn)方塊;方向鍵"↓":實現(xiàn)了方塊加速下落;方向鍵"←":實現(xiàn)了方塊左移;方向鍵"→":實現(xiàn)了方塊右移。結(jié)束語通過本次實驗,學(xué)習(xí)到了Java語言的精深,剛開始的時候,自己覺得不會做出理想的效果,但我一步一步慢慢的去做,最后出來了相應(yīng)效果,雖然還需改進(jìn),我已覺得有了很大的成就感。雖然在實驗過程中,遇到了許多的困難,但通過去查找資料,上網(wǎng)搜索,詢問同學(xué),問題都得到了解決。通過這次的學(xué)習(xí),使我對JAVA面向?qū)ο蟮木幊逃辛烁钜徊降牧私?因為這次的課程設(shè)計,使我在今后的工作和學(xué)習(xí)中,更有信心去克服生活中的困難,積極處理問題。也使我相信,只要自己想做、想學(xué),就沒有完成不了的工作。參考文獻(xiàn):[1]唐大仕Java程序設(shè)計〔修訂本.清華大學(xué)出版社,北京交通大學(xué)出版社,2012.3[2]劉慧寧,那盟.Java程序設(shè)計[M].北京:機(jī)械工業(yè)出版社,2005,10:309-312.[3]朱喜福,趙敏,夏齊霄,等.java程序設(shè)計[M].北京:人民郵電出版社,2005,2:272-290.[4]百度百科、百度文庫中相關(guān)知識.附錄:整個程序代碼:packagetext;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassGameextendsJFrame{publicGame<>{Tetrisbloka=newTetrisblok<>;addKeyListener<a>;add<a>;}publicstaticvoidmain<String[]args>{Gameframe=newGame<>;JMenuBarmenu=newJMenuBar<>;frame.setJMenuBar<menu>;JMenugame=newJMenu<"游戲">;JMenuItemnewgame=game.add<"新游戲">;JMenuItempause=game.add<"暫停">;JMenuItemgoon=game.add<"繼續(xù)">;JMenuItemexit=game.add<"退出">;JMenuhelp=newJMenu<"幫助">;JMenuItemabout=help.add<"關(guān)于">;menu.add<game>;menu.add<help>;frame.setLocationRelativeTo<null>;//設(shè)置窗口相對于指定組件的位置,null將其置為屏幕中間frame.setDefaultCloseOperation<JFrame.EXIT_ON_CLOSE>;//關(guān)閉游戲frame.setSize<220,275>;frame.setTitle<"俄羅斯方塊">;frame.setVisible<true>;frame.setResizable<false>;//改變生成的窗體的大小,默認(rèn)為true<可改變>}}//創(chuàng)建俄羅斯方塊classTetrisblokextendsJPanelimplementsKeyListener{//blockType代表方塊類型,turnState代表方塊狀態(tài)privateintblockType;privateintscore=0,i=0;privateintturnState;privateintx,y;intj=0;intflag=0;//定義已經(jīng)放下的方塊x=0-11,y=0-21;int[][]map=newint[13][23];//方塊的形狀方塊類型有S、Z、L、J、I、O、T共7種privatefinalintshapes[][][]=newint[][][] {//I類型 {{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0},{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0}},//S形{{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0},{0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0}},//Z形{{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0},{1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0}},//J形{{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},{1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0}},//O形{{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0}},//L形{{1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0},{1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0},{1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0},{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0}},//T形{{0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0},{0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0},{1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0},{0,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0}}};//生成新方塊的方法publicvoidnewblock<>{blockType=<int><Math.random<>*7>%7;//7種類型之間進(jìn)行轉(zhuǎn)換turnState=<int><Math.random<>*4>%4;//每一類型的四種狀態(tài)間轉(zhuǎn)換x=4;y=0;if<gameover<x,y>==1>{newmap<>;drawwall<>;score=0;JOptionPane.showMessageDialog<null,"小伙伴,這局輸了,休息會,去聽聽花開的聲音吧!">;//JOptionPane是發(fā)出通知的標(biāo)準(zhǔn)對話框}}//畫出游戲區(qū)域publicvoiddrawwall<>{for<i=0;i<12;i++>{//底部map[i][21]=2;}for<j=0;j<22;j++>{//左右兩邊map[11][j]=2;map[0][j]=2;}}//對游戲區(qū)域初始化,都置為0publicvoidnewmap<>{for<i=0;i<12;i++>{for<j=0;j<22;j++>{map[i][j]=0;}}}//構(gòu)造方法Tetrisblok<>{newblock<>;newmap<>;drawwall<>;Timertimer=newTimer<1000,newTimerListener<>>;//控制下落速度,每隔一秒下落一格timer.start<>;}//旋轉(zhuǎn)的方法publicvoidturn<>{inttempturnState=turnState;turnState=<turnState+1>%4;if<blow<x,y,blockType,turnState>==1>{}if<blow<x,y,blockType,turnState>==0>{turnState=tempturnState;}repaint<>;}//左移的方法publicvoidleft<>{if<blow<x-1,y,blockType,turnState>==1>{x=x-1;}repaint<>;}//右移的方法publicvoidright<>{if<blow<x+1,y,blockType,turnState>==1>{x=x+1;}repaint<>;}//下落的方法publicvoiddown<>{if<blow<x,y+1,blockType,turnState>==1>{y=y+1;delline<>;}if<blow<x,y+1,blockType,turnState>==0>{add<x,y,blockType,turnState>;newblock<>;delline<>;}repaint<>;}//判斷產(chǎn)生的方塊是否合法publicintblow<intx,inty,intblockType,intturnState>{for<inta=0;a<4;a++>{for<intb=0;b<4;b++>{if<<<shapes[blockType][turnState][a*4+b]==1>&&<map[x+b+1][y+a]==1>>|| <<shapes[blockType][turnState][a*4+b]==1>&&<map[x+b+1][y+a]==2>>>{return0;}}}return1;}//滿一整行后消除,并加分publicvoiddelline<>{intc=0;for<intb=0;b<22;b++>{for<inta=0;a<12;a++>{if<map[a][b]==1>{c=c+1;if<c==10>{score+=10;for<intd=b;d>0;d-->{for<inte=0;e<11;e++>{map[e][d]=map[e][d-1];}}}}}c=0;}}//判斷游戲是否結(jié)束publicintgameover<intx,inty>{if<blow<x,y,blockType,turnState>==0>{return1;}return0;}publicvoidadd<intx,inty,intblockType,intturnState>{intj=0;for<inta=0;a<4;a++>{for<intb=0;b<4;b++>{if<map[x+b+1][y+a]==0>{map[x+b+1][y+a]=shapes[blockType][turnState][j];}j++;}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論