版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計說明書</b></p><p> 設(shè)計題目: 單機版五子棋 </p><p> 設(shè)計時間: 2011.12.15 至2012.1.5 </p><p> 指導(dǎo)教師: </p
2、><p> 評 語:_________________________________</p><p> _________________________________________</p><p> _________________________________________</p><p> ____________
3、_____________________________</p><p> _________________________________________</p><p> 評閱成績:__ __評閱教師:__ ___</p><p><b> 目 錄</b></p><p><b> 1
4、 引 言1</b></p><p> 1.1課程設(shè)計選題1</p><p> 1.2課程設(shè)計的目的1</p><p> 1.3本選題的設(shè)計背景1</p><p><b> 2 需求分析1</b></p><p> 2.1 功能需求1</p><
5、;p> 2.2 系統(tǒng)的開發(fā)運行環(huán)境1</p><p><b> 3 總體設(shè)計2</b></p><p> 3.1 系統(tǒng)體系結(jié)構(gòu)設(shè)計2</p><p> 3.2系統(tǒng)功能模塊及主要類設(shè)計2</p><p> 4 詳細設(shè)計與實現(xiàn)3</p><p> 4.1 主窗體模塊3&l
6、t;/p><p> 4.2 棋子索引模塊9</p><p> 4.3 棋盤構(gòu)造模塊10</p><p> 4.4 畫棋盤模塊12</p><p> 4.5 鼠標(biāo)按下模塊14</p><p> 4.6 判斷勝利算法模塊15</p><p> 4.7 重新開始和悔棋算法模塊16&
7、lt;/p><p> 5 小結(jié)和展望18</p><p> 參 考 文 獻19</p><p><b> 附 錄19</b></p><p><b> 使用說明書19</b></p><p><b> 源程序清單19</b></p&
8、gt;<p><b> 引 言</b></p><p><b> 1.1課程設(shè)計選題</b></p><p><b> 《單機版五子棋》</b></p><p> 1.2課程設(shè)計的目的</p><p> 使學(xué)生鞏固和加深以Java 語言為基礎(chǔ)的面向?qū)ο?/p>
9、編程技術(shù)理論知識的理解,提高實際動手編程能力的培養(yǎng),掌握以Java為核心的應(yīng)用軟件開發(fā)方案,達到能獨立閱讀、編制和調(diào)試一定規(guī)模的Java程序的水平。</p><p> 1.3本選題的設(shè)計背景</p><p> 描述為什么選擇本題目?</p><p> 五子棋是大家喜聞樂見的小游戲,規(guī)則簡單,變化多端,非常有趣味性,</p><p>&l
10、t;b> 本選題的設(shè)計意義?</b></p><p> 通過編寫五子棋小游戲的程序,進一步鍛煉java圖形編程技巧和編寫程序的能力。</p><p><b> 需求分析</b></p><p><b> 2.1 功能需求</b></p><p> 用戶角度考察系統(tǒng)應(yīng)具有哪
11、些功能及非功能性需求。</p><p> 這里實現(xiàn)了雙人對下的五子程序,程序提供重新開局、悔棋功能,附加播放棋子落下的聲音和勝利聲音。</p><p> 2.2 系統(tǒng)的開發(fā)運行環(huán)境</p><p> 本系統(tǒng)開發(fā)平臺: Java </p><p> 本系統(tǒng)集成開發(fā)環(huán)境:Eclipse</p><p> 本系統(tǒng)運
12、行環(huán)境: windows xp或以上版本</p><p><b> 總體設(shè)計</b></p><p> 3.1 系統(tǒng)體系結(jié)構(gòu)設(shè)計</p><p><b> a系統(tǒng)的功能描述</b></p><p> 程序是一個雙人對戰(zhàn)五子棋程序,提供下五子棋必須的悔棋、重新開始、退出等功能,兼播放聲音。&l
13、t;/p><p><b> b相關(guān)類設(shè)計</b></p><p> ChessBoard.java</p><p> 包含ChessBoard的公共類,主要功能是繪制棋盤、棋子、判斷輸贏。</p><p> Point.java</p><p> 包含名為Point的公共類,主要功能定義棋子
14、顏色,獲取索引。</p><p> StartChessJFrame.Java</p><p> 包含StartChessJFrame的公共類,主要功能,顯示主窗體界面,包括工具條面板,“重新開始”、“悔棋”、“退出”按鈕。菜單欄,“系統(tǒng)”菜單,“重新開始”、“悔棋”、“退出”菜單項;“幫助”菜單,“關(guān)于五子棋”、“關(guān)于作者”菜單項。以上菜單項和按鈕,均加監(jiān)聽器,實現(xiàn)對棋盤和窗口的控制
15、。令外,鼠標(biāo)點擊“退出”按鈕或菜單項時彈出提示。</p><p> 3.2系統(tǒng)功能模塊及主要類設(shè)計</p><p> ?、賁tartChessJFrame.java包含名為StartChessJFrame的pubilc類,主要用來顯示主窗體界面,包括工具條面板,“重新開始”、“悔棋”、“退出”按鈕。菜單欄,“系統(tǒng)”菜單,“重新開始”、“悔棋”、“退出”菜單項;“幫助”菜單,“關(guān)于五子棋”
16、、“關(guān)于作者”菜單項。以上菜單項和按鈕,均加監(jiān)聽器,實現(xiàn)對棋盤和窗口的控制。令外,鼠標(biāo)點擊“退出”按鈕或菜單項時彈出提示。編寫一個內(nèi)部類MyItemListenerl來很監(jiān)聽按鈕及菜單項單擊事件。</p><p> ?、诰帉慞oint類,包括棋子x/y索引及其顏色,定義相應(yīng)的構(gòu)造方法和get()函數(shù)。</p><p> ?、劬帉慍hessBoard類,設(shè)置棋盤背景顏色為橘黃色,然后在主框架
17、中創(chuàng)建ChessBoard的對象,添加到主框架中。編寫paintComponent方法繪制棋盤。</p><p> ?、茉贑hessBoard中創(chuàng)建Point[],然后在paintComponent繪制棋子數(shù)組。</p><p> ?、轂镃hessBoard實現(xiàn)監(jiān)聽器MouseListener,覆蓋相應(yīng)的抽象方法,在構(gòu)造方法中添加監(jiān)聽器(addMouseListener).。</p&
18、gt;<p> ?、蘧帉憁ousePressed方法內(nèi)容,預(yù)先定義isBlack表示下的黑棋還是白棋,PointCount表示當(dāng)前棋子數(shù)。</p><p> ?、邔⒃趍ousePressed中獲得的坐標(biāo)轉(zhuǎn)換成索引,在創(chuàng)建Point對象,添加到PointList中,在重新繪制。</p><p> ?、嗵砑酉鄳?yīng)判斷:不能畫到棋盤外,下過的地方不可以在下。(需要輔助方法findPo
19、int ).</p><p> ?、崽砑勇曇舨シ糯a。游戲結(jié)束后,點擊鼠標(biāo),不播放聲音,一方勝利后,播放勝利音樂。</p><p> 添加勝利判斷isWin,添加標(biāo)記變量GameOver。在mousePressed方法最前面加入GameOver的判斷,在mousePressed方法的最后調(diào)用isWin,返回true,則給消息提示,GamerOver設(shè)置為true。</p>
20、<p> ?、鈏sWin方法具體的編寫。在當(dāng)前下棋的橫向,縱向,兩個斜向上分別判斷是否有連續(xù)的同色五子。</p><p><b> 詳細設(shè)計與實現(xiàn)</b></p><p><b> 4.1 主窗體模塊</b></p><p><b> 功能設(shè)計</b></p><p
21、> StartChessJFrame.java包含名為StartChessJFrame的pubilc類,主要用來顯示主窗體界面,包括工具條面板,“重新開始”、“悔棋”、“退出”按鈕。菜單欄,“系統(tǒng)”菜單,“重新開始”、“悔棋”、“退出”菜單項;“幫助”菜單,“關(guān)于五子棋”、“關(guān)于作者”菜單項。以上菜單項和按鈕,均加監(jiān)聽器,實現(xiàn)對棋盤和窗口的控制。令外,鼠標(biāo)點擊“退出”按鈕或菜單項時彈出提示。</p><p&g
22、t;<b> 界面設(shè)計</b></p><p> 包括菜單欄、棋盤、工具欄。菜單欄含系統(tǒng)、幫助菜單。</p><p> 系統(tǒng)菜單包含:重新開始、悔棋、退出。幫助菜單包含:關(guān)于五子棋、關(guān)于作者。</p><p> 工具欄包含按鈕:重新開始、悔棋、退出。</p><p><b> 棋盤用于對戰(zhàn)。</
23、b></p><p> 3模塊算法(或重要代碼段);</p><p> a下面的代碼實現(xiàn)的是監(jiān)聽器,用于響應(yīng)菜單項和按鈕。</p><p> private class MyItemListener implements ActionListener {//事件監(jiān)聽器內(nèi)部類</p><p> public void action
24、Performed(ActionEvent e) {</p><p> Object obj = e.getSource(); // 取得事件源</p><p> if (obj == StartChessJFrame.this.startMenuItem || obj == startButton) { </p><p><b> // 重新開始&
25、lt;/b></p><p> // JFiveFrame.this內(nèi)部類引用外部類</p><p> System.out.println("重新開始...");</p><p> chessBoard.restartGame();</p><p> } else if (obj == exitMenuIt
26、em || obj == exitButton) {</p><p> int exit=JOptionPane.showConfirmDialog(null, "確認(rèn)退出嗎?","" , JOptionPane.YES_NO_CANCEL_OPTION );</p><p> if(exit==JOptionPane.YES_OPTION)&l
27、t;/p><p> System.exit(0); // 結(jié)束應(yīng)用程序</p><p> } else if (obj == backMenuItem || obj == backButton) { // 悔棋</p><p> System.out.println("悔棋...");</p><p> chessBo
28、ard.goback();</p><p> }else if(obj == aboutMenuItem) </p><p> {JDialog jd = new JDialog(new StartChessJFrame(),"關(guān)于五子棋");</p><p> jd.setSize(200, 200);</p><p
29、> JLabel l = new JLabel("player1 vs player2,請2 位輪流使用鼠標(biāo)來下棋吧 ");</p><p> jd.add(l, BorderLayout.NORTH);</p><p> jd.setLocation(100, 200);</p><p> jd.setSize(300,300);
30、</p><p> jd.setVisible(true);</p><p> // jd.pack();</p><p> jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);</p><p> }else if(obj == authorMenuItem) </p&g
31、t;<p> {JDialog jd = new JDialog( new StartChessJFrame(),"關(guān)于作者");</p><p> jd.setSize(200, 200);</p><p> JLabel l = new JLabel("*_*");</p><p> jd.add(l
32、, BorderLayout.NORTH);</p><p> jd.setLocation(100, 200);</p><p> jd.setSize(300, 300);</p><p> jd.setVisible(true);</p><p> // jd.pack();</p><p> jd.s
33、etDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);</p><p><b> }</b></p><p><b> }</b></p><p> b主窗體的構(gòu)造方法 </p><p> StartChessJFrame() {</p&g
34、t;<p> setTitle("單機版五子棋");//設(shè)置標(biāo)題</p><p> chessBoard = new ChessBoard();//初始化面板對象</p><p> // 創(chuàng)建和添加菜單</p><p> menuBar = new JMenuBar();//初始化菜單欄</p><p&g
35、t; sysMenu = new JMenu("系統(tǒng)");//初始化菜單</p><p> helpMenu = new JMenu("幫助");</p><p> startMenuItem = new JMenuItem("重新開始");</p><p> exitMenuItem = new
36、JMenuItem("退出");</p><p> backMenuItem = new JMenuItem("悔棋");//初始化菜單項</p><p> aboutMenuItem = new JMenuItem("關(guān)于五子棋");</p><p> authorMenuItem = new JM
37、enuItem("關(guān)于作者");</p><p> sysMenu.add(startMenuItem);</p><p> sysMenu.add(backMenuItem);</p><p> sysMenu.add(exitMenuItem);</p><p> helpMenu.add(aboutMenuI
38、tem);</p><p> helpMenu.add(authorMenuItem);</p><p> MyItemListener lis = new MyItemListener();//初始化按鈕事件監(jiān)聽器內(nèi)部類</p><p> this.startMenuItem.addActionListener(lis);//將菜單項注冊到事件監(jiān)聽器上<
39、;/p><p> backMenuItem.addActionListener(lis);</p><p> exitMenuItem.addActionListener(lis);</p><p> aboutMenuItem.addActionListener(lis);</p><p> authorMenuItem.addActi
40、onListener(lis);</p><p> menuBar.add(sysMenu);//將系統(tǒng)菜單添加到菜單欄上</p><p> menuBar.add(helpMenu);</p><p> setJMenuBar(menuBar);// 將menuBar設(shè)置為菜單欄</p><p> toolbar = new JPa
41、nel();//工具面板欄實例化</p><p> startButton = new JButton("重新開始");//三個按鈕初始化</p><p> backButton = new JButton("悔棋");</p><p> exitButton = new JButton("退出");
42、</p><p> toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));//將工具面板按鈕用FlowLayout布局</p><p> toolbar.add(startButton);//將三個按鈕添加到工具面板上</p><p> toolbar.add(backButton);</p>&l
43、t;p> toolbar.add(exitButton);</p><p> startButton.addActionListener(lis);//將三個按鈕注冊監(jiān)聽事件</p><p> backButton.addActionListener(lis);</p><p> exitButton.addActionListener(lis);&l
44、t;/p><p> add(toolbar, BorderLayout.SOUTH);//將工具面板布局到界面"南"方也就是下面</p><p> add(chessBoard);//將面板對象添加到窗體上</p><p> setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//設(shè)置界面
45、關(guān)閉事件</p><p> setSize(800,800);</p><p> pack(); // 自適應(yīng)大小</p><p> this.addWindowListener(new WindowAdapter(){</p><p> public void windowClosing(WindowEvent e) {</p
46、><p> int exit=JOptionPane.showConfirmDialog(null, "確認(rèn)退出嗎?","" , JOptionPane.YES_NO_CANCEL_OPTION );</p><p> if(exit==JOptionPane.YES_OPTION)</p><p> System.exit
47、(0);</p><p><b> }</b></p><p><b> });</b></p><p><b> 4調(diào)試與測試 </b></p><p> 測試結(jié)果的分析與討論,測試過程中遇到的主要問題及采取的解決措施。</p><p> 下
48、圖是初步完成的界面,即未調(diào)用point類和ChessBoard類時的狀況。</p><p> 4.2 棋子索引模塊</p><p> 位于Point.java</p><p><b> 1主要功能</b></p><p> 此功能對應(yīng)Point.java文件,包含名為Point的public類,主要功能是獲取棋子
49、位置,定義棋子顏色。</p><p><b> 2主要代碼</b></p><p> import java.awt.Color;</p><p> /*五子棋的棋子設(shè)計。</p><p><b> */</b></p><p> public class Poin
50、t {</p><p> private int x; // 棋盤中的x索引</p><p> private int y; // 棋盤中的y索引</p><p> private Color color;//顏色</p><p> public static final int DIAMETER = 30;//直徑</p>
51、;<p> public Point(int x, int y, Color color) {</p><p> this.x = x;</p><p> this.y = y;</p><p> this.color = color;</p><p><b> }</b></p>
52、<p> public int getX() {// 拿到棋盤中的x索引</p><p><b> return x;</b></p><p><b> }</b></p><p> public int getY() {// 拿到棋盤中的Y索引</p><p><b>
53、 return y;</b></p><p><b> }</b></p><p> public Color getColor() {//得到顏色</p><p> return color;</p><p><b> }</b></p><p>&l
54、t;b> }</b></p><p> 4.3 棋盤構(gòu)造模塊</p><p> 位于ChessBoard.java</p><p><b> 1功能設(shè)計</b></p><p> 對應(yīng)ChessBoard類的構(gòu)造方法,主要功能設(shè)置棋盤邊距,橫豎線距離、棋子大小,將坐標(biāo)轉(zhuǎn)換成棋子的索引,并添加監(jiān)
55、聽器,對棋子做相應(yīng)的處理:將坐標(biāo)轉(zhuǎn)換成索引,設(shè)置鼠標(biāo)形狀——指針型(指針在棋盤外和(x,y)坐標(biāo)已有棋子時,這時不能下棋子。),其余情況設(shè)置成手型。</p><p> 2模塊算法(或重要代碼段);</p><p><b> a 預(yù)先定義的變量</b></p><p><b> b棋盤構(gòu)造方法。</b></p&g
56、t;<p> public ChessBoard() {</p><p> setBackground(Color.ORANGE);//設(shè)置背景顏色為橘黃色</p><p> addMouseListener(this);// 添加監(jiān)聽器</p><p> addMouseMotionListener(new MouseMotionListen
57、er() { // 匿名內(nèi)部類</p><p> public void mouseDragged(MouseEvent e) {</p><p><b> }</b></p><p> public void mouseMoved(MouseEvent e) {</p><p> int x1 = (e.get
58、X() - MARGIN + GRID_SPAN / 2) / GRID_SPAN; </p><p> // 將鼠標(biāo)點擊的坐標(biāo)位置轉(zhuǎn)換成網(wǎng)格索引。</p><p> int y1 = (e.getY() - MARGIN + GRID_SPAN / 2) / GRID_SPAN;</p><p> // 游戲已經(jīng)結(jié)束,不能下</p><p
59、> // 落在棋盤外,不能下</p><p> // x,y位置已經(jīng)有棋子存在,不能下</p><p> if (x1 < 0 || x1 > ROWS || y1 < 0 || y1 > COLS || gameOver</p><p> || findChess(x1, y1))</p><p>
60、setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); // 設(shè)置成默認(rèn)形狀</p><p><b> else</b></p><p> setCursor(new Cursor(Cursor.HAND_CURSOR)); // 設(shè)置成手型</p><p><b> }</b>&
61、lt;/p><p><b> });</b></p><p><b> }</b></p><p><b> 4.4 畫棋盤模塊</b></p><p> 位于ChessBoard.java</p><p><b> 1功能設(shè)計</
62、b></p><p> 繪制棋盤,橫豎各有11條線,121個交點。底色橘黃黃色。棋盤的邊距30像素。</p><p> 繪制白棋子和黑棋子,最后下的子用紅色矩形標(biāo)記。</p><p><b> 2界面設(shè)計</b></p><p><b> 3模塊算法</b></p>&l
63、t;p><b> // 繪制</b></p><p> public void paintComponent(Graphics g) {</p><p> super.paintComponent(g);</p><p><b> // 畫棋盤</b></p><p> for (i
64、nt i = 0; i <= ROWS; i++) { // 畫橫線</p><p> g.drawLine(MARGIN, MARGIN + i * GRID_SPAN, MARGIN + COLS</p><p> * GRID_SPAN, MARGIN + i * GRID_SPAN);</p><p><b> }</b>&
65、lt;/p><p> for (int i = 0; i <= COLS; i++) {// 畫直線</p><p> g.drawLine(MARGIN + i * GRID_SPAN, MARGIN, MARGIN + i * GRID_SPAN,</p><p> MARGIN + ROWS * GRID_SPAN);</p><p
66、><b> }</b></p><p><b> // 畫棋子</b></p><p> for (int i = 0; i < chessCount; i++) {</p><p> int xPos = chessList[i].getX() * GRID_SPAN + MARGIN; // 網(wǎng)格交
67、叉點的x坐標(biāo)</p><p> int yPos = chessList[i].getY() * GRID_SPAN + MARGIN;// 網(wǎng)格交叉點的y坐標(biāo)</p><p> g.setColor(chessList[i].getColor()); // 設(shè)置顏色</p><p> g.fillOval(xPos - Point.DIAMETER / 2,
68、 yPos - Point.DIAMETER / 2,</p><p> Point.DIAMETER, Point.DIAMETER);</p><p> // 標(biāo)記最后一個棋子的紅矩形框</p><p> if (i == chessCount - 1) { // 最后一個棋子</p><p> g.setColor(Color.
69、red);</p><p> g.drawRect(xPos - Point.DIAMETER / 2,</p><p> yPos - Point.DIAMETER / 2, Point.DIAMETER,</p><p> Point.DIAMETER);</p><p><b> }</b></p&g
70、t;<p><b> }</b></p><p> 4.5 鼠標(biāo)按下模塊</p><p><b> 1 功能設(shè)計</b></p><p> 是對所下的棋子進行處理,定義MousePress方法,預(yù)先定義isBlack表示下的是黑棋還是白棋,Point Count 表示當(dāng)前棋子數(shù),添加相應(yīng)的判斷,不能畫
71、到棋盤外,下過的地方不能再下。(需要輔助方法findPiont),然后將棋子的坐標(biāo)轉(zhuǎn)換成索引,在創(chuàng)建Point對象添加到PointList中,再重新繪制,當(dāng)游戲沒結(jié)束時,落子播放聲音,當(dāng)有一方勝利時,播放勝利音樂,彈出提示窗口。</p><p><b> 2模塊算法</b></p><p> public void mousePressed(MouseEvent
72、e) {// 鼠標(biāo)按鍵在組件上按下時調(diào)用。</p><p> // 游戲已經(jīng)結(jié)束,不能下</p><p> if (gameOver)</p><p><b> return;</b></p><p> String colorName = isBlack ? "黑棋" : "白棋&
73、quot;;</p><p> xIndex = (e.getX() - MARGIN + GRID_SPAN / 2) / GRID_SPAN; // 將鼠標(biāo)點擊的坐標(biāo)位置轉(zhuǎn)換成網(wǎng)格索引。</p><p> yIndex = (e.getY() - MARGIN + GRID_SPAN / 2) / GRID_SPAN;</p><p> // 落在棋盤外,
74、不能下</p><p> if (xIndex < 0 || xIndex > ROWS || yIndex < 0 || yIndex > COLS)</p><p><b> return;</b></p><p> // x,y位置已經(jīng)有棋子存在,不能下</p><p> if (f
75、indChess(xIndex, yIndex))</p><p><b> return;</b></p><p> Point ch = new Point(xIndex, yIndex, isBlack ? Color.black: Color.white);</p><p> chessList[chessCount++] = c
76、h;</p><p> repaint(); // 通知系統(tǒng)重新繪制</p><p> if(isWin()==false){ //播放落子音</p><p> musicFile=new File("qi.wav");</p><p> uri=musicFile.toURI();</p><
77、;p> try{ url=uri.toURL();}</p><p> catch(Exception exp){}</p><p> AudioClip clip=Applet.newAudioClip(url);</p><p> clip.play ();</p><p><b> } </b>&
78、lt;/p><p> if (isWin()) { //播放勝利音樂</p><p> musicFile=new File("win.wav");</p><p> uri=musicFile.toURI();</p><p> try{ url=uri.toURL();}</p><p>
79、 catch(Exception exp){}</p><p> AudioClip clip1=Applet.newAudioClip(url);</p><p> clip1.play ();</p><p> // 給出勝利信息,不能再繼續(xù)下棋</p><p> String msg = String.format("
80、恭喜,%s贏了!", colorName);</p><p> JOptionPane.showMessageDialog(this, msg);</p><p> gameOver = true;</p><p><b> }</b></p><p> isBlack = !isBlack;<
81、;/p><p><b> }</b></p><p> 4.6 判斷勝利算法模塊</p><p> 位于ChessBoard.java</p><p><b> 1 功能設(shè)計</b></p><p> 判斷黑子或白子勝利。對應(yīng)方法private boolean isWi
82、n()。</p><p><b> 2模塊算法</b></p><p> 大致算法介紹,要判斷那方勝利,,應(yīng)以棋盤上最后的棋子為中心,依次個方向上尋找棋子———東西方向、南北方向、東南西北、東北西南,只要一個啊放蕩向上同色棋子大于等于5個,該色棋子就勝利。</p><p> 下面是橫向查找的算法,其他3個方向的查找方法與此類似</p
83、><p> int continueCount = 1; // 連續(xù)棋子的個數(shù)</p><p><b> // 橫向向西尋找</b></p><p> for (int x = xIndex - 1; x >= 0; x--) {</p><p> Color c = isBlack ? Color.black
84、 : Color.white;</p><p> if (getChess(x, yIndex, c) != null) {</p><p> continueCount++;</p><p><b> } else</b></p><p><b> break;</b></p>
85、<p><b> }</b></p><p><b> // 橫向向東尋找</b></p><p> for (int x = xIndex + 1; x <= ROWS; x++) {</p><p> Color c = isBlack ? Color.black : Color.white
86、;</p><p> if (getChess(x, yIndex, c) != null) {</p><p> continueCount++;</p><p><b> } else</b></p><p><b> break;</b></p><p><
87、;b> }</b></p><p> if (continueCount >= 5) {</p><p> return true;</p><p><b> } else</b></p><p> continueCount = 1;</p><p> 4.7
88、 重新開始和悔棋算法模塊</p><p> 位于ChessBoard.java</p><p><b> 1 功能設(shè)計</b></p><p> 提供重新開始和悔棋功能</p><p><b> 2模塊算法</b></p><p> public void rest
89、artGame() {</p><p><b> // 清除棋子</b></p><p> for (int i = 0; i < chessList.length; i++)</p><p> chessList[i] = null;</p><p> // 恢復(fù)游戲相關(guān)的變量值</p>&
90、lt;p> isBlack = true;</p><p> gameOver = false;// 游戲是否結(jié)束</p><p> chessCount = 0; // 當(dāng)前棋盤的棋子個數(shù)</p><p> repaint();</p><p><b> }</b></p><p&g
91、t;<b> // 悔棋</b></p><p> public void goback() {</p><p> if (chessCount == 0)</p><p><b> return;</b></p><p> chessList[chessCount - 1] = null
92、;</p><p> chessCount--;</p><p> if (chessCount > 0) {</p><p> xIndex = chessList[chessCount - 1].getX();</p><p> yIndex = chessList[chessCount - 1].getY();</p
93、><p><b> }</b></p><p> isBlack = !isBlack;</p><p> repaint();</p><p><b> }</b></p><p> // Dimension: 矩形</p><p> pub
94、lic Dimension getPreferredSize() {</p><p> return new Dimension(MARGIN * 2 + GRID_SPAN * COLS, MARGIN * 2</p><p> + GRID_SPAN * ROWS);</p><p><b> }</b></p><
95、;p><b> 小結(jié)和展望</b></p><p> 小結(jié):五子棋雖然是一個簡單的游戲,但用程序?qū)崿F(xiàn)起來也不是那么容易的。不過</p><p> 通過寫這個程序,加深了圖形界面程序的設(shè)計,對監(jiān)聽器的使用,更加熟悉個程一</p><p> 共有三個java文件,但chessboard和point其主要作用,也可以說是整個程枝干<
96、;/p><p> 枝干。個人認(rèn)為設(shè)計chessboard.java是這3個java文件中最難的,包括繪制棋盤</p><p> 棋子、鼠標(biāo)的形狀、設(shè)置監(jiān)聽器。但編寫判斷輸贏的方法雖然難,但很有趣。開始</p><p> 認(rèn)為以最后一個棋子為基點,分別向8 個方向?qū)ふ?,但后來想到作為基點的棋子,</p><p> 不一定在五個連續(xù)棋子的頭或
97、尾,改成了現(xiàn)在的算法,其實,前一個算法只是一個</p><p> 雛形考慮到的情況并不全面,但是很有益處,在它的基礎(chǔ)上完成了現(xiàn)在的算法。在</p><p> 程序的主要功能實現(xiàn)之后,添加了落子聲音和勝利聲音,落子聲音添加了游戲結(jié)束</p><p> 的判斷,當(dāng)有一方勝利后,鼠標(biāo)不能下棋子,同時不播放聲音。只有游戲沒結(jié)束時</p><p>
98、; ,才可以落子并播放聲音。勝利音樂是和窗口彈出是一起的。</p><p><b> 程序不足</b></p><p> 由于和棋的概率極小,故程序并沒有編寫判斷和棋的方法,若有五子棋高手能夠</p><p> 和棋,那恭喜了,就點“重新開始”按鈕重新開局吧。</p><p><b> 總結(jié)</
99、b></p><p> 除去不足,這個程序還是很有趣味性的,無論從程序設(shè)計還是游戲本身。</p><p><b> 參 考 文 獻</b></p><p> [1] Java基礎(chǔ)與案例開發(fā)詳解 清華大學(xué)出版社</p><p><b> 附 錄</b></p><
100、p><b> 使用說明書</b></p><p> 使用java開發(fā)工具(eclipse或其他)運行StartChessJFrame.java.</p><p><b> 源程序清單</b></p><p> 包含三個java文件,StartChessJFrame .java、Point .java、 Che
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計報告-五子棋
- java五子棋課程設(shè)計
- java課程設(shè)計--五子棋
- 五子棋java課程設(shè)計
- 五子棋java課程設(shè)計
- 五子棋java語言課程設(shè)計報告
- java課程設(shè)計--五子棋游戲
- java課程設(shè)計--對戰(zhàn)五子棋
- java課程設(shè)計報告---java 五子棋游戲設(shè)計
- java課程設(shè)計-五子棋游戲
- 五子棋-課程設(shè)計報告
- java課程設(shè)計--人機對弈五子棋
- 五子棋課程設(shè)計
- java五子棋實習(xí)報告
- java課程設(shè)計五子棋(附源代碼)
- java_五子棋小游戲課程設(shè)計
- 五子棋游戲課程設(shè)計報告
- 五子棋畢業(yè)課程設(shè)計報告
- c++五子棋課程設(shè)計報告
- 面向?qū)ο蟪绦蛟O(shè)計---五子棋-java課程設(shè)計
評論
0/150
提交評論