《JAVA程序設(shè)計(jì)》課程設(shè)計(jì)五子棋小游戲
《《JAVA程序設(shè)計(jì)》課程設(shè)計(jì)五子棋小游戲》由會員分享,可在線閱讀,更多相關(guān)《《JAVA程序設(shè)計(jì)》課程設(shè)計(jì)五子棋小游戲(20頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 《JAVA程序設(shè)計(jì)》 課程設(shè)計(jì) 題 目: 五子棋小游戲 專 業(yè): 信息與計(jì)算科學(xué) 學(xué) 號: 070930205等 姓 名: 指導(dǎo)教師: 成 績: 二00九 年 十二 月 九 日 1.課程設(shè)計(jì)研究背景及意義 五子棋是一種兩人對弈的純策略型棋類游戲,是起源于中國古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫
2、生,引人入勝;不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。 然則看似很簡單的一個(gè)小游戲,卻對我們這組剛接觸JAVA編程的成員來說卻是一個(gè)不錯的挑戰(zhàn),由于水平不限不能做成和電腦進(jìn)行對戰(zhàn),也對于和其它電腦聯(lián)機(jī)對戰(zhàn)的模式不太清楚,故做成一個(gè)自己和自己對戰(zhàn)的五子棋來考驗(yàn)我們的JAVA的技術(shù)。 2.課程設(shè)計(jì)題目描述和要求 題目:五子棋小游戲 游戲主要界面如下: 游戲規(guī)則: 1,棋子分為黑白兩色,采用1919棋盤。 2,自己和自己對戰(zhàn),白子和黑子交替下,直到白子或黑子一方有五粒子連在一起,最先完成五粒子連在一起的一方為勝利的一方(可以是橫、豎、斜、反斜)。 3,
3、允許悔棋,且允許一直悔到棋盤上沒有棋子了,悔棋后允許恢復(fù)。當(dāng)悔棋后下子了,則不允許再恢復(fù)了。 4,有棋子的地方不允許再下棋子了 5,落子后不能移動或拿掉。 7,勝利后,棋局重新開始。 主要功能: 1,鼠標(biāo)點(diǎn)棋盤上的任意一點(diǎn),棋子會落入離這點(diǎn)最近的一個(gè)交叉點(diǎn)處。 2,白子和黑子交替下。 3,當(dāng)下到一半時(shí),可以保存進(jìn)度。 4,關(guān)閉再打開后,可以重新讀取進(jìn)度再接著下。 5,允許悔棋,且允許一直悔到棋盤上沒有棋子了。 6,悔棋后允許恢復(fù)。當(dāng)悔棋后下子了,則不允許再恢復(fù)了。 7,下棋的過程中,隨時(shí)可以重新開始。 8,有棋子的地方不允許再下子了。 9,當(dāng)悔到?jīng)]有棋子的時(shí)候會彈
4、出消息。 10,任意一方勝利后會彈出消息 11,恢復(fù)的步數(shù)超過了悔棋的步數(shù)的時(shí)候會彈出消息 12,當(dāng)任意一方勝利后,棋局重新開始。 13,設(shè)有菜單欄,玩家可以點(diǎn)菜單來完成某種操作。 14,當(dāng)最小化后,能重新還原棋子(棋子不會消失)。 15,點(diǎn)菜單欄的“幫助”—>“關(guān)于…”會顯示這個(gè)課程設(shè)計(jì)小組的成員。 3.課程設(shè)計(jì)報(bào)告內(nèi)容 3.1 題目求解的理論依據(jù)及算法 1,利用JAVA的Swing組件可以實(shí)現(xiàn)游戲主界面的設(shè)置和菜單的添加。本次發(fā)開的小游戲界面比較簡單,就一個(gè)面板外加一個(gè)菜單欄,在面板中繪圖。菜單條中有三項(xiàng)分別為:文件(保存進(jìn)度、讀取進(jìn)度、退出),編輯(悔棋、恢復(fù)、
5、重來),幫助(關(guān)于…)。 2,利用JAVA的輸入輸出類庫和文件操作來完成文件的讀寫來完成保存進(jìn)度和讀取進(jìn)度的功能。 3,利用JAVA的事件處理來完成鼠標(biāo),菜單的事件處理。 4,利用JAVA的類來生成棋子 5,利用JAVA的類的繼承和多態(tài),自定義Mypanel來繼承JPanel,在Mypanel 中重寫paintComponent()方法來實(shí)現(xiàn)畫在面板中圖形的重繪。 6,利用JAVA的繪圖類Graphics在面板中繪制棋盤,當(dāng)點(diǎn)鼠標(biāo)的時(shí)候繪制棋子,以及完成重繪。 7,利用JAVA的動態(tài)數(shù)組ArrayList來存儲棋子的坐標(biāo)等等信息。 8,建立一個(gè)19*19的矩陣來存儲棋盤上黑白棋子
6、的信息,初始值全為0,例如:當(dāng)每12行7列下了一個(gè)黑子后,hflag[12][7]=1。如果是白子則bflag[12][7]=1下一個(gè)棋子便對勝負(fù)進(jìn)行一次判斷,當(dāng)hflag或bflag有五個(gè)1連在一起的時(shí)候則判hflag和bflag對應(yīng)的一方勝利。 9,建立一個(gè)棋子的類,有屬性: X:棋子在棋盤上的橫坐標(biāo)、Y: 棋子在棋盤上的縱坐標(biāo) num:這是玩家下的第幾個(gè)棋子 xflag:矩陣的行、yflag:矩陣的列 當(dāng)下一個(gè)棋子后產(chǎn)生一個(gè)棋子實(shí)例,將棋子在棋盤的位置和這是下的第幾個(gè)子以及第幾行和第幾列分別賦值給x,y,num,xflag,yflag。 10,當(dāng)num % 2==0的時(shí)候畫
7、白子,當(dāng)num % 2==1的時(shí)候畫黑子。 3.2 主要事件處理: 1,鼠標(biāo)事件處理(MouseListener): public void mouseClicked(MouseEvent e) { int x = e.getX();/**棋子在棋盤上的橫坐標(biāo)*/ int y = e.getY()/**棋子在棋盤上的縱坐標(biāo)*/; int it = 0, jt = 0; /**矩陣的行和列*/ //絕對定位棋子即當(dāng)點(diǎn)在交叉點(diǎn)附近,棋子會落在交叉點(diǎn) if (y > 53) {//下子不會落到菜單欄上,菜單和標(biāo)題共高53個(gè)像素 for (int i =
8、 0; i < 19; i++) { for (int j = 0; j < 19; j++) { if (pal.hen[i][j] - 13 <= x && (pal.hen[i][j] + 13) >= x&& (y - 53 >= pal.shu[i][j] - 13) && (y - 53 <= pal.shu[i][j] + 13)) { x = (int) pal.hen[i][j]; y = (int) pal.shu[i][j]; it = i; jt = j; } } } //當(dāng)絕對
9、定位交叉處沒有棋子時(shí)畫棋子 if (bflag[it][jt] == 0 && hflag[it][jt] == 0) { if (a % 2 == 0) { pal.drawBai(x, y); bflag[it][jt] = 1;//下了一子后這點(diǎn)便不能下子了 } if (a % 2 == 1) { pal.drawHei(x, y); hflag[it][jt] = 1; //下了一子后這點(diǎn)便不能下子了 } Qizi qi = new Qizi(x, y); //將信息保存在棋子屬
10、性中 qi.setFlagx(it); qi.setFlagy(jt); qi.setX(x); qi.setY(y); qi.setNum(a); pal.list.add(qi);// 把棋子實(shí)例保存到動態(tài)數(shù)組中 huiqiNum = 0;//下子后,便不能悔棋了,悔棋步數(shù)重置為0 a++; } Shengfu();//每下一子對勝負(fù)情況進(jìn)行判斷 } 2、動作事件處理(點(diǎn)菜單的時(shí)候)(ActionListener): public void actionPerformed(ActionEvent e) { i
11、f (e.getActionCommand().equals("保存進(jìn)度")) { handleSave(); } if (e.getActionCommand().equals("讀取進(jìn)度")) { handleRead(); } if (e.getActionCommand().equals("退出")) { System.exit(0); } if (e.getActionCommand().equals("悔棋")) { handleHuiqi(); } if (e.getActionCommand().
12、equals("恢復(fù)")) { handleHuifu(); } if (e.getActionCommand().equals("重來")) { Restart(); } if (e.getActionCommand().equals("關(guān)于...")) { handleAbout(); } 3、窗口事件處理(WindowAdapter): public void windowClosing(WindowEvent e) { System.exit(0); } 3.3 簡要的操作流程(要求畫流程圖) 界面大體構(gòu)造
13、Restart handleHuifu handleHuiqi handleRead handleSave handAbout Exit(0) 退出 讀取進(jìn)度 保存進(jìn)度 悔棋 恢復(fù) 關(guān)于… 重來 幫助 文件 編輯 窗口事件處理(關(guān)閉) 窗口 菜單 鼠標(biāo)事件處理(下子) 簡要的設(shè)計(jì)流程:創(chuàng)建窗口 初始化菜單、面板 對各個(gè)菜單項(xiàng)添加事件監(jiān)聽以及鼠標(biāo)事件監(jiān)聽 窗口事件處理 動作事件處理 鼠標(biāo)事件處理 完成java源代碼編寫 調(diào)試修改程序,完善功能 3.4事件處理的幾個(gè)重要方法: 1、保
14、存進(jìn)度(handleSave) public void handleSave() { int temp = filec.showSaveDialog(this); if (temp == JFileChooser.APPROVE_OPTION) { String path=filec.getSelectedFile().getAbsolutePath(); file = new File(path); try { file.createNewFile(); FileOutputStream fout = new FileOutputStream(file);
15、 DataOutputStream dout = new DataOutputStream(fout); for (int i = 0; i < pal.list.size(); i++) { dout.writeInt(pal.list.get(i).getFlagx()); dout.writeInt(pal.list.get(i).getFlagy()); dout.writeInt(pal.list.get(i).getNum()); dout.writeInt(pal.list.get(i).getX()); dout.writeIn
16、t(pal.list.get(i).getY()); } fout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 2、讀取進(jìn)度(handleRead) public void handleRead() { int temp = filec.showOpenDialog(this); if (temp == JFileChooser.APPRO
17、VE_OPTION) { Restart();//讀取進(jìn)程前必須清空所有變量 String path = filec.getSelectedFile().getAbsolutePath(); file = new File(path); try { FileInputStream fout = new FileInputStream(file); DataInputStream din = new DataInputStream(fout); // readInt以4個(gè)字節(jié)表示一個(gè)Int,故要除4,一個(gè)循環(huán)讀了5次,故要除20 for (
18、int i = 0; i < file.length() / 20; i++) { Qizi te = new Qizi(); te.setFlagx(din.readInt()); te.setFlagy(din.readInt()); te.setNum(din.readInt()); te.setX(din.readInt()); te.setY(din.readInt()); a = te.getNum(); if (a % 2 == 0) { bflag[te.getFlagx()][te.g
19、etFlagy()] = 1; } if (a % 2 == 1) { hflag[te.getFlagx()][te.getFlagy()] = 1; } pal.list.add(te); } din.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } a++; } repaint()
20、; } 3、處理悔棋(handleHuiqi) public void handleHuiqi() { if (pal.list.size() > 0) { Qizi temp = pal.list.get(pal.list.size() - 1); pal.beiyong.add(temp); int tempx = temp.getFlagx(); int tempy = temp.getFlagy(); if (a % 2 == 1) { bflag[tempx][tempy] = 0; } if (a %
21、2 == 0) { hflag[tempx][tempy] = 0; } pal.list.remove(pal.list.size() - 1); a--; huiqiNum++; repaint(); } else { JOptionPane.showMessageDialog(this, "已經(jīng)沒棋子了!", "警告", JOptionPane.INFORMATION_MESSAGE); } } 4、處理恢復(fù)(handleHuifu) public void handleHuifu() {
22、 if (huiqiNum > 0) { Qizi temp = pal.beiyong.get(pal.beiyong.size() - 1); pal.list.add(temp); int tempx = temp.getFlagx(); int tempy = temp.getFlagy(); if (a % 2 == 1) { bflag[tempx][tempy] = 1; } if (a % 2 == 0) { hflag[tempx][tempy] = 1; } pal.beiyong
23、.remove(pal.beiyong.size() - 1); a++; huiqiNum--; repaint(); } else { JOptionPane.showMessageDialog(this, "對不起,系統(tǒng)不充許恢復(fù)!", "警告",JOptionPane.INFORMATION_MESSAGE); } } 5、重來(Restart) public void Restart() { pal.list.clear(); for (int i = 0; i < 19; i++) { for (int j
24、= 0; j < 19; j++) { bflag[i][j] = 0; hflag[i][j] = 0; } } repaint(); } 6、處理關(guān)于…(handleAbout) public void handleAbout() { JOptionPane.showMessageDialog(this, ABOUT, "About", JOptionPane.INFORMATION_MESSAGE); } 7、判斷勝負(fù)(Shengfu) public void Shengfu() { /**是否白棋有五粒連在一起*/
25、 int ba = 0; /**是否黑棋有五粒連在一起*/ int he = 0; // 橫線上有五粒 for (int i = 0; i < 19; i++) { for (int j = 0; j < 15; j++) { if (bflag[i][j] == 1 && bflag[i][j + 1] == 1&& bflag[i][j + 2] == 1 && bflag[i][j + 3] == 1&& bflag[i][j + 4] == 1) { ba = 1; } if (hflag[i][j] ==
26、1 && hflag[i][j + 1] == 1&& hflag[i][j + 2] == 1 && hflag[i][j + 3] == 1&& hflag[i][j + 4] == 1) { he = 1; } } } // 豎線上有五粒斜、線上有五粒、反斜線上有五粒略,和第一種情況相似 if (ba == 1) { JOptionPane.showMessageDialog(this, "白棋勝利", "結(jié)果",JOptionPane.INFORMATION_MESSAGE); Restart(); } i
27、f (he == 1) { JOptionPane.showMessageDialog(this, "黑棋勝利", "結(jié)果",JOptionPane.INFORMATION_MESSAGE); Restart(); } 3.5 詳細(xì)操作步驟(含部分源程序代碼) 1,產(chǎn)生棋子的類的主要屬性(文件Qizi.java) public class Qizi { private int x; //棋子在棋盤上的橫坐標(biāo) private int y; //棋子在棋盤上的縱坐標(biāo) private int num;// 這是玩家下的第幾個(gè)棋子 private int fl
28、agx; // 矩陣的行
private int flagy; // 矩陣的列
}
2,產(chǎn)生面板文件MyPanel.java的大概內(nèi)容:
public class MyPanel extends JPanel {
/**白子的圖片*/
Image bai;
/**黑子的圖片*/
Image hei;
/**19*19的棋盤圖片*/
Image qipan;
/**動態(tài)數(shù)組,保存棋子實(shí)例*/
ArrayList
29、st
30、 i < list.size(); i++) { Qizi qizi = (Qizi) list.get(i); if (i % 2 == 0) { g.drawImage(bai, qizi.getX() - 12, qizi.getY() - 12, this); } else { g.drawImage(hei, qizi.getX() - 12, qizi.getY() - 12, this); } } } } //方法—畫白棋子 public void drawBai(int x, int y)
31、{ this.getGraphics().drawImage(bai, x - 12, y - 12, this); } //方法—畫白棋子 public void drawHei(int x, int y) { this.getGraphics().drawImage(hei, x - 12, y - 12, this); } //初始化棋盤交叉點(diǎn)坐標(biāo) public void startxy() { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { hen
32、[i][j] = 18.0+j * 25.8; shu[i][j] = 18.0+i * 25.8; } } } 3、五子棋的主要文件Wuziqi.java的大概內(nèi)容: public class Wuziqi extends JFrame implements MouseListener { final String ABOUT = "0709302班JAVA課程設(shè)計(jì)小組\n本組成員:\n組長:沈村敬\n組員:劉新琳、雷艷飛、李云、黃生涯"; JMenuBar mb; MyPanel pal; JMenu wenjian, bianji,
33、help; JMenuItem read, save, exit, huiqi, huifu, restart, about; Process pro = new Process(); JFileChooser filec = new JFileChooser(); File file; /** 控制白棋和黑棋的交替*/ int a; /**判斷坐標(biāo)上有沒有白子*/ int bflag[][] = new int[19][19]; /** 判斷坐標(biāo)上有沒有黑子*/ int hflag[][] = new int[19][19]; /**連續(xù)悔了幾步棋
34、*/ int huiqiNum = 0; /**標(biāo)題欄的圖標(biāo)*/ Image top; class Process implements ActionListener {// 處理菜單事件 public void actionPerformed(ActionEvent e) { 略,重復(fù) } public void handleSave() {// 保存文件 略,重復(fù) } public void handleRead() {// 讀取文件 略,重復(fù) } public void handleHuiqi() {// 處理悔棋
35、 略,重復(fù) } public void handleHuifu() {// 恢復(fù)悔棋 略,重復(fù) } public void handleAbout() {//彈出消息,小組名稱 略 } public void Restart() {// 重新開始 略,重復(fù) } public void init() {// 初始化菜單 略 } public void mouseClicked(MouseEvent e) {// 處理鼠標(biāo)點(diǎn)擊事件 略,重復(fù) } public void Shengfu() {// 判斷勝負(fù)
36、 略,重復(fù); } public Wuziqi() {// 構(gòu)造方法 /**設(shè)置框架大小*/ this.setSize(506, 556); /**設(shè)置標(biāo)題*/ this.setTitle("五子棋"); /**設(shè)置標(biāo)題圖標(biāo)*/ this.setIconImage(top); init(); /**獲取容器*/ Container co = getContentPane(); co.add(pal); /**使框架居中*/ Dimension c = Toolkit.getDefaultToolkit().g
37、etScreenSize(); Dimension self = this.getSize(); double x = c.getWidth() / 2 - self.getWidth() / 2; double y = c.getHeight() / 2 - self.getHeight() / 2; this.setLocation((int) x, (int) y); /**設(shè)置不能改變大小*/ this.setResizable(false); /**增加鼠標(biāo)事件偵聽*/ this.addMouseListener(this); /
38、**初始化棋盤的坐標(biāo)*/ pal.startxy(); /**關(guān)閉窗口*/ this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); /**增加菜單*/ this.setJMenuBar(mb); /**顯示所有*/ this.setVisible(true); } // main() public static void main(String[]
39、 args) { new Wuziqi(); } } 3.6 程序調(diào)試出錯信息及解決方法 制作過程中遇到的最主要的錯誤如下:(這兩個(gè)錯誤都困擾了我們相當(dāng)長一段時(shí)間,很有代表性) 1,當(dāng)在框架里繪圖的時(shí)候,會重寫paint()方法,但加了菜單后,菜單彈出再收縮后,界面不能及時(shí)刷新,會留下白色的一片。 解決方法: 寫一個(gè)類繼承JPanel類,重寫paintComponent()方法,用這個(gè)方法代替paint()方法,可解決這個(gè)問題。 2,下面是文件讀取的方法中一段代碼: try { FileInputStream fout = new FileInputStrea
40、m(file); DataInputStream din = new DataInputStream(fout); for (int i = 0; i < file.length()/5; i++) { Qizi te = new Qizi(); te.setFlagx(din.readInt()); te.setFlagy(din.readInt()); te.setNum(din.readInt()); te.setX(din.readInt()); te.setY(din.readInt());
41、 a = te.getNum(); if (a % 2 == 0) { bflag[te.getFlagx()][te.getFlagy()] = 1; } if (a % 2 == 1) { hflag[te.getFlagx()][te.getFlagy()] = 1; } pal.list.add(te); } din.close(); } catch (FileNotFoundException e) { e.printStackTrace();
42、 } catch (IOException e) { e.printStackTrace(); } 可以調(diào)試出這段代碼可以讀出數(shù)據(jù)但會有異常出現(xiàn),異常的名稱叫java.io.EOFException出現(xiàn)這種錯誤的原因是已經(jīng)到了文件末尾,但讀寫還沒有結(jié)束。 解決辦法: 仔細(xì)分析后,我們發(fā)現(xiàn)我們是用writeInt()這個(gè)函數(shù)寫的文件和readInt這個(gè)讀的文件,查了很多資料后我們終于發(fā)現(xiàn)這readInt()這個(gè)方法寫讀一次會讀出4個(gè)字節(jié),所以我們只須把循環(huán)的次數(shù)從file.leng()/5(文件的長度)控制在file.leng()/20就行了,即多除以4個(gè)字節(jié)。 3.7
43、 主要程序運(yùn)行結(jié)果 1、游戲運(yùn)行界面: 2、保存進(jìn)度界面: 3、打開讀取進(jìn)度界面: 4、打開幫助—>關(guān)于……彈出界面: 5、當(dāng)悔棋一直悔到棋盤上沒有棋子了會彈出: 6、當(dāng)你恢復(fù)的步數(shù)超過你悔棋的步數(shù)或者悔棋后又下子了,點(diǎn)恢復(fù)后會彈出以下消息: 7、勝利后會彈出消息: 3.8 心得體會 雖然只是一個(gè)看似很簡單的小程序,但在開發(fā)的過程中遇到了各種各樣的問題,但最后都被我們小組成員在一起商量討論,并上網(wǎng)和到圖書館去求助、查閱資料,向老師請教,終于一個(gè)一個(gè)的問題都被我們聯(lián)手解決了,在這其中我們都學(xué)到了很多東西,從一開始看到出錯就煩惱,變成了一
44、看到錯誤就興奮。因?yàn)橹挥型ㄟ^不斷去解決錯誤才能更好的提高我們自己的編程水平,通過這次的開發(fā)過程后,我們意識到要多做這種還算比較大型的系統(tǒng)(游戲)才能使自己的水平得到質(zhì)的提高。同時(shí),在發(fā)開過程中我們也意識到了我們的基礎(chǔ)還不是很扎實(shí),我們要走的路還很長,但我們堅(jiān)信,我們一直在路上,我們會不斷的超越自我,不斷的挑戰(zhàn)自我,總有一天,我們能在這個(gè)領(lǐng)域找到自己的一片天空。 4. 本組成員及分工: 組長:沈村敬(0709302-05) 組員:劉新琳(0709302-25)、雷艷飛(0709302-12)、李云(0709302-26)、黃生涯(0709302-01) 分工: 沈村敬:
45、菜單保存進(jìn)度和菜單讀取進(jìn)度事件的處理以及paintCompoent方法的重寫 劉新琳:鼠標(biāo)事事件處理,游戲主界面的生成 雷艷飛:菜單重來事件處理和窗口事件處理以及棋盤交叉點(diǎn)坐標(biāo)的初始化 李去:菜單悔棋事件處理和菜單恢復(fù)事件處理以及棋子類的編寫 黃生涯:方法勝負(fù)判斷的編寫,菜單(關(guān)于)事件的處理 5.總結(jié) 通過這次的開發(fā),我們一起討論,我們總結(jié)出有以下幾點(diǎn): 1, 一定要養(yǎng)成良好的寫代碼的習(xí)慣,注意縮進(jìn)和一些變量名要取的有意義,一看就知道這是大概是控制什么東西的。 2, 代碼要減少控制語句的嵌套,不要過長,過長多用函數(shù)來增加可讀性。 3, 養(yǎng)成寫注釋的習(xí)慣,這樣你自己看的
46、懂,別人也看得懂。 4, 算法很重要,寫代碼之前先要弄清楚算法大概的流程。 5, 多和別人交流,這樣你的思想才不會局限。 6, 多上網(wǎng)查資料,網(wǎng)絡(luò)是把雙刃劍,但用于這方面是不會有什么很大的壞處的。 7, 多動手,多試驗(yàn),在錯誤中成長。 參考書目:(五號,宋體加粗) [1] 李尊朝,蘇軍,《JAVA語言設(shè)計(jì)》,中國鐵道出版社,2007年12月ut2ApOdfXXc02GyBKsKCWw97MrqqWhoj5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF
47、0Jf1gK74IUXyBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VV
48、LRKN7R8psz1BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyrF7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwF
49、JthphEipDFNqnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ ut2ApOdfXXc02GyBKsKC
50、Ww97MrqqWhoj5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUXyBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09
51、RtsZEYS8Zrd2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJ
52、tt6QilZxtyrF7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFNqnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。