【課程設(shè)計(jì)報(bào)告】Java實(shí)現(xiàn)游戲連連看(有源代碼)
《【課程設(shè)計(jì)報(bào)告】Java實(shí)現(xiàn)游戲連連看(有源代碼)》由會(huì)員分享,可在線閱讀,更多相關(guān)《【課程設(shè)計(jì)報(bào)告】Java實(shí)現(xiàn)游戲連連看(有源代碼)(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、課程設(shè)計(jì)說(shuō)明書(shū) NO.26 更多計(jì)算機(jī)類(lèi)課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)、論文請(qǐng)?jiān)L問(wèn): JAVA語(yǔ)言實(shí)現(xiàn)連連看游戲 1.課程設(shè)計(jì)目的 Java語(yǔ)言是當(dāng)今流行的網(wǎng)絡(luò)編程語(yǔ)言,它具有面向?qū)ο?、跨平臺(tái)、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今世界最流行的開(kāi)發(fā)方法,它不僅具有更貼近自然的語(yǔ)義,而且有利于軟件的維護(hù)和繼承。 學(xué)會(huì)Java程序開(kāi)發(fā)的環(huán)境搭建與配置,并在實(shí)際運(yùn)用中學(xué)習(xí)和掌握J(rèn)ava程序開(kāi)發(fā)的全過(guò)程。進(jìn)一步熟悉掌握J(rèn)ava程序設(shè)計(jì)語(yǔ)言的基礎(chǔ)內(nèi)容,如用戶圖形界面設(shè)計(jì)、Java多線程編程、Applet程序的設(shè)計(jì)、文件和網(wǎng)絡(luò)輸入輸出流編程、Java數(shù)據(jù)庫(kù)編程等。通過(guò)親
2、自動(dòng)手寫(xiě)程序,一方面拓展知識(shí)面,一方面鍛煉調(diào)試能力 2.設(shè)計(jì)方案論證 2.1設(shè)計(jì)思路 2.1.1用戶可以通過(guò)點(diǎn)擊菜單中的“開(kāi)始游戲”選項(xiàng),開(kāi)始新游戲程序。程序會(huì)載入圖片,并通過(guò)特定的算法排列圖片,并標(biāo)記圖片,以便判斷圖片是否相同。記錄圖片坐標(biāo),以方便計(jì)算圖片是否可以相連。確定圖片大小,以確定用戶點(diǎn)擊的是那張圖片。 2.1.2用戶選擇兩張一樣的圖片,通過(guò)鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒(méi)有點(diǎn)(鼠標(biāo)記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會(huì)消除這兩張圖片,并使鼠標(biāo)記數(shù)為0,并消除這兩張圖片的標(biāo)記,使里面的圖片被標(biāo)記在外面。以便用
3、戶可以進(jìn)行以后的選擇。 2.1.3用戶也可使通過(guò)使用“炸彈”功能進(jìn)行消除圖片。方法是點(diǎn)擊菜單中的“炸彈”選項(xiàng)使用,點(diǎn)擊后如果界面上有兩張可以相連的相同圖片就隨機(jī)消除兩張可以相連的相同的圖片。 2.1.4 炸彈數(shù)目是有限的,默認(rèn)數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會(huì)自動(dòng)減一,當(dāng)炸彈數(shù)目為零時(shí)(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時(shí),系統(tǒng)會(huì)彈出對(duì)話框提示用戶,并把菜單中“炸彈”選項(xiàng)變?yōu)榛疑ㄓ脩舨豢墒褂茫? 2.1.5當(dāng)系統(tǒng)開(kāi)始游戲后,系統(tǒng)會(huì)在后臺(tái)記錄時(shí)間,如果在用戶還沒(méi)有消除所有圖片時(shí),系統(tǒng)時(shí)間到了,那么系統(tǒng)會(huì)彈出對(duì)話框,提示用戶,時(shí)間到了,游戲失敗。 2.1.6 當(dāng)用
4、戶點(diǎn)擊確定后,系統(tǒng)還會(huì)彈出對(duì)話框詢問(wèn)用戶是否重新開(kāi)始,用戶選擇“是”時(shí),系統(tǒng)會(huì)開(kāi)始新游戲;當(dāng)用戶選擇“否”時(shí),系統(tǒng)會(huì)返回開(kāi)始界面;當(dāng)用戶選擇“取消”時(shí),系統(tǒng)會(huì)返回提示時(shí)間到的界面。 2.1.6 如果在時(shí)間未到時(shí),用戶使所有的圖片都消失(兩兩消除,直到最后一對(duì)),系統(tǒng)會(huì)提示用戶游戲以通過(guò),點(diǎn)“確定”后回到開(kāi)始界面。 2.2設(shè)計(jì)方法 在設(shè)計(jì)連連看小游戲是,需要編寫(xiě)6個(gè)Java源文件:MainFrame.java,ChessButton.java,MapUI.java,Settings.java,ArrayPoint.java,Map.java。 2.2.1 MainFrame.java
5、 主窗口部分定義了程序用函數(shù),實(shí)現(xiàn)了程序菜單(initMenuBar)的使用。 2.2.2 ChessButton.java 按鍵部分定義按鍵的位置,代表的值。 2.2.3 MapUI.java 游戲部分判斷點(diǎn)擊的圖片,判斷兩圖片是否可連,是否相同。判斷是否勝利。實(shí)現(xiàn)炸彈功能。 2.2.4 Settings.java 數(shù)組確定了游戲各種參數(shù)屬性。 2.2.5 ArrayPoint.java 取值部分定義圖片的值。 2.2.6 Map.java 算法部分通過(guò)算法確定兩張圖片是否連通。 2.3功能模塊 此設(shè)計(jì)共有以下幾個(gè)功能模塊。
6、 2.3.1 開(kāi)始游戲 程序會(huì)載入圖片,并通過(guò)特定的算法排列圖片,并標(biāo)記圖片,以便判斷圖片是否相同。記錄圖片坐標(biāo),以方便計(jì)算圖片是否可以相連。確定圖片大小,以確定用戶點(diǎn)擊的是那張圖片。 2.3.2 使用“炸彈” 用戶點(diǎn)擊菜單中的“炸彈”選項(xiàng)使用,點(diǎn)擊后如果界面上有兩張可以相連的相同圖片就隨機(jī)消除兩張可以相連的相同的圖片。 2.3.3 限制炸彈“數(shù)目” 炸彈 默認(rèn)數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會(huì)自動(dòng)減一,當(dāng)炸彈數(shù)目為零時(shí)(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時(shí),系統(tǒng)會(huì)彈出對(duì)話框提示用戶,并把菜單中“炸彈”選項(xiàng)變?yōu)榛疑ㄓ脩舨豢墒褂茫? 2.3.4 對(duì)
7、用戶游戲時(shí)的判斷 用戶選擇兩張一樣的圖片,通過(guò)鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒(méi)有點(diǎn)(鼠標(biāo)記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會(huì)消除這兩張圖片,并使鼠標(biāo)記數(shù)為0,并消除這兩張圖片的標(biāo)記,使里面的圖片被標(biāo)記在外面。以便用戶可以進(jìn)行以后的選擇。 2.4流程圖如下 圖2 主函數(shù)流程圖 開(kāi)始程序 開(kāi)始游戲 接收用戶點(diǎn)擊 是否使用炸彈
8、 Y N 是否二次點(diǎn)擊 N 消除點(diǎn)擊計(jì)數(shù) 兩張圖片 是否相同 Y N 消除兩張一樣的 可以相連的圖片 Y 兩張圖片是否可以相連
9、 N 消除用戶點(diǎn)擊 的兩張圖片 Y 消除點(diǎn)擊計(jì)數(shù) 是否還有圖 片未消除 Y 結(jié)束 N 圖3 游戲進(jìn)行流程圖 圖4 使用炸彈流程圖 圖5 計(jì)算時(shí)
10、間流程圖 2.5類(lèi)、方法、屬性說(shuō)明 成員變量 成員變量描述 變量類(lèi)型 名稱 行數(shù) int ROWS 列數(shù) int COLUMNS 圖片后綴名 string RELEX 每局所花時(shí)間(秒) int PERTIME 判斷的時(shí)間間隔 int PER 炸彈的使用次數(shù) int BOMBCOUNT 方法 方法名 功能 備注 MenuBar() 實(shí)用程序菜單 無(wú)備注 Bomb() 設(shè)置炸彈 無(wú)備注 Point() 定義按鍵的位置 無(wú)備注 Chesses() 初步定義游戲界面,功能 無(wú)備注
11、Timer() 時(shí)間限制 無(wú)備注 3.設(shè)計(jì)結(jié)果與分析 用戶可以通過(guò)點(diǎn)擊菜單中的“開(kāi)始游戲”選項(xiàng),開(kāi)始新游戲程序。程序會(huì)載入圖片,并通過(guò)特定的算法排列圖片,并標(biāo)記圖片,以便判斷圖片是否相同。記錄圖片坐標(biāo),以方便計(jì)算圖片是否可以相連。確定圖片大小,以確定用戶點(diǎn)擊的是那張圖片。 圖6 開(kāi)始游戲后畫(huà)面 用戶選擇兩張一樣的圖片,通過(guò)鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒(méi)有點(diǎn)(鼠標(biāo)記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片(如第八行第二列和第八行第三列),那么系統(tǒng)會(huì)消除這兩張圖片,并使鼠標(biāo)記數(shù)為0,并消除這兩張圖片
12、的標(biāo)記,使里面的圖片被標(biāo)記在外面。以便用戶可以進(jìn)行以后的選擇。 圖7 消除三對(duì)后畫(huà)面 用戶也可使通過(guò)使用“炸彈”功能進(jìn)行消除圖片。方法是點(diǎn)擊菜單中的“炸彈”選項(xiàng)使用,點(diǎn)擊后如果界面上有兩張可以相連的相同圖片就隨機(jī)消除兩張可以相連的相同的圖片(如第一行第一列河第一行第四列)。 圖8 使用炸彈后畫(huà)面 炸彈數(shù)目是有限的,默認(rèn)數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會(huì)自動(dòng)減一,當(dāng)炸彈數(shù)目為零時(shí)(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時(shí),系統(tǒng)會(huì)彈出對(duì)話框提示用戶,并把菜單中“炸彈”選項(xiàng)變?yōu)榛疑ㄓ脩舨豢墒褂?/p>
13、)。 圖9 炸彈使用光后畫(huà)面 當(dāng)系統(tǒng)開(kāi)始游戲后,系統(tǒng)會(huì)在后臺(tái)記錄時(shí)間,如果在用戶還沒(méi)有消除所有圖片時(shí),系統(tǒng)時(shí)間到了,那么系統(tǒng)會(huì)彈出對(duì)話框,提示用戶,時(shí)間到了,游戲失敗。 圖10 時(shí)間到時(shí)的畫(huà)面 當(dāng)用戶點(diǎn)擊確定后,系統(tǒng)還會(huì)彈出對(duì)話框詢問(wèn)用戶是否重新開(kāi)始,用戶選擇“是”時(shí),系統(tǒng)會(huì)開(kāi)始新游戲;當(dāng)用戶選擇“否”時(shí),系統(tǒng)會(huì)返回開(kāi)始界面;當(dāng)用戶選擇“取消”時(shí),系統(tǒng)會(huì)返回提示時(shí)間到的界面。 圖11 點(diǎn)擊確定時(shí)的畫(huà)面 如果在時(shí)間未到時(shí),用戶使所有的圖片都消失(兩兩消除,直到最后一對(duì)),系統(tǒng)會(huì)
14、提示用戶游戲以通過(guò),點(diǎn)“確定”后回到開(kāi)始界面。 圖12 通關(guān)畫(huà)面 4.設(shè)計(jì)體會(huì) 通過(guò)這次課程設(shè)計(jì)我學(xué)到了不少東西,也發(fā)現(xiàn)了大量的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固。因而,通過(guò)課程設(shè)計(jì)之后,把以前所學(xué)過(guò)的知識(shí)重新溫故。有些在設(shè)計(jì)過(guò)程中已解決,有些還有待今后慢慢學(xué)習(xí),只要認(rèn)真學(xué)就會(huì)有更多的收獲。總之這次課程設(shè)計(jì)使我更多的掌握了所學(xué)的知識(shí),并運(yùn)用到實(shí)踐上,了解了java的重要性,對(duì)以后的學(xué)習(xí)起了重要作用。 在設(shè)計(jì)的過(guò)程中我遇到了很到問(wèn)題,不過(guò)在老師和同學(xué)們的幫助和自己的思考下還是很好的完成了。這此課程設(shè)計(jì)還
15、讓我懂得了寫(xiě)程序不能閉門(mén)造車(chē),要努力拓寬知識(shí)面,開(kāi)闊視野,拓展思維。 5.參考文獻(xiàn) [1] 印旻. Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)[M],北京: 清華大學(xué)出版社,2005.4: 58-72 [2] 朱站立、沈偉. Java程序設(shè)計(jì)實(shí)用教程[M], 北京: 電子工業(yè)出版社, 2007.5: 82-95 [3] 朱福喜、尹為民、余振坤等. Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)[M], 第2版. 武漢: 武漢大學(xué)出版社,2006.1:123-130 [4] 艾力江. Java 2 范例入門(mén)與提高[M],北京:清華大學(xué)出版社 6. 附錄 MainFrame.java: impo
16、rt java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Sw
17、ingUtilities; import javax.swing.Timer; import cn.elva.Settings; import cn.elva.model.Map; public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; private int bombCount = Settings.BOMBCOUNT; private JPanel jContentPane = null; private JMenuBar menuBar =
18、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; private long endTime; private Timer timer = null;
19、 private JMenuBar initMenuBar() { if (menuBar == null) { menuBar = new JMenuBar(); fileMenu = new JMenu("文件"); startItem = new JMenuItem("開(kāi)始游戲"); startItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { reload();
20、 } }); reloadItem = new JMenuItem("重來(lái)一次"); reloadItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { reload(); } }); exitItem = new JMenuItem("退出"); exitItem.addActionListener(new ActionListener() { pu
21、blic void actionPerformed(ActionEvent e) { System.exit(0); } }); fileMenu.add(startItem); fileMenu.add(reloadItem); fileMenu.add( bombItem ); fileMenu.add(exitItem); menuBar.add(fileMenu); } r
22、eturn 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); } }); }
23、 public MainFrame() { super(); initialize(); } private void initialize() { this.setSize(900, 900); this.setTitle("llk"); this.setJMenuBar(initMenuBar()); // this.setContentPane(getJContentPane()); this.setTitle("連連看"); } private void reload() { mapUI = new MapUI
24、(); 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 * Set
25、tings.COLUMNS; initTimer(); bombItem.setEnabled(true); bombCount=Settings.BOMBCOUNT; } private void initTimer() { ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent e) {
26、 startTime = System.currentTimeMillis() / 1000; if (startTime == endTime) { JOptionPane.showMessageDialog(MainFrame.this, "時(shí)間到了!!"); int result = JOptionPane.showConfirmDialog(MainFrame.this, "重玩一次?", "Again", JOptionPane.YES_NO_CANCEL_OPTION); if (result == JOptionPane.YES
27、_OPTION) { reload(); } else { jContentPane.setVisible(false); validate(); } } } }; timer = new javax.swing.Timer(1000, actionListener); timer.start(); } } ChessButton.java public class ChessButton extends JButton { protecte
28、d 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
29、.RELEX; URL url = ChessButton.class.getResource(name); ImageIcon icon = new ImageIcon( url ); this.setIcon(icon); } public ChessButton() { this(new ArrayPoint(0, 0, 0)); } public ArrayPoint getPoint() { return point; } public void setPoint(ArrayPoint point) { this
30、.point = point; } } MapUI.java import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JOptionPane; import javax.swing.JPanel; import cn.elva.Settings; import cn.elva.model.ArrayPoint; import cn.elva.model.Map; public clas
31、s MapUI extends JPanel implements ActionListener { private static final long serialVersionUID = 1L; private ChessButton[] chesses = null; private Map map = new Map(); private boolean two = false; private ArrayPoint priviousPoint; private ArrayPoint currPoint; public MapUI() { sup
32、er(); initialize(); } private void initialize() { initChesses(); GridLayout gridLayout = new GridLayout(Settings.ROWS + 2,Settings.COLUMNS + 2); gridLayout.setHgap(2); gridLayout.setVgap(2); this.setLayout(gridLayout);
33、 this.setSize(300, 200); for (int row = 0; row < Settings.ROWS + 2; row++) { for (int col = 0; col < Settings.COLUMNS + 2; col++) { add(chesses[row * (Settings.COLUMNS + 2) + col]); } } } private void initChesses() { int[][] values = map.getMap(); this.chesse
34、s = new ChessButton[(Settings.ROWS + 2)* (Settings.COLUMNS + 2)]; for (int row = 0; row < 10; row++) { for (int col = 0; col < 10; col++) { int index = row * (Settings.COLUMNS + 2) + col; chesses[index] = new ChessButton(row, col, values[row][col]); chesses[index].addAct
35、ionListener(this); if (row == 0 || row == (Settings.ROWS + 2 - 1) || col == 0 || col == (Settings.COLUMNS + 2 - 1)) { chesses[index].setVisible(false); } } } } public void clearCheese(ArrayPoint priviousPoint, ArrayPoint currPoint) { int[][] values = map.
36、getMap(); values[priviousPoint.getI()][priviousPoint.getJ()] = 0; values[currPoint.getI()][currPoint.getJ()] = 0; int index1 = priviousPoint.getI() * (Settings.COLUMNS + 2)+ priviousPoint.getJ(); int index2 = currPoint.getI() * (Settings.COLUMNS + 2)+ currPoint.getJ(); chesses[index1].
37、setVisible(false); chesses[index2].setVisible(false); if (map.LEFTCOUNT == 0) { JOptionPane.showMessageDialog(this, "恭喜您通過(guò)!!"); } } public void actionPerformed(ActionEvent e) { ChessButton button = (ChessButton) e.getSource(); ArrayPoint p = button.getPoint(); if
38、(two) { currPoint = p; if( map.match(this.priviousPoint, this.currPoint)) { clearCheese(this.priviousPoint, this.currPoint); } two = false; } else { this.priviousPoint = p; two = true; } } public void bomb() { int[][] values = map.getMap();
39、 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 (values[row][col] != 0){ p1 = new ArrayPoint(row, col, values[row][col]);
40、 for (int i = 1; i < Settings.ROWS + 1; i++) { for (int j = 1; j < Settings.COLUMNS + 1; j++) { if (values[i][j] != 0) { p2 = new ArrayPoint(i, j, values[i][j]); } else { continue; } //System.out.println(p1 + "|" + p2);
41、 if (map.match(p1, p2)) { clearCheese(p1, p2); return; } } } } } } } } Settings.java package cn.elva; public interface Settings { public static final int ROWS = 8; public sta
42、tic final int COLUMNS=8; public static final String RELEX=".gif"; public static final int PERTIME = 600; public static final int PER = 1; public static final int BOMBCOUNT = 3; } ArrayPoint.java package cn.elva.model; public class ArrayPoint
43、 { protected int i; protected int j; protected int value; public ArrayPoint( int i,int j,int value ) { this.i =i; this.j =j; this.value = value; } public String toString( ) { return i+","+j+","+value; } public int getI() { return i; } public
44、 void setI(int i) { this.i = i; } public int getJ() { return j; } public void setJ(int j) { this.j = j; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } Map.java package cn.elva.model;
45、 import java.util.Random; import cn.elva.Settings; public class Map { public static int LEFTCOUNT = Settings.ROWS * Settings.COLUMNS; private int[][] map = new int[Settings.ROWS + 2][Settings.COLUMNS + 2]; private int maxKinds = 4; public Map()
46、 { init(); } public int[][] getMap() { return map; } private void init() { int[] tempArr = new int[Settings.ROWS * Settings.COLUMNS]; int len = tempArr.length; for (int i = 0; i < len / maxKinds; i++) { tempArr[i * 4] = i + 1; tempArr[i * 4 + 1] = i + 1; t
47、empArr[i * 4 + 2] = i + 1; tempArr[i * 4 + 3] = i + 1; } random(tempArr); for (int i = 1; i < Settings.ROWS + 1; i++) { for (int j = 1; j < Settings.COLUMNS + 1; j++) { this.map[i][j] = tempArr[(i - 1) * Settings.COLUMNS+ (j - 1)]; } } } private void random(in
48、t[] array) { Random random = new Random(); int len = array.length; for (int i = len; i > 0; i--) { int j = random.nextInt(i); int temp = array[i - 1]; array[i - 1] = array[j]; array[j] = temp; } } public boo
49、lean oneLineWithoutValue(ArrayPoint p1, ArrayPoint p2) { if (horizonMatch(p1, p2)) { return true; } else if (verticalMatch(p1, p2)) { return true; } return false; } public boolean oneLine(ArrayPoint p1, ArrayPoint p2) { if (p1.value != p2.value) { retur
50、n false; } if (oneLineWithoutValue(p1, p2)) { return true; } return false; } public boolean verticalMatch(ArrayPoint p1, ArrayPoint p2) { if (p1.j != p2.j) { return false; } if (p1.i > p2.i) { ArrayPoint temp = null; temp = p1; p1 = p2;
51、 p2 = temp; } int spaceCount = p2.i - p1.i; if (spaceCount == 1 && p1.value == p2.value) { return true; } for (int i = p1.i + 1; i < p2.i; i++) { ArrayPoint point = new ArrayPoint(i, p1.j, map[i][p1.j]); if (
52、point.value != 0) { return false; } } return true; } public boolean horizonMatch(ArrayPoint p1, ArrayPoint p2) { if (p1.i != p2.i) { return false; } if (p1.j > p2.j) { ArrayPoint temp = null; temp = p1; p1 = p2; p2 = temp; } int space
53、Count = p2.j - p1.j; if (spaceCount == 1 && p1.value == p2.value) { return true; } for (int i = p1.j + 1; i < p2.j; i++) { ArrayPoint p = new ArrayPoint(p1.i, i, map[p1.i][i]); if (p.value != 0) { return false;
54、 } } return true; } private boolean isSameOne(ArrayPoint p1, ArrayPoint p2) { if (p1.i == p2.i && p1.j == p2.j) { return true; } else { return false; } } public boolean oneConnerWithoutValue(ArrayPoint p1, ArrayPoint p2) { ArrayPoint p1H = new ArrayPo
55、int(p1.i, p2.j, map[p1.i][p2.j]); ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]); if (horizonMatch(p1, p1H) && (p1H.value == 0)) { if (this.verticalMatch(p1H, p2)) { return true; } } if (verticalMatch(p1, p1V) && (p1V.value == 0)) { if (horizonMat
56、ch(p1V, p2)) { return true; } } return false; } public boolean oneConner(ArrayPoint p1, ArrayPoint p2) { ArrayPoint p1H = new ArrayPoint(p1.i, p2.j, map[p1.i][p2.j]); ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]); if (p1.value != p2.value)
57、 { return false; } if (oneConnerWithoutValue(p1, p2)) { return true; } return false; } public boolean twoConner(ArrayPoint p1, ArrayPoint p2) { if (p1.value != p2.value) { return false; } int count = 0; Arra
58、yPoint temp = null; for (int col = p1.j - 1; col >= 0; col--) { temp = new ArrayPoint(p1.i, col, map[p1.i][col]); if ((temp.value == 0) && this.oneLineWithoutValue(p1, temp)) { if (this.oneConnerWithoutValue(temp, p2)) { return true; } } else {
59、 break; } } count = Settings.COLUMNS + 2 - p1.j; for (int col = p1.j; col < Settings.COLUMNS + 2; col++) { temp = new ArrayPoint(p1.i, col, map[p1.i][col]); if ((temp.value == 0) && oneLineWithoutValue(p1, temp)) { if (oneConnerWithoutValue(temp, p2)) { re
60、turn true; } } } count = p1.i; for (int row = count - 1; row >= 0; row--) { temp = new ArrayPoint(row, p1.j, map[row][p1.j]); if ((temp.value == 0) && oneLineWithoutValue(p1, temp)) { if (oneConnerWithoutValue(temp, p2)) { return true; } }
61、 } for (int row = p1.i + 1; row < Settings.ROWS + 2; row++) { temp = new ArrayPoint(row, p1.j, map[row][p1.j]); if ((temp.value == 0) && oneLineWithoutValue(p1, temp)) { if (oneConnerWithoutValue(temp, p2)) { return true; } } } return false; } pub
62、lic boolean match(ArrayPoint p1, ArrayPoint p2) { if (this.isSameOne(p1, p2)) return false; if (oneLine(p1, p2)) { map[p1.i][p1.j] = 0; map[p2.i][p2.j] = 0; LEFTCOUNT -= 2; return true; } if (oneConner(p1, p2)){ map[p1.i][p1.j] = 0; map[p2.i][p2.j] = 0; L
63、EFTCOUNT -= 2; } if (twoConner(p1, p2)){ map[p1.i][p1.j] = 0; map[p2.i][p2.j] = 0; LEFTCOUNT -= 2; return true; } return false; } ut2ApOdfXXc02GyBKsKCWw97MrqqWhoj5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUXyBmtIVR
64、97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1BN6oRic
65、5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyrF7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFNqnR2HjQ
66、KV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ ut2ApOdfXXc02GyBKsKCWw97MrqqWhoj5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUXyBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5nd
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險(xiǎn)源安全管理制度
- 安全培訓(xùn)資料:典型建筑火災(zāi)的防治基本原則與救援技術(shù)
- 企業(yè)雙重預(yù)防體系應(yīng)知應(yīng)會(huì)知識(shí)問(wèn)答
- 8 各種煤礦安全考試試題
- 9 危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)管理人員模擬考試題庫(kù)試卷附答案
- 加壓過(guò)濾機(jī)司機(jī)技術(shù)操作規(guī)程
- 樹(shù)脂砂混砂工藝知識(shí)總結(jié)
- XXXXX現(xiàn)場(chǎng)安全應(yīng)急處置預(yù)案
- 某公司消防安全檢查制度總結(jié)
- 1 煤礦安全檢查工(中級(jí))職業(yè)技能理論知識(shí)考核試題含答案
- 4.燃?xì)獍踩a(chǎn)企業(yè)主要負(fù)責(zé)人模擬考試題庫(kù)試卷含答案
- 工段(班組)級(jí)安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫(kù)試卷含答案-4
- 建筑起重司索信號(hào)工安全操作要點(diǎn)
- 實(shí)驗(yàn)室計(jì)量常見(jiàn)的30個(gè)問(wèn)問(wèn)答題含解析