![軟件工程課設(shè)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/bb086f07-a66b-436a-9d87-dfad75af0576/bb086f07-a66b-436a-9d87-dfad75af05761.gif)
![軟件工程課設(shè)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/bb086f07-a66b-436a-9d87-dfad75af0576/bb086f07-a66b-436a-9d87-dfad75af05762.gif)
![軟件工程課設(shè)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/27/bb086f07-a66b-436a-9d87-dfad75af0576/bb086f07-a66b-436a-9d87-dfad75af05763.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、濱江學(xué)院軟件工程課程設(shè)計題 目俄羅斯方塊游戲?qū)崿F(xiàn)專業(yè)班級:14軟件1學(xué)生姓名:陸嘉純學(xué) 號:20142344017指導(dǎo)教師:李振宏學(xué) 期:15-16第2學(xué)期目錄1. 課程設(shè)計概述 62. 項目的可行性研究與需求分析 62.1 項目可行性研究 62.1.1 技術(shù)可行性 62.1.2 經(jīng)濟可行性 72.1.3 操作可行性 73、項目設(shè)計的基本原理和采用的主要方法與技術(shù) 73.1 設(shè)計基本原理 73.2 主要方法和技術(shù) 83.2.1 鍵盤監(jiān)聽 83.2.2 重繪 83.2.3 形態(tài)方塊的數(shù)組設(shè)置 83.2.4 定時器設(shè)置線程 83.2.5 方塊的變形與消行 84. 總體設(shè)計 84.1 總體設(shè)計方案
2、84.2 模塊設(shè)計圖 94.2.1 MVC 設(shè)計模型圖 94.3 模塊說明 1.0.4.3.1 模型層功能模塊設(shè)計 1.04.3.2 視圖層功能模塊設(shè)計 1.14.3.3 控制層功能模塊設(shè)計 1.15. 詳細設(shè)計 1.2.5.1 模型層設(shè)計 1.2.5.1.1 產(chǎn)生圖形 1.2.5.1.2 產(chǎn)生地圖 1.3.5.2 視圖層設(shè)計 1.4.5.2.1 方塊的顯示 1.4.5.2.2 分?jǐn)?shù)的顯示 1.5.5.3 控制層設(shè)計 1.6.5.3.1 方塊的移動與變形 1.66. 編碼實現(xiàn) 1.9.6.1 游戲界面演示 1.9.6.2 消行并得分演示 1.9.6.3 游戲結(jié)束演示 2.0.7. 測試用例設(shè)計
3、、測試與運行記錄 2.07.1 游戲界面菜單選項的功能測試 2.07.1.1 “游戲”菜單測試 2.07.2 按鍵事件的功能測試 2.1.7.2.1 方塊移動測試 2.1.7.2.2 方塊反轉(zhuǎn)測試 2.1.7.3 方塊堆砌與消行測試 2.1.7.3.1 底層碰撞 2.1.7.3.2 滿行消除 2.1.7.4 測試結(jié)果分析 2.2.8. 課程設(shè)計完成結(jié)果分析與個人小結(jié) 2.2參考文獻: 2.3.致謝 2.4.附錄 2.5.俄羅斯方塊游戲?qū)崿F(xiàn)陸嘉純南京信息工程大學(xué)濱江學(xué)院計算機系,江蘇 南京 210044 摘要:在現(xiàn)今電子信息高速發(fā)展的時代,電子游戲已經(jīng)深入人們的日常 生活,成為老少皆宜的娛樂方式
4、。 但是游戲設(shè)計結(jié)合了日新月異的技術(shù), 在一個產(chǎn)品中整合了復(fù)雜的設(shè)計、藝術(shù)、聲音和軟件,所以并不是人人 皆知。直到今天,在中國從事游戲設(shè)計的人仍然很少,但是游戲行業(yè)的 發(fā)展之快,遠超如家電、汽車等傳統(tǒng)行業(yè),也正因為如此,游戲人才的 教育、培養(yǎng)遠落后于產(chǎn)業(yè)的發(fā)展。俄羅斯方塊是個老少皆宜的小游戲,它實現(xiàn)由四塊正方形的色塊組 成,計算機隨機產(chǎn)生不同七種類型的方塊,根據(jù)計算機時鐘控制它在一 定的時間不停的產(chǎn)生,用戶根據(jù)鍵盤的四個方向鍵控制翻轉(zhuǎn)、向左、向 右和向下操作,然后程序根據(jù)這七種方塊堆疊成各種不同的模型。 關(guān)鍵詞:俄羅斯方塊;數(shù)據(jù)結(jié)構(gòu); JavaRealization Of The Game T
5、etrisMatt JasonDepartmnet of Computer,Binjiang College ,NUIST ,Nanjing 210044 ,ChinaAbstract : In the current era with rapid development of electronic information, electronic games have been deeply People's Daily life, become the entertainment for young and old.But the game design combined with
6、the ever-changing technology, integrates the complex in a product design, art, sound, and software, so not everyone knows.Until today, people in China to engage in game design is still very few, but the game industry, the rapid development of far beyond traditional industries, such as household appl
7、iances, automobile, also because of this, the game of talent education and training is far behind the development of the industry.Tetris is a game for young and old, it is composed of four square of color piece, the computer randomly generate different seven types of square, according to the control
8、 it in a certain amount of time on the computer clock, users according to the four keyboard direction key control flip, left, right and down operation, then the program according to the seven squares stack into a variety of different models.Key words :Tetris ; Data Structure ;Java1. 課程設(shè)計概述設(shè)計俄羅斯方塊游戲程
9、序,用戶可以通過平移和轉(zhuǎn)動自動落下的不同形 狀物體,填滿一行來得分。開發(fā)智力和反應(yīng)能力。 (1)界面的左側(cè)是游戲區(qū)域。新的圖形會在頂部刷新,并且自動下落,可 以通過方向左右鍵平移和方向上鍵順時針旋轉(zhuǎn)來控制圖形落下的位置。 (2)界面的右側(cè)是選項和顯示區(qū),顯示現(xiàn)在的得分,以與開始游戲、暫停 游戲、結(jié)束游戲按鈕。2. 項目的可行性研究與需求分析2.1 項目可行性研究2.1.1 技術(shù)可行性該程序是由Java語言實現(xiàn),Java是由Sun Microsystems 公司于1995 年 5 月推出的 Java 程序設(shè)計語言(以下簡稱 Java 語言)和 Java 平臺的總 稱。用 Java 實現(xiàn)的 Hot
10、 Java 瀏覽器 (支持 Java applet )顯示了 Java 的魅 力:跨平臺、動態(tài)的 Web 、Internet 計算。從此, Java 被廣泛接受并推動了 Web 的迅速發(fā)展, 常用的瀏覽器現(xiàn)在均支 持 Java applet 。另一方面, Java 技術(shù)也不斷更新。1991年,Sun公司的James Gosling 。Bill Joe等人,為電視、控制烤 面包機等家用電器的交互操作幵發(fā)了一個Oak (種橡樹的名字)軟件,他是 Java 的前身。當(dāng)時, Oak 并沒有引起人們的注意,直到 1994 年,隨著 互聯(lián)網(wǎng)飛速發(fā)展, 他們用 Java 編制了 HotJava 瀏覽器, 得
11、到了 Sun 公司首 席執(zhí)行官 Scott McNealy 的支持,得以研發(fā)和發(fā)展。為了促銷和法律的原 因, 1995 年 Oak 更名為 Java。Java 分為三個體系 JavaSE(Java2 Platform Standard Edition , java 平 臺標(biāo)準(zhǔn)版 ), JavaEE(Java 2 Platform,Enterprise Edition , java 平臺企業(yè)版 ), JavaME(Java 2 Platform Micro Edition , java 平臺微型版 )。 Java 平臺由Java 虛 擬 機 ( Java Virtual Machine ) 和
12、Java 應(yīng) 用 編 程 接 口 (Application Programming Interface、簡稱 API )構(gòu)成。Java 應(yīng)用編程接口為 Java 應(yīng)用提供了一個獨立于操作系統(tǒng)的標(biāo)準(zhǔn)接口, 可分為基本部分和擴展部分。 Java 語言是一個支持網(wǎng)絡(luò)計算的面向?qū)ο蟪?序設(shè)計語言。 Java 語言吸收了 Smalltalk 語言和 C+ 語言的優(yōu)點,并增加 了其它特性,如支持并發(fā)程序設(shè)計、網(wǎng)絡(luò)通信、和多媒體數(shù)據(jù)控制等。2.1.2 經(jīng)濟可行性本系統(tǒng)開發(fā)應(yīng)用之后主要用于游戲的實現(xiàn),有開發(fā)周期短和高效率等優(yōu) 點。基于 Java 語言開發(fā),開源免費,因此該項目的開發(fā)成本很低,從這一 點上來說,
13、該系統(tǒng)經(jīng)濟上可行。2.1.3 操作可行性由系統(tǒng)分系可以看出本程序的開發(fā)在技術(shù)上具有可行性。首先游戲?qū)λ?要求的軟、 硬件的最低配置現(xiàn)在大多數(shù)的用戶用機都能達到。 現(xiàn)有的開發(fā)工 具和技術(shù)完全能夠?qū)崿F(xiàn)。 本程序?qū)τ脩魶]有任何的特殊要求, 實際操作基本 上以鍵盤操作為主并輔以少量的鼠標(biāo)操作, 操作方式很方便。 因此該項目具 有良好的易用性。3、項目設(shè)計的基本原理和采用的主要方法與技術(shù)3.1 設(shè)計基本原理首先定義一個三維數(shù)組分別存放方塊類型 (包括 7 種 :S、Z、L、J、I、O、 T),用0和1代表當(dāng)前方塊是否顯示。 其次在窗體中添加地圖, 并設(shè)置邊框 的數(shù)值為 2 以作區(qū)分, 對方塊與地圖進行碰
14、撞檢測, 觸碰左右邊界則設(shè)置不 得越界, 觸碰底邊則另其停止移動。 通過按鍵監(jiān)聽事件獲得對鍵盤事件的監(jiān) 聽來控制方塊的移動與變形。若最下面一行的方塊數(shù)值均為 1 則進行置 0 并獲得游戲加分。3.2 主要方法和技術(shù)鍵盤監(jiān)聽通過 KeyListener 中的 KeyAdapter 來進行對鍵盤的行為操作的時間監(jiān) 聽,以此改變方塊的位置和形態(tài)。3.2.2 重繪重構(gòu) paint 方法已實現(xiàn)對人機界面的 panel 重繪,將幀數(shù)畫布變成連續(xù) 的動畫,形成方塊下落過程。3.2.3 形態(tài)方塊的數(shù)組設(shè)置普通的一、二維數(shù)組難以實現(xiàn)多種方塊的形態(tài)構(gòu)成與變化,因此創(chuàng)建一 個四維數(shù)組容器來放置多種形態(tài)方塊。 第一維
15、代表方塊類型 (包括 7 種 :S、Z、 L、J、I、0、T),第二維代表旋轉(zhuǎn)次數(shù),第三四維代表方塊矩陣。3.2.4 定時器設(shè)置線程設(shè)置一個 Timer 來創(chuàng)建 Thread ,控制方塊的下落速度。3.2.5 方塊的變形與消行通過形態(tài)方塊的數(shù)組設(shè)置來實現(xiàn)方塊是否顯示,變形是對顯示方塊的數(shù) 值進行置 0 或 1,而消行則是將數(shù)值置 0 進行消行。4. 總體設(shè)計4.1 總體設(shè)計方案本游戲設(shè)計按照 MVC 設(shè)計模式,將游戲的輸入、處理、輸出流程按照 Model 、 View 、 Controller 的方式進行分離,即將游戲劃分成三個模塊: 模型層、視圖層、控制層。4.2模塊設(shè)計圖設(shè)計模型圖4.3模
16、塊說明模型層功能模塊設(shè)計圖4一2432視圖層功能模塊設(shè)計433控制層功能模塊設(shè)計5.詳細設(shè)計5.1模型層設(shè)計產(chǎn)生圖形首先創(chuàng)建方塊的數(shù)據(jù)結(jié)構(gòu),定義一個4*4的矩陣,共16個小格。用0和1來表示當(dāng)前方格是否顯示,由此可以繪制多種圖形1100110Q0000000Q0型方塊1000100011000000L型方塊圖5T產(chǎn)生地圖與方塊的數(shù)值不同,在窗體四周繪制一圈方塊, 并設(shè)置每個塊的值為 2, 以作區(qū)分。2000000000022000000000022000000000022000000000022000000QQ00220000000a002200000000002200000000002200
17、000a0000220000000000220QQa00Q00Q222222222222:2圖5-25.2視圖層設(shè)計方塊的顯示根據(jù) nextBlock方法來產(chǎn)生隨機數(shù),獲取一個隨機圖形,進行顯示方法來進行畫面的繪制然后根據(jù)paint522分?jǐn)?shù)的顯示在游戲主界面的旁邊加上分?jǐn)?shù)字符串,以來顯示玩家的得分。5.3控制層設(shè)計 方塊的移動與變形通過控制按鍵來實現(xiàn)方塊的移動,繼承 KeyListener來對鍵盤事件進行 監(jiān)聽。按下上鍵,實現(xiàn)turn方法,進行方塊的state改變,則進行變形操 作;原始的 turnSta 1:巳K1/1000100011000000按鍵(UP鍵)圖5-5按下下鍵,實現(xiàn)dow
18、n 加速下落;方法,對方塊的location的縱坐標(biāo)遞增,則進行原始的方塊Locat i on方塊的Locat i"縱坐標(biāo)十1100C0Z10000110°00110燈V01000000000按鍵(DOWN誕)000000000000育塊重繪進行顯示則進行圖形的左按左右鍵,對方塊的location的橫坐標(biāo)進行加減操作, 右移動。原始的方塊Location000001100110000002000110000按鍵(LEFT 或 RIGHT 鍵)*方塊的Locat i。門璘坐扌示T或者十1000°Vpr0°11000003方塊重竽進行顯示圖5-76. 編碼實
19、現(xiàn)6.1游戲界面演示垃j Tecikscore: 0拒絕盜版游戲 注爲(wèi)自我側(cè)戶 謹(jǐn)防受殞上當(dāng) 適度椒溢M 沉迷游戲傷身 合理安排時間 享受健康生活6.2消行并得分演示I -j Tnriim好score: 10拒絕瓷版游戲 連意自我保護 謹(jǐn)防受騙上當(dāng) 適度游戲益腦 一沉迷游戲傷身合理安科E時間 享受犍康生活6.3游戲結(jié)束演示7. 測試用例設(shè)計、測試與運行記錄7.1游戲界面菜單選項的功能測試7.1.1 “游戲”菜單測試(1)點擊“游戲”-> “新游戲” 輸出:游戲幵始結(jié)果:正常(2)點擊“游戲”-> “暫?!?輸出:彈出游戲結(jié)束提示框 結(jié)果:正常(3)點擊“游戲” -> “繼續(xù)”
20、 輸出:游戲繼續(xù)進行 結(jié)果:正常7.2 按鍵事件的功能測試7.2.1 方塊移動測試游戲過程中,點擊“左、右、下”方向鍵 輸出:方塊正常移動,不會移出邊界 結(jié)果:正常7.2.2 方塊反轉(zhuǎn)測試 游戲過程中,點擊向上方向鍵輸出:方塊無邊界和障礙物阻擋的情況下可反轉(zhuǎn) 結(jié)果:正常7.3 方塊堆砌與消行測試底層碰撞輸出:方塊成功堆砌在底部結(jié)果:正常7.3.2 滿行消除輸出:所有滿行被消除,方塊依次下移結(jié)果:正常7.4 測試結(jié)果分析經(jīng)過測試,本游戲?qū)崿F(xiàn)了基本的功能,不過整體功能還不是很強大,作為開 發(fā)的第一個版本,游戲在很多方面還需要進一步完善。8. 課程設(shè)計完成結(jié)果分析與個人小結(jié)此次課程設(shè)計,通過俄羅斯方
21、塊這個小程序的一系列制作與分析,軟件 工程的程序制作流程以與 OOP 的概念已經(jīng)深入我心。通過此次課程設(shè)計,我在軟件工程這門課程方面獲得了很大了提高,能 夠用深層次分析的方法去思考問題以與解決問題, 通過需求分析、 概要設(shè)計 和詳細設(shè)計來進一步的理解程序。參考文獻:1 明日科技.Java從入門到精通(第3版)M.明日科技,譯.3版.北 京:清華大學(xué)出版社, 2012 : 230-249 2 布魯斯??藸? Java 編程思想(第 4 版) M .陳昊鵬,譯. 4 版.北京:機械工業(yè)出版社, 2007 :148-167 .致謝磨練這次課程設(shè)計,我深刻領(lǐng)會到基礎(chǔ)的重要性,課程設(shè)計不僅僅能幫助我 檢
22、驗所學(xué)知識的學(xué)習(xí)成果, 更多的是可以幫助我更加清楚的認識自我, 意志與耐性,這會為我日后的工作和生活帶來很大的幫助。通過一個學(xué)期的學(xué)習(xí),這次的課程設(shè)計已接近尾聲,由于經(jīng)驗的匱乏, 難免有許多考慮不周全的地方, 在這里衷心感謝李振宏老師的教學(xué)教導(dǎo), 與一起學(xué)習(xí)的同學(xué)的支持與幫助。附錄全部代碼如下:public class Tetris extends JFrame public static void main(String args) Tetris te = new Tetris(); te.setVisible(true);/ 如果在界面中添加了編輯框等會搶占焦點的控件,則需要用下面 的代碼
23、/ te.requestFocus(true);/ 讓游戲面板獲得焦點 - 搶到鍵盤的監(jiān)聽 public static final int L = 30; private TetrisPanel tp;JMenuItem itemPause;JMenuItem itemContinue;JMenuItem itemContact;public Tetris() this.setTitle("Tetris"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocation(600, 200);this.setSi
24、ze(600, 730);this.setResizable(false);tp = new TetrisPanel();this.getContentPane().add(tp);/ 添加菜單JMenuBar menubar = new JMenuBar(); this.setJMenuBar(menubar);JMenu menuGame = new JMenu("游戲 ");menubar.add(menuGame);JMenu aboutGame = new JMenu("關(guān)于 ");menubar.add(aboutGame);JMenuIte
25、m itemNew = new JMenuItem(" 新游戲 "); itemNew.setActionCommand("new");itemPause = new JMenuItem("暫停 ");itemPause.setActionCommand("pause");itemContinue = new JMenuItem("繼續(xù) ");itemContinue.setActionCommand("continue"); itemContinue.setEnabled(
26、false);menuGame.add(itemNew);menuGame.add(itemPause); menuGame.add(itemContinue);itemContact = new JMenuItem("聯(lián)系我們 ");aboutGame.add(itemContact);MenuListener menuListener = new MenuListener(); itemNew.addActionListener(menuListener); itemPause.addActionListener(menuListener); itemContinue.
27、addActionListener(menuListener);/ 讓整個 JFrame 添加鍵盤監(jiān)聽 this.addKeyListener(tp.listener);class MenuListener implements ActionListener Overridepublic void actionPerformed(ActionEvent e) / 玩新游戲if (e.getActionCommand().equals("new") tp.newGame();if (e.getActionCommand().equals("pause")
28、timer.stop();itemContinue.setEnabled(true); itemPause.setEnabled(false);if (e.getActionCommand().equals("continue") timer.restart();itemContinue.setEnabled(false); itemPause.setEnabled(true);private Timer timer;class TetrisPanel extends JPanel / 方塊的形狀:/第一維代表方塊類型(包括7種:S、Z、L、J、I、0、T)/ 第二維代表旋
29、轉(zhuǎn)次數(shù)/ 第三維代表方塊矩陣/ shapestypeturnStatei i-> blocki/4i%4int shapes = new int /* 模板 0,0,0,0,0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,0,0,0,0,* 0,0,0,0, 0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0, 0,0,0,0,* 0,0,0,0,0,0,0,0, 0,0,0,0, 0,0,0,0 */ I ( 把版本 1中的橫條從第 1行換到第 2行) 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ,
30、 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, 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,
31、 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 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,
32、 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,
33、 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,
34、 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 ;private int blockType;/方塊類型private int turnState;/旋轉(zhuǎn)狀態(tài)private int x;/方塊的位置 x- 列的位置 - 列號private int y;/方塊的位置 y- 行的位置 - 行號private int map = new int1323;/地圖:12 列2
35、2 行。為防止越界,數(shù)組開成: 13 列 23 行private int delay = 1000;public TimerKeyLister listener = new TimerKeyLister();private int score = 0;/分?jǐn)?shù)public TetrisPanel() newGame();nextBlock();/ timer = new Timer(delay,listener);/ timer.start();public void newGame() blockType = (int) (Math.random() * 1000) % 7;turnState
36、 = (int) (Math.random() * 1000) % 4;x = 4;y = 0;for (int i = 0; i < 12; i+) /走列for (int j = 0; j < 21; j+) /走行if (i = 0 | i = 11) / 3為界面邊框的格mapi j = 3;/ 按理只要用 0 和 1 以外的整數(shù)就可 以,但這里用 3 有特殊作用 - 后面用 else mapi j = 0;mapi21 = 3;/ 3為界面邊框的格if (timer != null) timer.stop();delay = 1000;timer = new Timer(
37、delay, listener);timer.start();private void nextBlock() blockType = (int) (Math.random() * 1000) % 7; turnState = (int) (Math.random() * 1000) % 4;x = 4;y = 0;/ game Over if (crash(x, y, blockType, turnState) = 0) timer.stop();int option = JOptionPane.showConfirmDialog(this, "Game Over! ,還敢來嗎 .
38、");if (option = JOptionPane.OK_OPTION) newGame(); else if (option = JOptionPane.NO_OPTION) System.exit(0);private void down() if (crash(x, y + 1, blockType, turnState) = 0) /注意,這里用 y+1 ,是判斷塊往下掉一格后, map 中對應(yīng)位置是否為堆積塊或框架 add(x, y, blockType, turnState);/ 把當(dāng)前方塊的信息保存 到地圖nextBlock(); else y+;repaint()
39、;private void left() if (x >= 0) x -= crash(x - 1, y, blockType, turnState);repaint();private void right() if (x < 8) x += crash(x + 1, y, blockType, turnState);repaint();private void turn() if (crash(x, y, blockType, (turnState + 1) % 4) = 1) turnState = (turnState + 1) % 4;repaint();private
40、void add(int x, int y, int blockType, int turnState) for (int a = 0; a < 4; a+) for (int b = 0; b < 4; b+) if (shapesblockTypeturnStatea * 4 + b = 1) mapx + b + 1y + a = 1;tryDelLine();/ 消行private void tryDelLine() for (int b = 0; b < 21; b+) int c = 1;for (int a = 0; a < 12; a+) c &
41、= mapab;/ 全部是 1, c 的結(jié)果才是 1 if (c = 1) / 有一行需要消/ 依次往下移動一行for (int d = b; d > 0; d-) for (int e = 0; e < 11; e+) maped = maped - 1;/ 加分 score += 10;delay /= 1.05;timer.setDelay(delay);/ 參數(shù)例子 : 4,3,2,3/ 判斷有無碰撞private int crash(int x, int y, int blockType, int turnState) for (int a = 0; a < 4;
42、a+) for (int b = 0; b < 4; b+) / if( (shapesblockTypeturnStatea*4+b=1 &&/ mapx+b+1y+a =1) |/ (shapesblockTypeturnStatea*4+b=1 &&/ mapx+b+1y+a =3 ) )/ if (shapesblockTypeturnStatea * 4 + b & mapxb + 1y + a) = 1) return 0;/ 碰撞return 1;/ 沒有碰撞Overridepublic void paint(Graphics g) / blockType =6;/ turnState = 3;/ x=4;/ y=6;super.paint(g);/ 消除殘影g.setColor(new Color(153, 51, 205);/ 畫當(dāng)前方塊for (int j = 0; j < 16; j+) if (shapesblockTypeturnStatej = 1) g.fillRect(j % 4 + x + 1) * L, (j / 4 + y) * L, L, L); g.setColo
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 粵人版地理八年級上冊《第二節(jié) 工業(yè)》聽課評課記錄1
- 八年級數(shù)學(xué)上冊 12.3 角的平分線的性質(zhì) 第2課時 角的平分線的判定聽評課記錄 新人教版
- 指導(dǎo)青年教師開展課題研究協(xié)議書(2篇)
- 電力傳輸合同(2篇)
- 人教版數(shù)學(xué)八年級下冊《閱讀與思考海倫-秦九韶公式》聽評課記錄1
- 【2022年新課標(biāo)】部編版七年級上冊道德與法治7.2 愛在家人間 聽課評課記錄
- 小學(xué)數(shù)學(xué)-六年級下冊-4-3-5 用比例解決問題 聽評課記錄
- 華東師大版八年級上冊數(shù)學(xué)聽評課記錄《13.4尺規(guī)作圖(2)》
- 湘教版數(shù)學(xué)八年級上冊1.3.3《整數(shù)指數(shù)冪的運算法則》聽評課記錄1
- 蘇科版數(shù)學(xué)九年級上冊第2章《弧長及扇形的面積》聽評課記錄
- 2025年魯泰集團招聘170人高頻重點提升(共500題)附帶答案詳解
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 企業(yè)員工食堂管理制度框架
- 《辣椒主要病蟲害》課件
- 電力溝施工組織設(shè)計-電纜溝
- 2024年煤礦安全生產(chǎn)知識培訓(xùn)考試必答題庫及答案(共190題)
- 《法律援助》課件
- 小兒肺炎治療與護理
- GB/T 36547-2024電化學(xué)儲能電站接入電網(wǎng)技術(shù)規(guī)定
- 學(xué)校物業(yè)管理投標(biāo)書范本
- 《高處作業(yè)安全》課件
評論
0/150
提交評論