【課程設(shè)計(jì)報(bào)告】Java實(shí)現(xiàn)游戲連連看(有源代碼)
《【課程設(shè)計(jì)報(bào)告】Java實(shí)現(xiàn)游戲連連看(有源代碼)》由會員分享,可在線閱讀,更多相關(guān)《【課程設(shè)計(jì)報(bào)告】Java實(shí)現(xiàn)游戲連連看(有源代碼)(26頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、課程設(shè)計(jì)說明書 NO.26 更多計(jì)算機(jī)類課程設(shè)計(jì)、畢業(yè)設(shè)計(jì)、論文請?jiān)L問: JAVA語言實(shí)現(xiàn)連連看游戲 1.課程設(shè)計(jì)目的 Java語言是當(dāng)今流行的網(wǎng)絡(luò)編程語言,它具有面向?qū)ο蟆⒖缙脚_、分布應(yīng)用等特點(diǎn)。面向?qū)ο蟮拈_發(fā)方法是當(dāng)今世界最流行的開發(fā)方法,它不僅具有更貼近自然的語義,而且有利于軟件的維護(hù)和繼承。 學(xué)會Java程序開發(fā)的環(huán)境搭建與配置,并在實(shí)際運(yùn)用中學(xué)習(xí)和掌握J(rèn)ava程序開發(fā)的全過程。進(jìn)一步熟悉掌握J(rèn)ava程序設(shè)計(jì)語言的基礎(chǔ)內(nèi)容,如用戶圖形界面設(shè)計(jì)、Java多線程編程、Applet程序的設(shè)計(jì)、文件和網(wǎng)絡(luò)輸入輸出流編程、Java數(shù)據(jù)庫編程等。通過親
2、自動手寫程序,一方面拓展知識面,一方面鍛煉調(diào)試能力 2.設(shè)計(jì)方案論證 2.1設(shè)計(jì)思路 2.1.1用戶可以通過點(diǎn)擊菜單中的“開始游戲”選項(xiàng),開始新游戲程序。程序會載入圖片,并通過特定的算法排列圖片,并標(biāo)記圖片,以便判斷圖片是否相同。記錄圖片坐標(biāo),以方便計(jì)算圖片是否可以相連。確定圖片大小,以確定用戶點(diǎn)擊的是那張圖片。 2.1.2用戶選擇兩張一樣的圖片,通過鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒有點(diǎn)(鼠標(biāo)記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會消除這兩張圖片,并使鼠標(biāo)記數(shù)為0,并消除這兩張圖片的標(biāo)記,使里面的圖片被標(biāo)記在外面。以便用
3、戶可以進(jìn)行以后的選擇。 2.1.3用戶也可使通過使用“炸彈”功能進(jìn)行消除圖片。方法是點(diǎn)擊菜單中的“炸彈”選項(xiàng)使用,點(diǎn)擊后如果界面上有兩張可以相連的相同圖片就隨機(jī)消除兩張可以相連的相同的圖片。 2.1.4 炸彈數(shù)目是有限的,默認(rèn)數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會自動減一,當(dāng)炸彈數(shù)目為零時(shí)(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時(shí),系統(tǒng)會彈出對話框提示用戶,并把菜單中“炸彈”選項(xiàng)變?yōu)榛疑ㄓ脩舨豢墒褂茫? 2.1.5當(dāng)系統(tǒng)開始游戲后,系統(tǒng)會在后臺記錄時(shí)間,如果在用戶還沒有消除所有圖片時(shí),系統(tǒng)時(shí)間到了,那么系統(tǒng)會彈出對話框,提示用戶,時(shí)間到了,游戲失敗。 2.1.6 當(dāng)用
4、戶點(diǎn)擊確定后,系統(tǒng)還會彈出對話框詢問用戶是否重新開始,用戶選擇“是”時(shí),系統(tǒng)會開始新游戲;當(dāng)用戶選擇“否”時(shí),系統(tǒng)會返回開始界面;當(dāng)用戶選擇“取消”時(shí),系統(tǒng)會返回提示時(shí)間到的界面。 2.1.6 如果在時(shí)間未到時(shí),用戶使所有的圖片都消失(兩兩消除,直到最后一對),系統(tǒng)會提示用戶游戲以通過,點(diǎn)“確定”后回到開始界面。 2.2設(shè)計(jì)方法 在設(shè)計(jì)連連看小游戲是,需要編寫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 算法部分通過算法確定兩張圖片是否連通。 2.3功能模塊 此設(shè)計(jì)共有以下幾個(gè)功能模塊。
6、 2.3.1 開始游戲 程序會載入圖片,并通過特定的算法排列圖片,并標(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ù)目就會自動減一,當(dāng)炸彈數(shù)目為零時(shí)(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時(shí),系統(tǒng)會彈出對話框提示用戶,并把菜單中“炸彈”選項(xiàng)變?yōu)榛疑ㄓ脩舨豢墒褂茫? 2.3.4 對
7、用戶游戲時(shí)的判斷 用戶選擇兩張一樣的圖片,通過鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒有點(diǎn)(鼠標(biāo)記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會消除這兩張圖片,并使鼠標(biāo)記數(shù)為0,并消除這兩張圖片的標(biāo)記,使里面的圖片被標(biāo)記在外面。以便用戶可以進(jìn)行以后的選擇。 2.4流程圖如下 圖2 主函數(shù)流程圖 開始程序 開始游戲 接收用戶點(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類、方法、屬性說明 成員變量 成員變量描述 變量類型 名稱 行數(shù) int ROWS 列數(shù) int COLUMNS 圖片后綴名 string RELEX 每局所花時(shí)間(秒) int PERTIME 判斷的時(shí)間間隔 int PER 炸彈的使用次數(shù) int BOMBCOUNT 方法 方法名 功能 備注 MenuBar() 實(shí)用程序菜單 無備注 Bomb() 設(shè)置炸彈 無備注 Point() 定義按鍵的位置 無備注 Chesses() 初步定義游戲界面,功能 無備注
11、Timer() 時(shí)間限制 無備注 3.設(shè)計(jì)結(jié)果與分析 用戶可以通過點(diǎn)擊菜單中的“開始游戲”選項(xiàng),開始新游戲程序。程序會載入圖片,并通過特定的算法排列圖片,并標(biāo)記圖片,以便判斷圖片是否相同。記錄圖片坐標(biāo),以方便計(jì)算圖片是否可以相連。確定圖片大小,以確定用戶點(diǎn)擊的是那張圖片。 圖6 開始游戲后畫面 用戶選擇兩張一樣的圖片,通過鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒有點(diǎn)(鼠標(biāo)記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片(如第八行第二列和第八行第三列),那么系統(tǒng)會消除這兩張圖片,并使鼠標(biāo)記數(shù)為0,并消除這兩張圖片
12、的標(biāo)記,使里面的圖片被標(biāo)記在外面。以便用戶可以進(jìn)行以后的選擇。 圖7 消除三對后畫面 用戶也可使通過使用“炸彈”功能進(jìn)行消除圖片。方法是點(diǎn)擊菜單中的“炸彈”選項(xiàng)使用,點(diǎn)擊后如果界面上有兩張可以相連的相同圖片就隨機(jī)消除兩張可以相連的相同的圖片(如第一行第一列河第一行第四列)。 圖8 使用炸彈后畫面 炸彈數(shù)目是有限的,默認(rèn)數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會自動減一,當(dāng)炸彈數(shù)目為零時(shí)(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時(shí),系統(tǒng)會彈出對話框提示用戶,并把菜單中“炸彈”選項(xiàng)變?yōu)榛疑ㄓ脩舨豢墒褂?/p>
13、)。 圖9 炸彈使用光后畫面 當(dāng)系統(tǒng)開始游戲后,系統(tǒng)會在后臺記錄時(shí)間,如果在用戶還沒有消除所有圖片時(shí),系統(tǒng)時(shí)間到了,那么系統(tǒng)會彈出對話框,提示用戶,時(shí)間到了,游戲失敗。 圖10 時(shí)間到時(shí)的畫面 當(dāng)用戶點(diǎn)擊確定后,系統(tǒng)還會彈出對話框詢問用戶是否重新開始,用戶選擇“是”時(shí),系統(tǒng)會開始新游戲;當(dāng)用戶選擇“否”時(shí),系統(tǒng)會返回開始界面;當(dāng)用戶選擇“取消”時(shí),系統(tǒng)會返回提示時(shí)間到的界面。 圖11 點(diǎn)擊確定時(shí)的畫面 如果在時(shí)間未到時(shí),用戶使所有的圖片都消失(兩兩消除,直到最后一對),系統(tǒng)會
14、提示用戶游戲以通過,點(diǎn)“確定”后回到開始界面。 圖12 通關(guān)畫面 4.設(shè)計(jì)體會 通過這次課程設(shè)計(jì)我學(xué)到了不少東西,也發(fā)現(xiàn)了大量的問題,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固。因而,通過課程設(shè)計(jì)之后,把以前所學(xué)過的知識重新溫故。有些在設(shè)計(jì)過程中已解決,有些還有待今后慢慢學(xué)習(xí),只要認(rèn)真學(xué)就會有更多的收獲??傊@次課程設(shè)計(jì)使我更多的掌握了所學(xué)的知識,并運(yùn)用到實(shí)踐上,了解了java的重要性,對以后的學(xué)習(xí)起了重要作用。 在設(shè)計(jì)的過程中我遇到了很到問題,不過在老師和同學(xué)們的幫助和自己的思考下還是很好的完成了。這此課程設(shè)計(jì)還
15、讓我懂得了寫程序不能閉門造車,要努力拓寬知識面,開闊視野,拓展思維。 5.參考文獻(xiàn) [1] 印旻. Java語言與面向?qū)ο蟪绦蛟O(shè)計(jì)[M],北京: 清華大學(xué)出版社,2005.4: 58-72 [2] 朱站立、沈偉. Java程序設(shè)計(jì)實(shí)用教程[M], 北京: 電子工業(yè)出版社, 2007.5: 82-95 [3] 朱福喜、尹為民、余振坤等. Java語言與面向?qū)ο蟪绦蛟O(shè)計(jì)[M], 第2版. 武漢: 武漢大學(xué)出版社,2006.1:123-130 [4] 艾力江. Java 2 范例入門與提高[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("開始游戲"); startItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { reload();
20、 } }); reloadItem = new JMenuItem("重來一次"); 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, "恭喜您通過!!"); } } 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: 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 5段太尉逸事狀
- 讀后感作文輔導(dǎo)1
- 有機(jī)磷農(nóng)藥中毒終極
- 電解池的應(yīng)用(教育精品)
- 庫存管理流程及改善課件
- 廬陽區(qū)XX小學(xué)四年級數(shù)學(xué)上冊-1-大數(shù)的認(rèn)識-第4課時(shí)-億以內(nèi)數(shù)的大小比較課件-新人教版
- 合同策劃與合同分析
- 五年級下冊語文課件-1春光染綠我們雙腳-蘇教版
- 闌尾炎的教學(xué)查房csp課件
- 基準(zhǔn)和輪廓度公差課件
- 建立開放式公共物流平臺體系-推動制造業(yè)及物流的聯(lián)動課件
- 三(323)家長會
- 策略管理Chapter3內(nèi)部分析獨(dú)特能力競爭優(yōu)勢與獲利能力課件
- 江城子(教育精品)
- 水果寶寶去旅行 (2)(教育精品)