《JAVA程序設(shè)計》課程設(shè)計五子棋小游戲
《《JAVA程序設(shè)計》課程設(shè)計五子棋小游戲》由會員分享,可在線閱讀,更多相關(guān)《《JAVA程序設(shè)計》課程設(shè)計五子棋小游戲(20頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 《JAVA程序設(shè)計》 課程設(shè)計 題 目: 五子棋小游戲 專 業(yè): 信息與計算科學(xué) 學(xué) 號: 070930205等 姓 名: 指導(dǎo)教師: 成 績: 二00九 年 十二 月 九 日 1.課程設(shè)計研究背景及意義 五子棋是一種兩人對弈的純策略型棋類游戲,是起源于中國古代的傳統(tǒng)黑白棋種之一。發(fā)展于日本,流行于歐美。容易上手,老少皆宜,而且趣味橫
2、生,引人入勝;不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。 然則看似很簡單的一個小游戲,卻對我們這組剛接觸JAVA編程的成員來說卻是一個不錯的挑戰(zhàn),由于水平不限不能做成和電腦進行對戰(zhàn),也對于和其它電腦聯(lián)機對戰(zhàn)的模式不太清楚,故做成一個自己和自己對戰(zhàn)的五子棋來考驗我們的JAVA的技術(shù)。 2.課程設(shè)計題目描述和要求 題目:五子棋小游戲 游戲主要界面如下: 游戲規(guī)則: 1,棋子分為黑白兩色,采用1919棋盤。 2,自己和自己對戰(zhàn),白子和黑子交替下,直到白子或黑子一方有五粒子連在一起,最先完成五粒子連在一起的一方為勝利的一方(可以是橫、豎、斜、反斜)。 3,
3、允許悔棋,且允許一直悔到棋盤上沒有棋子了,悔棋后允許恢復(fù)。當(dāng)悔棋后下子了,則不允許再恢復(fù)了。 4,有棋子的地方不允許再下棋子了 5,落子后不能移動或拿掉。 7,勝利后,棋局重新開始。 主要功能: 1,鼠標(biāo)點棋盤上的任意一點,棋子會落入離這點最近的一個交叉點處。 2,白子和黑子交替下。 3,當(dāng)下到一半時,可以保存進度。 4,關(guān)閉再打開后,可以重新讀取進度再接著下。 5,允許悔棋,且允許一直悔到棋盤上沒有棋子了。 6,悔棋后允許恢復(fù)。當(dāng)悔棋后下子了,則不允許再恢復(fù)了。 7,下棋的過程中,隨時可以重新開始。 8,有棋子的地方不允許再下子了。 9,當(dāng)悔到?jīng)]有棋子的時候會彈
4、出消息。 10,任意一方勝利后會彈出消息 11,恢復(fù)的步數(shù)超過了悔棋的步數(shù)的時候會彈出消息 12,當(dāng)任意一方勝利后,棋局重新開始。 13,設(shè)有菜單欄,玩家可以點菜單來完成某種操作。 14,當(dāng)最小化后,能重新還原棋子(棋子不會消失)。 15,點菜單欄的“幫助”—>“關(guān)于…”會顯示這個課程設(shè)計小組的成員。 3.課程設(shè)計報告內(nèi)容 3.1 題目求解的理論依據(jù)及算法 1,利用JAVA的Swing組件可以實現(xiàn)游戲主界面的設(shè)置和菜單的添加。本次發(fā)開的小游戲界面比較簡單,就一個面板外加一個菜單欄,在面板中繪圖。菜單條中有三項分別為:文件(保存進度、讀取進度、退出),編輯(悔棋、恢復(fù)、
5、重來),幫助(關(guān)于…)。 2,利用JAVA的輸入輸出類庫和文件操作來完成文件的讀寫來完成保存進度和讀取進度的功能。 3,利用JAVA的事件處理來完成鼠標(biāo),菜單的事件處理。 4,利用JAVA的類來生成棋子 5,利用JAVA的類的繼承和多態(tài),自定義Mypanel來繼承JPanel,在Mypanel 中重寫paintComponent()方法來實現(xiàn)畫在面板中圖形的重繪。 6,利用JAVA的繪圖類Graphics在面板中繪制棋盤,當(dāng)點鼠標(biāo)的時候繪制棋子,以及完成重繪。 7,利用JAVA的動態(tài)數(shù)組ArrayList來存儲棋子的坐標(biāo)等等信息。 8,建立一個19*19的矩陣來存儲棋盤上黑白棋子
6、的信息,初始值全為0,例如:當(dāng)每12行7列下了一個黑子后,hflag[12][7]=1。如果是白子則bflag[12][7]=1下一個棋子便對勝負進行一次判斷,當(dāng)hflag或bflag有五個1連在一起的時候則判hflag和bflag對應(yīng)的一方勝利。 9,建立一個棋子的類,有屬性: X:棋子在棋盤上的橫坐標(biāo)、Y: 棋子在棋盤上的縱坐標(biāo) num:這是玩家下的第幾個棋子 xflag:矩陣的行、yflag:矩陣的列 當(dāng)下一個棋子后產(chǎn)生一個棋子實例,將棋子在棋盤的位置和這是下的第幾個子以及第幾行和第幾列分別賦值給x,y,num,xflag,yflag。 10,當(dāng)num % 2==0的時候畫
7、白子,當(dāng)num % 2==1的時候畫黑子。 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)點在交叉點附近,棋子會落在交叉點 if (y > 53) {//下子不會落到菜單欄上,菜單和標(biāo)題共高53個像素 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、定位交叉處沒有棋子時畫棋子 if (bflag[it][jt] == 0 && hflag[it][jt] == 0) { if (a % 2 == 0) { pal.drawBai(x, y); bflag[it][jt] = 1;//下了一子后這點便不能下子了 } if (a % 2 == 1) { pal.drawHei(x, y); hflag[it][jt] = 1; //下了一子后這點便不能下子了 } 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);// 把棋子實例保存到動態(tài)數(shù)組中 huiqiNum = 0;//下子后,便不能悔棋了,悔棋步數(shù)重置為0 a++; } Shengfu();//每下一子對勝負情況進行判斷 } 2、動作事件處理(點菜單的時候)(ActionListener): public void actionPerformed(ActionEvent e) { i
11、f (e.getActionCommand().equals("保存進度")) { handleSave(); } if (e.getActionCommand().equals("讀取進度")) { 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) 退出 讀取進度 保存進度 悔棋 恢復(fù) 關(guān)于… 重來 幫助 文件 編輯 窗口事件處理(關(guān)閉) 窗口 菜單 鼠標(biāo)事件處理(下子) 簡要的設(shè)計流程:創(chuàng)建窗口 初始化菜單、面板 對各個菜單項添加事件監(jiān)聽以及鼠標(biāo)事件監(jiān)聽 窗口事件處理 動作事件處理 鼠標(biāo)事件處理 完成java源代碼編寫 調(diào)試修改程序,完善功能 3.4事件處理的幾個重要方法: 1、保
14、存進度(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、讀取進度(handleRead) public void handleRead() { int temp = filec.showOpenDialog(this); if (temp == JFileChooser.APPRO
17、VE_OPTION) { Restart();//讀取進程前必須清空所有變量 String path = filec.getSelectedFile().getAbsolutePath(); file = new File(path); try { FileInputStream fout = new FileInputStream(file); DataInputStream din = new DataInputStream(fout); // readInt以4個字節(jié)表示一個Int,故要除4,一個循環(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、判斷勝負(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 詳細操作步驟(含部分源程序代碼) 1,產(chǎn)生棋子的類的主要屬性(文件Qizi.java) public class Qizi { private int x; //棋子在棋盤上的橫坐標(biāo) private int y; //棋子在棋盤上的縱坐標(biāo) private int num;// 這是玩家下的第幾個棋子 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ù)組,保存棋子實例*/
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); } //初始化棋盤交叉點坐標(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è)計小組\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)點擊事件 略,重復(fù) } public void Shengfu() {// 判斷勝負
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)試出錯信息及解決方法 制作過程中遇到的最主要的錯誤如下:(這兩個錯誤都困擾了我們相當(dāng)長一段時間,很有代表性) 1,當(dāng)在框架里繪圖的時候,會重寫paint()方法,但加了菜單后,菜單彈出再收縮后,界面不能及時刷新,會留下白色的一片。 解決方法: 寫一個類繼承JPanel類,重寫paintComponent()方法,用這個方法代替paint()方法,可解決這個問題。 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é)束。 解決辦法: 仔細分析后,我們發(fā)現(xiàn)我們是用writeInt()這個函數(shù)寫的文件和readInt這個讀的文件,查了很多資料后我們終于發(fā)現(xiàn)這readInt()這個方法寫讀一次會讀出4個字節(jié),所以我們只須把循環(huán)的次數(shù)從file.leng()/5(文件的長度)控制在file.leng()/20就行了,即多除以4個字節(jié)。 3.7
43、 主要程序運行結(jié)果 1、游戲運行界面: 2、保存進度界面: 3、打開讀取進度界面: 4、打開幫助—>關(guān)于……彈出界面: 5、當(dāng)悔棋一直悔到棋盤上沒有棋子了會彈出: 6、當(dāng)你恢復(fù)的步數(shù)超過你悔棋的步數(shù)或者悔棋后又下子了,點恢復(fù)后會彈出以下消息: 7、勝利后會彈出消息: 3.8 心得體會 雖然只是一個看似很簡單的小程序,但在開發(fā)的過程中遇到了各種各樣的問題,但最后都被我們小組成員在一起商量討論,并上網(wǎng)和到圖書館去求助、查閱資料,向老師請教,終于一個一個的問題都被我們聯(lián)手解決了,在這其中我們都學(xué)到了很多東西,從一開始看到出錯就煩惱,變成了一
44、看到錯誤就興奮。因為只有通過不斷去解決錯誤才能更好的提高我們自己的編程水平,通過這次的開發(fā)過程后,我們意識到要多做這種還算比較大型的系統(tǒng)(游戲)才能使自己的水平得到質(zhì)的提高。同時,在發(fā)開過程中我們也意識到了我們的基礎(chǔ)還不是很扎實,我們要走的路還很長,但我們堅信,我們一直在路上,我們會不斷的超越自我,不斷的挑戰(zhàn)自我,總有一天,我們能在這個領(lǐng)域找到自己的一片天空。 4. 本組成員及分工: 組長:沈村敬(0709302-05) 組員:劉新琳(0709302-25)、雷艷飛(0709302-12)、李云(0709302-26)、黃生涯(0709302-01) 分工: 沈村敬:
45、菜單保存進度和菜單讀取進度事件的處理以及paintCompoent方法的重寫 劉新琳:鼠標(biāo)事事件處理,游戲主界面的生成 雷艷飛:菜單重來事件處理和窗口事件處理以及棋盤交叉點坐標(biāo)的初始化 李去:菜單悔棋事件處理和菜單恢復(fù)事件處理以及棋子類的編寫 黃生涯:方法勝負判斷的編寫,菜單(關(guān)于)事件的處理 5.總結(jié) 通過這次的開發(fā),我們一起討論,我們總結(jié)出有以下幾點: 1, 一定要養(yǎng)成良好的寫代碼的習(xí)慣,注意縮進和一些變量名要取的有意義,一看就知道這是大概是控制什么東西的。 2, 代碼要減少控制語句的嵌套,不要過長,過長多用函數(shù)來增加可讀性。 3, 養(yǎng)成寫注釋的習(xí)慣,這樣你自己看的
46、懂,別人也看得懂。 4, 算法很重要,寫代碼之前先要弄清楚算法大概的流程。 5, 多和別人交流,這樣你的思想才不會局限。 6, 多上網(wǎng)查資料,網(wǎng)絡(luò)是把雙刃劍,但用于這方面是不會有什么很大的壞處的。 7, 多動手,多試驗,在錯誤中成長。 參考書目:(五號,宋體加粗) [1] 李尊朝,蘇軍,《JAVA語言設(shè)計》,中國鐵道出版社,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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案