【課程設計報告】Java實現(xiàn)游戲連連看(有源代碼)
《【課程設計報告】Java實現(xiàn)游戲連連看(有源代碼)》由會員分享,可在線閱讀,更多相關《【課程設計報告】Java實現(xiàn)游戲連連看(有源代碼)(26頁珍藏版)》請在裝配圖網上搜索。
1、課程設計說明書 NO.26 更多計算機類課程設計、畢業(yè)設計、論文請訪問: JAVA語言實現(xiàn)連連看游戲 1.課程設計目的 Java語言是當今流行的網絡編程語言,它具有面向對象、跨平臺、分布應用等特點。面向對象的開發(fā)方法是當今世界最流行的開發(fā)方法,它不僅具有更貼近自然的語義,而且有利于軟件的維護和繼承。 學會Java程序開發(fā)的環(huán)境搭建與配置,并在實際運用中學習和掌握Java程序開發(fā)的全過程。進一步熟悉掌握Java程序設計語言的基礎內容,如用戶圖形界面設計、Java多線程編程、Applet程序的設計、文件和網絡輸入輸出流編程、Java數(shù)據(jù)庫編程等。通過親
2、自動手寫程序,一方面拓展知識面,一方面鍛煉調試能力 2.設計方案論證 2.1設計思路 2.1.1用戶可以通過點擊菜單中的“開始游戲”選項,開始新游戲程序。程序會載入圖片,并通過特定的算法排列圖片,并標記圖片,以便判斷圖片是否相同。記錄圖片坐標,以方便計算圖片是否可以相連。確定圖片大小,以確定用戶點擊的是那張圖片。 2.1.2用戶選擇兩張一樣的圖片,通過鼠標進行選取,如果用戶兩次點擊的圖片不相同,那么系統(tǒng)認為用戶沒有點(鼠標記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會消除這兩張圖片,并使鼠標記數(shù)為0,并消除這兩張圖片的標記,使里面的圖片被標記在外面。以便用
3、戶可以進行以后的選擇。 2.1.3用戶也可使通過使用“炸彈”功能進行消除圖片。方法是點擊菜單中的“炸彈”選項使用,點擊后如果界面上有兩張可以相連的相同圖片就隨機消除兩張可以相連的相同的圖片。 2.1.4 炸彈數(shù)目是有限的,默認數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會自動減一,當炸彈數(shù)目為零時(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時,系統(tǒng)會彈出對話框提示用戶,并把菜單中“炸彈”選項變?yōu)榛疑ㄓ脩舨豢墒褂茫? 2.1.5當系統(tǒng)開始游戲后,系統(tǒng)會在后臺記錄時間,如果在用戶還沒有消除所有圖片時,系統(tǒng)時間到了,那么系統(tǒng)會彈出對話框,提示用戶,時間到了,游戲失敗。 2.1.6 當用
4、戶點擊確定后,系統(tǒng)還會彈出對話框詢問用戶是否重新開始,用戶選擇“是”時,系統(tǒng)會開始新游戲;當用戶選擇“否”時,系統(tǒng)會返回開始界面;當用戶選擇“取消”時,系統(tǒng)會返回提示時間到的界面。 2.1.6 如果在時間未到時,用戶使所有的圖片都消失(兩兩消除,直到最后一對),系統(tǒng)會提示用戶游戲以通過,點“確定”后回到開始界面。 2.2設計方法 在設計連連看小游戲是,需要編寫6個Java源文件:MainFrame.java,ChessButton.java,MapUI.java,Settings.java,ArrayPoint.java,Map.java。 2.2.1 MainFrame.java
5、 主窗口部分定義了程序用函數(shù),實現(xiàn)了程序菜單(initMenuBar)的使用。 2.2.2 ChessButton.java 按鍵部分定義按鍵的位置,代表的值。 2.2.3 MapUI.java 游戲部分判斷點擊的圖片,判斷兩圖片是否可連,是否相同。判斷是否勝利。實現(xiàn)炸彈功能。 2.2.4 Settings.java 數(shù)組確定了游戲各種參數(shù)屬性。 2.2.5 ArrayPoint.java 取值部分定義圖片的值。 2.2.6 Map.java 算法部分通過算法確定兩張圖片是否連通。 2.3功能模塊 此設計共有以下幾個功能模塊。
6、 2.3.1 開始游戲 程序會載入圖片,并通過特定的算法排列圖片,并標記圖片,以便判斷圖片是否相同。記錄圖片坐標,以方便計算圖片是否可以相連。確定圖片大小,以確定用戶點擊的是那張圖片。 2.3.2 使用“炸彈” 用戶點擊菜單中的“炸彈”選項使用,點擊后如果界面上有兩張可以相連的相同圖片就隨機消除兩張可以相連的相同的圖片。 2.3.3 限制炸彈“數(shù)目” 炸彈 默認數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會自動減一,當炸彈數(shù)目為零時(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時,系統(tǒng)會彈出對話框提示用戶,并把菜單中“炸彈”選項變?yōu)榛疑ㄓ脩舨豢墒褂茫? 2.3.4 對
7、用戶游戲時的判斷 用戶選擇兩張一樣的圖片,通過鼠標進行選取,如果用戶兩次點擊的圖片不相同,那么系統(tǒng)認為用戶沒有點(鼠標記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會消除這兩張圖片,并使鼠標記數(shù)為0,并消除這兩張圖片的標記,使里面的圖片被標記在外面。以便用戶可以進行以后的選擇。 2.4流程圖如下 圖2 主函數(shù)流程圖 開始程序 開始游戲 接收用戶點擊 是否使用炸彈
8、 Y N 是否二次點擊 N 消除點擊計數(shù) 兩張圖片 是否相同 Y N 消除兩張一樣的 可以相連的圖片 Y 兩張圖片是否可以相連
9、 N 消除用戶點擊 的兩張圖片 Y 消除點擊計數(shù) 是否還有圖 片未消除 Y 結束 N 圖3 游戲進行流程圖 圖4 使用炸彈流程圖 圖5 計算時
10、間流程圖 2.5類、方法、屬性說明 成員變量 成員變量描述 變量類型 名稱 行數(shù) int ROWS 列數(shù) int COLUMNS 圖片后綴名 string RELEX 每局所花時間(秒) int PERTIME 判斷的時間間隔 int PER 炸彈的使用次數(shù) int BOMBCOUNT 方法 方法名 功能 備注 MenuBar() 實用程序菜單 無備注 Bomb() 設置炸彈 無備注 Point() 定義按鍵的位置 無備注 Chesses() 初步定義游戲界面,功能 無備注
11、Timer() 時間限制 無備注 3.設計結果與分析 用戶可以通過點擊菜單中的“開始游戲”選項,開始新游戲程序。程序會載入圖片,并通過特定的算法排列圖片,并標記圖片,以便判斷圖片是否相同。記錄圖片坐標,以方便計算圖片是否可以相連。確定圖片大小,以確定用戶點擊的是那張圖片。 圖6 開始游戲后畫面 用戶選擇兩張一樣的圖片,通過鼠標進行選取,如果用戶兩次點擊的圖片不相同,那么系統(tǒng)認為用戶沒有點(鼠標記數(shù)歸0),以完成用戶以后的選取工作。如果用戶選擇的是相同的圖片(如第八行第二列和第八行第三列),那么系統(tǒng)會消除這兩張圖片,并使鼠標記數(shù)為0,并消除這兩張圖片
12、的標記,使里面的圖片被標記在外面。以便用戶可以進行以后的選擇。 圖7 消除三對后畫面 用戶也可使通過使用“炸彈”功能進行消除圖片。方法是點擊菜單中的“炸彈”選項使用,點擊后如果界面上有兩張可以相連的相同圖片就隨機消除兩張可以相連的相同的圖片(如第一行第一列河第一行第四列)。 圖8 使用炸彈后畫面 炸彈數(shù)目是有限的,默認數(shù)目為三,每使用一次“炸彈”功能,炸彈數(shù)目就會自動減一,當炸彈數(shù)目為零時(使用三次“炸彈”功能)。并且用戶想再次使用炸彈時,系統(tǒng)會彈出對話框提示用戶,并把菜單中“炸彈”選項變?yōu)榛疑ㄓ脩舨豢墒褂?/p>
13、)。 圖9 炸彈使用光后畫面 當系統(tǒng)開始游戲后,系統(tǒng)會在后臺記錄時間,如果在用戶還沒有消除所有圖片時,系統(tǒng)時間到了,那么系統(tǒng)會彈出對話框,提示用戶,時間到了,游戲失敗。 圖10 時間到時的畫面 當用戶點擊確定后,系統(tǒng)還會彈出對話框詢問用戶是否重新開始,用戶選擇“是”時,系統(tǒng)會開始新游戲;當用戶選擇“否”時,系統(tǒng)會返回開始界面;當用戶選擇“取消”時,系統(tǒng)會返回提示時間到的界面。 圖11 點擊確定時的畫面 如果在時間未到時,用戶使所有的圖片都消失(兩兩消除,直到最后一對),系統(tǒng)會
14、提示用戶游戲以通過,點“確定”后回到開始界面。 圖12 通關畫面 4.設計體會 通過這次課程設計我學到了不少東西,也發(fā)現(xiàn)了大量的問題,同時在設計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。因而,通過課程設計之后,把以前所學過的知識重新溫故。有些在設計過程中已解決,有些還有待今后慢慢學習,只要認真學就會有更多的收獲??傊@次課程設計使我更多的掌握了所學的知識,并運用到實踐上,了解了java的重要性,對以后的學習起了重要作用。 在設計的過程中我遇到了很到問題,不過在老師和同學們的幫助和自己的思考下還是很好的完成了。這此課程設計還
15、讓我懂得了寫程序不能閉門造車,要努力拓寬知識面,開闊視野,拓展思維。 5.參考文獻 [1] 印旻. Java語言與面向對象程序設計[M],北京: 清華大學出版社,2005.4: 58-72 [2] 朱站立、沈偉. Java程序設計實用教程[M], 北京: 電子工業(yè)出版社, 2007.5: 82-95 [3] 朱福喜、尹為民、余振坤等. Java語言與面向對象程序設計[M], 第2版. 武漢: 武漢大學出版社,2006.1:123-130 [4] 艾力江. Java 2 范例入門與提高[M],北京:清華大學出版社 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, "時間到了!!"); 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)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。