Java連連看課程設(shè)計.doc_第1頁
Java連連看課程設(shè)計.doc_第2頁
Java連連看課程設(shè)計.doc_第3頁
Java連連看課程設(shè)計.doc_第4頁
Java連連看課程設(shè)計.doc_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

摘要關(guān)鍵字:發(fā)展,java,連連看,程序設(shè)計;現(xiàn)代科學(xué)技術(shù)的發(fā)展,改變了人類的生活,作為新世紀(jì)的大學(xué)生,應(yīng)該站在時代發(fā)展的前沿,掌握現(xiàn)代科學(xué)技術(shù)知識,以適應(yīng)社會的發(fā)展,能夠獨立完成面臨的任務(wù),作一名有創(chuàng)新意識的新型人才。Java語言的學(xué)習(xí)熱潮并沒有因為時間的推移而消退,相反,由于計算機技術(shù)的發(fā)展所帶來的新應(yīng)用的出現(xiàn),Java越來越流行,這種情況是以往程序設(shè)計語言在其生存周期內(nèi)所不多見的。Java語言之所以這樣長盛不衰,一是因為其眾多的技術(shù)特點與現(xiàn)今的應(yīng)用十分合拍,可以覆蓋大部分的需求;二是因為SUN公司不斷推出新的版本,完善Java自身的功能。有了這兩點,Java語言成為程序員首選的程序設(shè)計開發(fā)工具就在情理之中了。連連看游戲是一種很流行的小游戲,記得在小時候去游戲廳玩的時候就有兩臺專門的連連看的機器(當(dāng)然當(dāng)時不叫這個名字),一個是連麻將牌、另一個是連水果圖片。當(dāng)時的麻將牌分好幾層,相鄰層的牌還可以連,看得人眼花繚亂。作為一個java初學(xué)者,我所編輯的“悠嘻猴連連看”小游戲,只有幾個基本功能:“開始”“再來一局”炸彈“重新開始”“退出”。我所選中給出的游戲界面很漂亮,不過似乎圖形只有一層,而且數(shù)量也不是很多,只有64張圖,降低了不少難度。目 錄第1章 需求分析 1.1 功能分析每次用戶選擇兩個圖形,如果圖形滿足一定條件(兩個圖形一樣,且這兩個圖形之間存在轉(zhuǎn)彎少于3的路徑),則兩個圖形都能消掉。給定任意具有相同圖形的兩個格子,我們需要尋找這兩個格子之間在轉(zhuǎn)彎最少的情況下,經(jīng)過格子數(shù)目最少的路徑。如果這個最優(yōu)路徑的轉(zhuǎn)彎數(shù)目少于3 ,則這兩個格子可以消去。將界面中相同的猴子圖片消去,游戲限時1000秒,如果在規(guī)定的時間內(nèi)沒有完成,就會跳出對話框“笨蛋!游戲時間到!GAME OVER !”的字樣。如果玩家贏了這局,還沒有過癮的話,可以單擊“再來一局”。判斷游戲是否結(jié)束。如果所有圖形全部消去,或者游戲玩家不可能再消去任意兩個格子的時候,游戲應(yīng)該結(jié)束。后一種情況,我們稱之為“死鎖”。在死鎖的情況下,我們也可以暫時不終止游戲,而是隨機打亂局面,使得打破“死鎖”局面。不管怎樣,我們需要判別游戲當(dāng)前狀態(tài)是否為“死鎖”狀態(tài)。我們首先思考問題:怎么判斷兩個圖形能否相消?前面分析中,我們已經(jīng)知道,兩個圖形能夠相消,當(dāng)且僅當(dāng)這兩個圖形相同,且它們之間存在路徑轉(zhuǎn)彎數(shù)目小于3。因此,我們主要需要解決的問題還是,怎樣求出相同圖形之間的最短路徑?這個最短的路徑,我們首先需要保證轉(zhuǎn)彎數(shù)目最少。在轉(zhuǎn)彎數(shù)目最少的情況下,經(jīng)過的格子數(shù)目要盡可能地少。在經(jīng)典的最短路問題中,我們需要求出經(jīng)過格子數(shù)目最少的路徑。而這里,要保證轉(zhuǎn)彎數(shù)目最少,需要把最短路問題的目標(biāo)函數(shù)修改為從一個點到另一個點的轉(zhuǎn)彎次數(shù)。雖然,目標(biāo)函數(shù)修改了,但算法的框架仍然可以保持不變。廣度優(yōu)先搜索是解決經(jīng)典最短路問題的一個思路。我們看看在新的目標(biāo)函數(shù)(轉(zhuǎn)彎數(shù)目最少)下,如何用廣度優(yōu)先搜索來解決圖形A(x1,y1)和圖形B(x2,y2)之間的最短路問題。1.2 流程圖 第2章 詳細(xì)設(shè)計2.1課程設(shè)計目的JAVA程序設(shè)計是計算機相關(guān)專業(yè)的必修專業(yè)基礎(chǔ)課程,其實踐性、應(yīng)用性很強。實踐教學(xué)環(huán)節(jié)是必不可少的一個重要環(huán)節(jié)。本課程的程序設(shè)計專題實際是計算機相關(guān)專業(yè)學(xué)生學(xué)習(xí)完JAVA程序設(shè)計課程后,進行的一次全面的綜合訓(xùn)練,JAVA程序設(shè)計的設(shè)計目的是加深對理論教學(xué)內(nèi)容的理解和掌握,使學(xué)生較系統(tǒng)地掌握程序設(shè)計及其在網(wǎng)絡(luò)開發(fā)中的廣泛應(yīng)用,基本方法及技巧,為學(xué)生綜合運用所學(xué)知識,利用軟件工程為基礎(chǔ)進行軟件開發(fā)、并在實踐應(yīng)用方面打下一定基礎(chǔ)。2.2 課程設(shè)計的實驗環(huán)境硬件要求能運行Windows 9.X操作系統(tǒng)的微機系統(tǒng)。JAVA程序設(shè)計語言及相應(yīng)的集成開發(fā)環(huán)境,UltraEdit-32開發(fā)工具。2.3 課程設(shè)計的預(yù)備知識熟悉JAVA語言及UltraEdit-32開發(fā)工具。2.4 課程設(shè)計要求按課程設(shè)計指導(dǎo)書提供的課題,要求學(xué)生在自行完成各個操作環(huán)節(jié),并能實現(xiàn)且達到舉一反三的目的,完成一個項目解決一類問題。要求學(xué)生能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計和解答類似問題;對此能夠較好地理解和掌握,能夠進行簡單分析和判斷;能編寫出具有良好風(fēng)格的程序;掌握J(rèn)AVA程序設(shè)計的基本技能和面向?qū)ο蟮母拍詈头椒?;了解多線程、安全和網(wǎng)絡(luò)等編程技術(shù)。同時培養(yǎng)學(xué)生進行分析問題、解決問題的能力;培養(yǎng)學(xué)生進行設(shè)計分析、設(shè)計方法、設(shè)計操作與測試、設(shè)計過程的觀察、理解和歸納能力的提高。2.5 連連看算法設(shè)計在檢驗兩個方塊能否消掉的時候,我們要讓兩個方塊同時滿足兩個條件才行,就是兩者配對并且連線成功。* 分3種情況:(從下面的這三種情況,我們可以知道,需要三個檢測,這三個檢測分別檢測一條直路經(jīng)。這樣就會有三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個轉(zhuǎn)彎點)把兩個按鈕連接起來了) * 1.相鄰 * 2. 若不相鄰的先在第一個按鈕的同行找一個空按鈕。1).找到后看第二個按鈕橫向到這個空按鈕所在的列是否有按鈕。2).沒有的話再看第一個按鈕到與它同行的那個空按鈕之間是否有按鈕。3).沒有的話,再從與第一個按鈕同行的那個空按鈕豎向到與第二個按鈕的同行看是否有按鈕。沒有的話路經(jīng)就通了,可以消了. * 3.若2失敗后,再在第一個按鈕的同列找一個空按鈕。1).找到后看第二個按鈕豎向到這個空按鈕所在的行是否有按鈕 2).沒有的話,再看第一個按鈕到與它同列的那個空按鈕之間是否有按鈕。3).沒有的話,再從與第一個按鈕同列的那個空按鈕橫向到與第二個按鈕同列看是否有按鈕。沒有的話路經(jīng)就通了,可以消了。* 若以上三步都失敗,說明這兩個按鈕不可以消去。2.6類的實現(xiàn)方法2.6.1 成員變量成員變量也叫類的屬性,一般帶有訪問控制屬性的,而全局變量雖然也有類的屬性,但全局變量嚴(yán)重影響了封裝和模塊化,一般的全局變量前面要加上static和 fina屬性其中,static使該變量任何類都可用(方法 ClassName.全局變量名) ,而 fina則使得變量不可更改,基本上算是常量了,這也在一定程度上防止對變量的非法修改。表 2-6-1 成員變量 成員變量描述變量類型名稱文件FileFile文件區(qū)JtextareaTextarea菜單項JmenuitemMenuitem_copy菜單UmenuitemUmenuitem標(biāo)簽JlabelLabel_seek文件名StringSeel2.6.2 方法設(shè)計方法名稱為任何合乎語法的識別字,返回值類型是方法執(zhí)行結(jié)果返回給調(diào)用者的數(shù)據(jù)類型,void表示沒有返回值,參數(shù)行(parameterlist)是調(diào)用時給予的參數(shù)聲明,兩個以上的參數(shù)聲明以逗號隔開,若沒有參數(shù)則參數(shù)行為空白,調(diào)用時每一個參數(shù)對應(yīng)一個參數(shù)值(argument)大括號內(nèi)為方法本體,也稱為方法程序模塊(block),包含聲明(declarations)和語句(statements),聲明也可以摻雜在語句之間。一個方法不能聲明在另一個方法內(nèi)。表 2-6-2 方法定義方法名功能備注MyTextEditor創(chuàng)建文本編輯器構(gòu)造方法Dialog創(chuàng)建對話框addMenu添加菜單欄菜單項writeToFile向文本區(qū)寫文件readFromFile讀文件openDialog打開文件saveDialog保存對話框actionPerformed事件處理itemStateChangedItemListener事件處理方法mouseClicked鼠標(biāo)處理事件接口方法mouseEvent鼠標(biāo)處理事件接口方法mouseReleased鼠標(biāo)處理事件接口方法mouseEntered鼠標(biāo)處理事件接口方法mouseExit鼠標(biāo)處理事件接口方法mouseDragged鼠標(biāo)處理事件接口方法Main程序開始運行 第3章 測試分析3.1程序運行情況連連看游戲規(guī)則很簡單,就是點中兩個互相匹配并且可以通過不多于兩個折點的折線連在一起的方塊后,這兩個方塊就可以消掉。圖1初始界面菜單選項中,包括“開始游戲”、“重新開始”、“炸彈”、“退出”功能。當(dāng)選擇炸彈功能時:每次含有三個炸彈,所炸的位置也是隨機的;圖2 游戲界面粗略想來,由于用戶每次只能消除一對圖形,即只會用到一個最短路徑,但由于實現(xiàn)并不知道用戶會選擇哪一對圖形,所以需要事先計算出所有可能的最短路徑并保存起來。此外,采用這種方法的話似乎每次用戶消去一對相同圖像之后都需要重新計算出當(dāng)前所有可能被連接的相同圖形之間最短路徑,這是因為當(dāng)某些圖像被消去之后可能會產(chǎn)生很多新路徑,而我們又不能確定這些空出來的格子到底能夠影響哪些路徑,所以就只好都重新計算一遍。其缺點很明顯就是每次消去圖形動作之后重新計算所有可能的最短路徑所需要消耗的時間;而該方法的優(yōu)點則是可以很快地判斷兩個相同圖形之間是否存在滿足條件的最短路徑。如果用戶很厲害,每次都能選中可以消除的圖形對,那么用這種方法浪費的時間就會相當(dāng)可觀,畢竟用戶未選中的其他可以連接的圖形對之間的最短路徑都被浪費掉了;而如果用戶很差勁,每輪選擇的次數(shù)都遠(yuǎn)遠(yuǎn)大于當(dāng)前可能的連接數(shù)量時,該方法就會比書中正文提到的方法高效。但這種情況是比較少的,因為在整個游戲中用戶主要是會用眼睛“找”而不是頻繁的用鼠標(biāo)去“試”。所以總的來看,維護所有最短路徑的方法的效率相對比較低。游戲結(jié)束后,在頁面出現(xiàn)對話框,詢問玩家是否進行下一局。3.2測試計劃及分析3.2.1檢驗的先后順序在檢驗兩個方塊能否消掉的時候,我們要讓兩個方塊同時滿足兩個條件才行,就是兩者配對并且連線成功。所以,這里應(yīng)該先檢驗配對,如果該條件不成立的話,就不要再進行連線檢查了,這樣可以避免很多不必要的復(fù)雜運算。當(dāng)然,如果你在做這個游戲的時候,配對規(guī)則不夠如此簡單的話,那么就看哪個算起來麻煩就把它放在后面。3.2.2程序異常處理本程序沒有涉及到程序的異常處理,只有關(guān)于“死鎖”問題,本質(zhì)上還是判別兩個格子是否可以消去的問題。最直接的方法就是,對于游戲中尚未消去的格子,兩兩都計算一下,它們是否可以消去。此外,從上面的廣度優(yōu)先搜索可以看出,我們每次都是擴展出起始格子A(x1,y1)能夠到達的格子。也就是說,對于每一個格子,我們可以調(diào)用一次上面的擴展過程,得到所有可以到達的格子,如果這些格子中有任意一個跟起始格子的圖形一致,則它們可以消去,目前游戲還不是“死鎖”狀態(tài)。 第4章 課程設(shè)計總結(jié)通過這次課程設(shè)計還使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,并且還發(fā)現(xiàn)了自己的許多不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。但通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。我完成了這次JAVA課程設(shè)計,不過這只是我學(xué)習(xí)路上的驛站。我相信我在未來的學(xué)習(xí)中會記住從本次課程設(shè)計中所學(xué)到的東西,并將它用到未來的學(xué)習(xí)中去。在這里謝謝老師的指導(dǎo),我會更加努力的學(xué)習(xí)附件A* * 類名: MainFrame* 作用: 自定義主類,對鼠標(biāo)拖拽的初始界面進行聲明* * 繼承的父類: JFrame類 * * 實現(xiàn)的接口: Strings* * import java.awt.*;import javax.swing.*;import .elva.Settings;import .elva.model.Map;public class MainFrame extends JFrameprivate static final long serialVersionUID = 1L;/炸彈的次數(shù)private int bombCount = Settings.BOMBCOUNT;private JPanel jContentPane = null;private JMenuBar menuBar = null;private JMenu fileMenu = null;private JMenuItem reloadItem = null;private JMenuItem startItem = null; /炸彈private JMenuItem bombItem = null;private JMenuItem exitItem = null;private MapUI mapUI = null;/ 游戲開始時間private long startTime;/ 結(jié)束時間private long endTime;private Timer timer = null;/ private JMenuItem tiprivate JMenuBar initMenuBar()if (menuBar = null)menuBar = new JMenuBar();fileMenu = new JMenu(菜單);startItem = new JMenuItem(開始游戲);startItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)reload(););reloadItem = new JMenuItem(重新開始);reloadItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)reload(););bombItem = new JMenuItem(炸彈);bombItem.addActionListener(new ActionListener()public void actionPerformed( ActionEvent e )if( bombCount=0 )JOptionPane.showMessageDialog(MainFrame.this,三枚炸彈已用完! );bombItem.setEnabled(false);return;mapUI.bomb();bombCount-;);exitItem = new JMenuItem(退出);exitItem.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)System.exit(0););fileMenu.add(startItem);fileMenu.add(reloadItem);fileMenu.add( bombItem );fileMenu.add(exitItem);menuBar.add(fileMenu);return menuBar;public static void main(String args)/ 自動生成方法存根SwingUtilities.invokeLater(new Runnable()public void run()MainFrame thisClass = new MainFrame();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true););public MainFrame()super();initialize();private void initialize()this.setSize(650, 650);this.setTitle(llk);this.setJMenuBar(initMenuBar();this.setTitle(悠嘻猴連連看);private void reload()mapUI = new MapUI();startTime = System.currentTimeMillis() / 1000;endTime = startTime + Settings.PERTIME;jContentPane = new JPanel();jContentPane.setLayout(new BorderLayout();jContentPane.add(mapUI);this.setContentPane(jContentPane);this.validate();Map.LEFTCOUNT = Settings.ROWS * Settings.COLUMNS;initTimer();bombItem.setEnabled(true);bombCount=Settings.BOMBCOUNT;private void initTimer()ActionListener actionListener = new ActionListener()public void actionPerformed(ActionEvent e)startTime = System.currentTimeMillis() / 1000;if (startTime = endTime)JOptionPane.showMessageDialog(MainFrame.this, 笨蛋!時間到! GAME OVER!);int result = JOptionPane.showConfirmDialog(MainFrame.this,重玩一次?, Again, JOptionPane.YES_NO_CANCEL_OPTION);if (result = JOptionPane.YES_OPTION)reload();elsejContentPane.setVisible(false);validate();timer = new javax.swing.Timer(1000, actionListener);timer.start();* * 類名: MapUI* 作用: 定義按鈕和炸彈功能* * 繼承的父類: JPanel類 * * 實現(xiàn)的接口: Stings * * import java.awt.*;import javax.swing.*;import .elva.Settings;import .elva.model.ArrayPoint;import .elva.model.Map;public class MapUI extends JPanel implements ActionListenerprivate static final long serialVersionUID = 1L;/ 棋子數(shù)組,用按鈕來表示private ChessButton chesses = null;/ 數(shù)據(jù)模型private Map map = new Map();/ 判斷當(dāng)前點擊的棋子是否是第二次選中的private boolean two = false;/ 前面點的那個棋子private ArrayPoint priviousPoint;/ 第二次選中的棋子private ArrayPoint currPoint; / 構(gòu)造函數(shù)public MapUI()super();initialize(); / 初始化函數(shù)private void initialize()initChesses();GridLayout gridLayout = new GridLayout(Settings.ROWS + 2,Settings.COLUMNS + 2);gridLayout.setHgap(2);gridLayout.setVgap(2);this.setLayout(gridLayout);this.setSize(300, 200);/ 放置按鈕,按行for (int row = 0; row Settings.ROWS + 2; row+)for (int col = 0; col Settings.COLUMNS + 2; col+)add(chessesrow * (Settings.COLUMNS + 2) + col);private void initChesses()int values = map.getMap();/ 初始化棋子,和數(shù)據(jù)模型里保持一樣 this.chesses = new ChessButton(Settings.ROWS + 2)* (Settings.COLUMNS + 2);for (int row = 0; row 10; row+)for (int col = 0; col 10; col+)/ 通過二維的數(shù)據(jù)模型坐標(biāo)得到一維的棋子坐標(biāo) int index = row * (Settings.COLUMNS + 2) + col;/ 對棋子的數(shù)據(jù)模型,即ArrayPoint對象進行設(shè)置,指定此棋子具體的位置和值chessesindex = new ChessButton(row, col, valuesrowcol);/ 添加監(jiān)聽器chessesindex.addActionListener(this);/ 將外圍的一圈設(shè)為不可見,行,列為0 和為最大值的情況if (row = 0 | row = (Settings.ROWS + 2 - 1) | col = 0| col = (Settings.COLUMNS + 2 - 1)chessesindex.setVisible(false);public void clearCheese(ArrayPoint priviousPoint, ArrayPoint currPoint) / 處理匹配,看兩點是否聯(lián)通 int values = map.getMap(); / 將模型中對應(yīng)的棋子設(shè)為0 valuespriviousPoint.getI()priviousPoint.getJ() = 0; valuescurrPoint.getI()currPoint.getJ() = 0; / 使兩個已經(jīng)消除的按鈕不可見int index1 = priviousPoint.getI() * (Settings.COLUMNS + 2)+ priviousPoint.getJ();int index2 = currPoint.getI() * (Settings.COLUMNS + 2)+ currPoint.getJ();chessesindex1.setVisible(false);chessesindex2.setVisible(false); / 如果棋子總數(shù)已為0,則程序結(jié)束if (map.LEFTCOUNT = 0)JOptionPane.showMessageDialog(this, 恭喜您通過!);/* * 事件監(jiān)聽器處理函數(shù),也是處理棋子消除的地方 */public void actionPerformed(ActionEvent e)/ 獲得當(dāng)前的柜子ChessButton button = (ChessButton) e.getSource();/ 獲得當(dāng)前棋子的數(shù)據(jù)結(jié)構(gòu)ArrayPoint p = button.getPoint();/ 如果已有兩個棋子選中, 則進行判斷操作if (two)currPoint = p;if( map.match(this.priviousPoint, this.currPoint)clearCheese(this.priviousPoint, this.currPoint);/ 設(shè)置為沒有兩個按鈕的選中的狀態(tài)two = false;else/ 將當(dāng)前點擊的棋子賦給變量priviousPointthis.priviousPoint = p;/ 標(biāo)志位設(shè)為TRUE,用于點擊下個棋子的時候使用two = true; /炸彈的功能public void bomb()int values = map.getMap();ArrayPoint p1 = null;ArrayPoint p2 = null;for (int row = 1; row Settings.ROWS + 1; row+)for (int col = 1; col Settings.COLUMNS + 1; col+)if (valuesrowcol != 0)p1 = new ArrayPoint(row, col, valuesrowcol);for (int i = 1; i Settings.ROWS + 1; i+)for (int j = 1; j Settings.COLUMNS + 1; j+)if (valuesij != 0)p2 = new ArrayPoint(i, j, valuesij);elsecontinue;if (map.match(p1, p2)clearCheese(p1, p2);return;* * 類名: ChessButton* 作用: 初始化游戲中鼠標(biāo)點擊按鈕* * 繼承的父類: JButton類 * * 實現(xiàn)的接口: 沒有 * * import .*;import javax.swing.*;import .elva.Settings;import .elva.model.ArrayPoint;public class ChessButton extends JButtonprotected ArrayPoint point = null;public ChessButton(int row, int col, int value)this(new ArrayPoint(row, col, value);public ChessButton(ArrayPoint point)this.point = point;String name =Resource/+point.getValue() + Settings.RELEX;URL url = ChessButton.class.getResource(name);ImageIcon icon = new ImageIcon( url );this.setIcon(icon);/構(gòu)造函數(shù),使用默認(rèn)值public ChessButton()this(new ArrayPoint(0, 0, 0);/返回當(dāng)前按鈕代表的位置和值public ArrayPoint getPoint()return point;public void setPoint(ArrayPoint point)this.point = point;* * 接口名:Settings* 作用: 聲明各個變量大小* * package .elva;public interface Settings /行數(shù) public static final int ROWS = 8; /列數(shù)public static final int COLUMNS=8;/圖片后綴名public static final String RELEX=.gif;/每局所花時間(秒)public static final int PERTIME = 600;/判斷的時間間隔public static final int PER = 1;/炸彈的使用次數(shù)public static final int BOMBCOUNT = 3;* * 類名: Map* 作用: 連入圖片并聲明游戲規(guī)則* * package .elva.model;import java.util.Random;import .elva.Settings;public class Map public static int LEFTCOUNT = Settings.ROWS * Settings.COLUMNS;/ 讓其最外層的數(shù)據(jù)不顯示,可以解決邊框消除不掉的情況private int map = new intSettings.ROWS + 2Settings.COLUMNS + 2;/ 出現(xiàn)的不同圖片個數(shù)private int maxKinds = 4;public Map()init();public int getMap()return map;private void init()int tempArr = new intSettings.ROWS * Settings.COLUMNS;int len = tempArr.length;/ 根據(jù)圖片的種類數(shù)來確定數(shù)組大小,如有64張圖片,每四個為一樣的,則需要圖片數(shù)為64/4=16for (int i = 0; i len / maxKinds; i+)tempArri * 4 = i + 1;tempArri * 4 + 1 = i + 1;tempArri * 4 + 2 = i + 1;tempArri * 4 + 3 = i + 1;/ 打亂一維數(shù)組內(nèi)數(shù)據(jù)的排列random(tempArr);/ 填充到二維數(shù)組中for (int i = 1; i Settings.ROWS + 1; i+)for (int j = 1; j 0; i-)int j = random.nextInt(i);int temp = arrayi - 1;arrayi - 1 = arrayj;arrayj = temp;/* * 判斷是否在一條直線上,這里不去比較兩者值是否相等,主要用于后面兩個拐點的情況 * p1之前的點 * p2當(dāng)前所點的點 * true 相通,false 不通 */public boolean oneLineWithoutValue(ArrayPoint p1, ArrayPoint p2)if (horizonMatch(p1, p2)return true;else if (verticalMatch(p1, p2)return true;return false;/* * 判斷是否在一條直線上,其中包括了垂直和水平兩種情況 * p1之前的點 * p2當(dāng)前所點的點 * true 相通,false 不通

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論