




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java創(chuàng)新實(shí)習(xí)課程設(shè)計(jì)報(bào)告 題 目: 簡(jiǎn)易五子棋游戲開(kāi)發(fā) 院(系): 理學(xué)院 年級(jí)專業(yè):信息與計(jì)算科學(xué)07級(jí) 學(xué)生姓名:陳良燕、姚世杰 學(xué)生學(xué)號(hào):200707119006、200707119032 指導(dǎo)老師: 裴老師 實(shí)習(xí)時(shí)間: 成績(jī)?cè)u(píng)定: 設(shè)計(jì)報(bào)告(40%) 程序演示(20%) 回答問(wèn)題(40%) 總成績(jī): 目 錄1 摘 要 -22 概要設(shè)計(jì)- 23 詳細(xì)設(shè)計(jì)- 24 測(cè)試分析- 95 參考文獻(xiàn)-9一、 摘 要五子棋游戲是常見(jiàn)的經(jīng)典游戲,在19*19的棋盤(pán)方格上進(jìn)行對(duì)弈,由于時(shí)間與基礎(chǔ)知識(shí)的掌握程度限制,現(xiàn)初步完成簡(jiǎn)易五子棋的實(shí)現(xiàn)。本程序完全有面向?qū)ο蟮腏AVA語(yǔ)言編寫(xiě)而成,單擊“開(kāi)始游戲
2、按鈕”將彈出確認(rèn)對(duì)話框,當(dāng)點(diǎn)擊對(duì)話框上的“確認(rèn)”按鈕,游戲正式開(kāi)始;“認(rèn)輸”按鈕表示當(dāng)對(duì)弈雙方有一方認(rèn)輸時(shí),結(jié)束比賽并且輸出結(jié)果;“關(guān)于”按鈕的功能可以由制作者自己添加,主要表示游戲的版本等級(jí);“退出”按鈕單擊時(shí)推出對(duì)弈比賽。二、 概要設(shè)計(jì)(一) 自定義類說(shuō)明類名:ChessBoardFrame作用:顯示五子棋游戲的主界面在整個(gè)屏幕中的位置與大小繼承的父類:Jframe實(shí)現(xiàn)接口:無(wú)public class ChessBoardFrame extends JFrame/自定義一個(gè)繼承于Jframe的類用于獲取五子棋背景圖的大小,在整個(gè)屏幕上的顯示位置類名:ChessBoardPanel作用:實(shí)現(xiàn)
3、五子棋的各個(gè)功能,通過(guò)面板繼承來(lái)進(jìn)行背景圖片載入、通過(guò)畫(huà)直線的成員函數(shù)畫(huà)出棋盤(pán)、通過(guò)判斷函數(shù)對(duì)鼠標(biāo)的判斷以保證正確落子、在判斷函數(shù)中還包括了對(duì)輸與贏的判斷、加上清屏函數(shù)、每次重新開(kāi)始時(shí)進(jìn)行清屏。在此類中主要使用了JAVA本身所具有的一些功能,如:異常拋出、鼠標(biāo)適配器、鼠標(biāo)單擊時(shí)間的捕捉、窗口重繪、顏色填充等功能。繼承的父類:JPanel實(shí)現(xiàn)接口:無(wú)public class ChessBoardPanel extends JPanel/完成五子棋的主要功能(二) 程序流程圖x = 10 & x = 50 & y 10(y - 50) % 20 10i = i + 1;j = j + 1;arri
4、j = 0;arrij= chess;游戲結(jié)束三、 詳細(xì)設(shè)計(jì)一、ChessBoardFrame類import java.awt.Dimension;import java.awt.Toolkit;import javax.swing.JFrame;public class ChessBoardFrame extends JFrame public ChessBoardFrame() / 設(shè)置標(biāo)題this.setTitle(五子棋);int width = 500;int height = 456;/ 窗口起點(diǎn)坐標(biāo)Toolkit kit = Toolkit.getDefaultToolkit()
5、;Dimension dimension = kit.getScreenSize();double screenWidth = dimension.getWidth();double screenHeight = dimension.getHeight();int x = (int) (screenWidth - width) / 2;int y = (int) (screenHeight - height) / 2;/ 設(shè)置窗口大小和位置this.setBounds(x, y, width, height);/ 設(shè)置窗口大小不可改變this.setResizable(false);/ 設(shè)置默
6、認(rèn)關(guān)閉選項(xiàng)this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);/ 將面板放于窗口中/ 注意:這句話在ChessBoardFrame的構(gòu)造方法中this.add(new ChessBoardPanel();this.setVisible(true);public static void main(String args) new ChessBoardFrame();二、ChessBoardPanel類import java.awt.Color;import java.awt.Cursor;import java.awt.Graphics;
7、import java.awt.Image;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;ionAdapter;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JOptionPane;import javax.swing.JPanel;public class ChessBoardPanel extends JPanel / 保存棋子,1表示黑棋,-1表示白棋,0表
8、示沒(méi)有棋int arr = new int1919;/ 是否開(kāi)始游戲boolean start;/ 棋子int chess = 1;public ChessBoardPanel() this.addMouseListener(ma);this.addMouseMotionListener(mma);MouseMotionAdapter mma = new MouseMotionAdapter() Overridepublic void mouseMoved(MouseEvent e) int x = e.getX();int y = e.getY();if (x = 400 & x = 50
9、& y = 400 & x = 250 & y = 400 & x = 300 & y = 400 & x = 350 & y = 10 & x = 50 & y 10) i = i + 1;if (y - 50) % 20 10) j = j + 1;if (arrij = 0) arrij = chess;/ 判斷輸贏if (isWin(chess) = true) if (chess = 1) JOptionPane.showMessageDialog(null, 黑棋獲勝); else JOptionPane.showMessageDialog(null, 白棋獲勝);start =
10、false;/ 改棋子顏色chess = chess * (-1);/ 開(kāi)始游戲if (x = 400 & x = 50 & y = 80) / 清空數(shù)組,清盤(pán)for (int i = 0; i 19; i+) for (int j = 0; j = 400 & x = 250 & y = 400 & x = 300 & y = 400 & x = 350 & y = 380) int option = JOptionPane.showConfirmDialog(null, 確定要退出嗎?,對(duì)話框, JOptionPane.YES_NO_OPTION);if (option = 0) / 退出
11、System.exit(0);Overridepublic void paint(Graphics g) super.paint(g);/ 構(gòu)造背景圖的Image對(duì)象Image img = null;try img = ImageIO.read(new File(System.getProperty(user.dir)+ /background.jpg); catch (IOException e) e.printStackTrace();/ 繪制背景圖g.drawImage(img, 0, 0, this);/ 繪制棋盤(pán)/ 橫向for (int i = 0; i 19; i+) g.draw
12、Line(10, 50 + i * 20, 370, 50 + i * 20);/ 縱向for (int i = 0; i 19; i+) g.drawLine(10 + i * 20, 50, 10 + i * 20, 410);/ 遍歷數(shù)組for (int i = 0; i 19; i+) for (int j = 0; j 19; j+) if (arrij != 0) if (arrij = 1) g.setColor(Color.BLACK);g.fillOval(3 + i * 20, 43 + j * 20, 14, 14);g.drawOval(3 + i * 20, 43 +
13、 j * 20, 14, 14); else g.setColor(Color.WHITE);g.fillOval(3 + i * 20, 43 + j * 20, 14, 14);g.setColor(Color.BLACK);g.drawOval(3 + i * 20, 43 + j * 20, 14, 14);/ 讓窗口重繪this.repaint();/ 判斷輸贏/ 橫向public boolean isH(int chess) for (int i = 0; i 19; i+) for (int j = 2; j 17; j+) if (arrij - 2 = chess & arr
14、ij - 1 = chess& arrij = chess & arrij + 1 = chess& arrij + 2 = chess) return true;return false;/ 縱向public boolean isV(int chess) for (int i = 2; i 17; i+) for (int j = 0; j 19; j+) if (arri - 2j = chess & arri - 1j = chess& arrij = chess & arri + 1j = chess& arri + 2j = chess) return true;return fal
15、se;/ 東南public boolean isEastSouth(int chess) for (int i = 2; i 17; i+) for (int j = 2; j 17; j+) if (arri - 2j - 2 = chess & arri - 1j - 1 = chess& arrij = chess & arri + 1j + 1 = chess& arri + 2j + 2 = chess) return true;return false;/ 東北public boolean isEastNorth(int chess) for (int i = 2; i 17; i
16、+) for (int j = 2; j 17; j+) if (arri - 2j + 2 = chess & arri - 1j + 1 = chess& arrij = chess & arri + 1j - 1 = chess& arri + 2j - 2 = chess) return true;return false;public boolean isWin(int chess) if (isH(chess) = true) | (isV(chess) = true)| (isEastSouth(chess) = true) | (isEastNorth(chess) = true) return true;return false;四、 測(cè)試分析(1)程序運(yùn)行情況: 程序正常的響應(yīng)按鈕事件,鼠標(biāo)點(diǎn)擊的范圍嚴(yán)格受到g.getwidth()與g.getheiht()的限定,當(dāng)在加載圖片的時(shí)候可能由于圖片在不同的機(jī)器上的存儲(chǔ)位置的不同而需要進(jìn)行異常處理,當(dāng)用戶將圖片存儲(chǔ)在不同的地方時(shí),通過(guò)得到用戶的計(jì)算機(jī)在所存位置處的圖
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 7.2萬(wàn)有引力定律+課件+高一下學(xué)期物理人教版(2019)必修第二冊(cè)
- 郵件系統(tǒng)性能評(píng)估
- 優(yōu)化施工方案提升硫化床鍋爐施工效率
- 企業(yè)在線內(nèi)訓(xùn)課件
- 財(cái)務(wù)培訓(xùn)與財(cái)務(wù)管理能力提升合同
- 綠色建筑材料采購(gòu)合同擔(dān)保公司環(huán)保協(xié)議
- 經(jīng)理股權(quán)分紅方案
- 金融產(chǎn)品設(shè)計(jì)與財(cái)務(wù)風(fēng)險(xiǎn)評(píng)估合同
- 食品生產(chǎn)售后保障方案
- 社區(qū)樓宇封控方案
- 部編五年級(jí)道德與法治教學(xué)反思
- 考勤離職管理制度內(nèi)容
- 煤層氣采輸技術(shù)基礎(chǔ)知識(shí)單選題100道及答案
- 2024五人合伙健康產(chǎn)業(yè)投資合作協(xié)議模板3篇
- 半導(dǎo)體物理(I)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋西安電子科技大學(xué)
- 《電源管理芯片的測(cè)試方法》
- 中建質(zhì)量樣板策劃實(shí)施方案
- 網(wǎng)評(píng)員隊(duì)伍培訓(xùn)
- 三年級(jí)語(yǔ)文下冊(cè) 試題 期末測(cè)試卷(基礎(chǔ)1)(含答案)(部編版)
- 不良事件半年總結(jié)
- 國(guó)家開(kāi)放大學(xué)電大本科《工程經(jīng)濟(jì)與管理》2023-2024期末試題及答案(試卷代號(hào):1141)
評(píng)論
0/150
提交評(píng)論