1. 程式人生 > >java課程設計五子棋小遊戲(1)

java課程設計五子棋小遊戲(1)

1. 前言

該專案為經典版本的五子棋遊戲和自創的毀滅玩法所結合,總體而言是一個休閒的小遊戲。其中的規則不難,主要是為了豐富大家的文娛生活,讓大家在忙碌的學習課後可以輕鬆一小下。這就是本程式的編寫初衷。眾所周知,經典版本的五子棋不過就是判斷5連和5連以上的勝負,而這裡的毀滅版,可以“毀滅”對方的4連狀態,從而達到己方的攻擊 ,而使己方達到勝利。而對方亦可以運用這種方法獲得勝利。

首先,我們需要了解該程式是怎麼編寫的,需要用到哪些工具,用到哪些知識和方法。以及是如何運用該方法。

1:瞭解五子棋的執行機制。

2:瞭解博弈的對戰機制,如:怎麼獲得勝利,判斷勝利的條件。

3:遊戲主介面的構造,以及模型的建立。

4:各種功能如何實現,各個部分怎麼構成一個整體。

5:事件的處理。

6:如何生成棋盤,以及如何生成棋子。

7:對計時工具的設計,如何運用到多執行緒來解決。

對我要實現的相應功能,用一個框架圖可以來概述該程式各個部分的相依關係,以及各個功能是如何實現。如何將這些功能整合成為一個遊戲

 

通過該流程圖,我們可以看出,要完成一個五子棋遊戲。必須有兩大類,主介面類和相關的事件處理類,而主介面類包括選單介面的佈局、五子棋盤的生成、棋子的生成、和各種訊息框的提示。對於事件處理類,我們要監聽各種按鈕,分別實現他們相應的功能。例如開始按鈕,當點選開始按鈕後應該進入執棋的階段,在執棋的過程中又要在棋盤中生成新棋子,與主介面的棋盤相聯絡。還有點選遊戲設定按鈕,應該給於相應的使用者提示,需要輸入什麼資訊來設定遊戲。在這裡,遊戲設定按鈕主要是為了設定遊戲的限行時間,由此增加遊戲的難度。悔棋按鈕不用多說,毀滅按鈕是基於悔棋按鈕的設計之上的一個按鈕。可以毀掉對方的棋子。‘

然而我認為在編寫程式碼中最關鍵的部分有三點,一是如何生成棋盤,二是如何生成棋子,三是如何對勝負進行判斷。只要抓住這三個大點,這個遊戲就算是成功了一大半,下面對該遊戲的框架進行詳細設計。

需要用到的重要知識:

1:mouselistener()

功能:監聽滑鼠相關狀態.

mouseClicked(MouseEvente) 滑鼠按鍵在元件上單擊(按下並釋放)時呼叫。

mouseEntered(MouseEvente) 滑鼠進入到元件上時呼叫

mousePressed(MouseEvente)  滑鼠按下時呼叫

e.getX();獲取滑鼠當前按下的位置的X座標;

e.getY();獲取滑鼠當前按下的位置的Y座標;

在設定佈局時通常要用到這兩個函式輔助找到相應的座標。

這些是對滑鼠的監控實現的功能,需要在視窗中新增addMouseListener()方法;

2:Graphics 類

是所有圖形的抽象基類,允許程式在元件上影象上進行繪製

功能:覆寫JFrame 的paint()方法來使用,通過repaint()來呼叫

主要方法:drawstring();使用此圖形上下文的當前字型和顏色繪製由指定 string 給定的文字。

setFont();設定字型的屬性。

setColor();設定顏色。

drawOval();畫圓,用於畫棋盤的棋子,drawoval是空心的圓形邊框

fillOval();畫圖,用於畫棋盤的棋子,fillOvail是實心的圓

drawRect();繪製指定矩形的邊框。

fillRect();繪製指定實心矩形

drawImage();繪製指定影象中當前可用的影象。

3:frame類()

功能:實現主介面的佈局

主要方法:主類繼承自Jframe,在主類的建構函式中實現佈局的設定。

setIconImage(Imageimage);設定窗體的圖示,從檔案filename中獲得圖示。

setTitle(Stringsting);設定標題為字串string;

setDefaultCloseOperation();設定關閉窗體的操作

setResizable(Booleann);設定窗體是否為大小可以改變。

setLayout();設定窗體的佈局

setBounds(intx,int y,int width,int height)設定控制元件的邊界以及座標

setEditable()設定文字框是否可輸入。

4: JOptionPane

方法名

描述

showConfirmDialog

詢問確認問題,回答 是/否/取消

sowInputDialog

要求使用者輸入資料

showMessageDialog

告知使用者發生的訊息

showOptionDiaog

綜合以上三個方法

5:Thread類;

功能:實現多執行緒,計時器的主要實現方法。

主要方法:主類實現Runnable介面,重寫Thread類的run方法。

Threadt1 = new Thread(this);

實現主類執行緒的建立

t1.start();啟動執行緒,執行run方法;

t1.sleep(time);使執行緒休眠time 毫秒。

t1.stop();使執行緒停止執行.

需要實現的功能:

1:點選開始遊戲時在介面上有黑子或白子先行的提示,然後玩家開始行棋。

2:點選遊戲設定時提示相應輸入限制時間的資訊,讓玩家設定限定時間。

3:點選悔棋時給玩家一次悔棋機會。

4:點選毀滅時對方玩家棋子變成己方顏色,並且變成方形。

5:幫助,給出相關資訊提示幫助。

就三大關鍵給出解決—》

1:如何生成棋盤

首先在主類中定義一個二維陣列,int cb[][] = new int[15][15];

我將它命名為cb,英文名全寫是chessboard.它的長度為15行15列,在這裡可以對棋盤進行相關的數值儲存。然後,在paint()繪圖方法中,定義一個圖片檔案,BufferedImage image =null並且初始化,然後運用IO呼叫本地的圖片。在這裡我是自制了一張圖片用來作為該遊戲的背景,直接在paint()中讀取背景檔案,g.drawImage(0,0,this)直接繪畫在視窗上。

2:如何生成棋子

在1中我們已經定義好了一個二維陣列,往二維陣列中儲存資料就是生成棋子的步驟。用1表示黑子,2表示白子,3表示白色方子,4表示黑色方子。當我需要在棋盤的某一點上落子時,獲取該點的座標,轉化成相應的二維陣列,cb[x][y]=1;

就是在該落點上下黑子,同理cb[x][y]=2就是白子。此時棋子以及生成完成。作為資料的狀態儲存在二維陣列中,方便於勝負的判斷。

3:如何判斷輸贏。

在2中我們已經生成好了棋子,並且將棋子的位置存貯在棋盤當中,只需要對二維陣列進行判斷就能得出勝負。此時打印出的二維陣列應該是這樣

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 2 0 0 0 0 0 0 0 0 0

0 0 0 0 2 0 0 0 1 0 0 0 0 0 0

0 2 0 0 0 0 0 0 1 0 0 0 0 0 0

0 0 0 0 0 0 2 0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 1 1 0 0 0 0 0 0

0 0 0 0 2 0 0 0 1 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

判斷輸贏就變得容易,只需要判斷二維陣列中相關資料相鄰5次的情況。運用isWin()函式判斷橫向縱向左上左下右上右下的資料情況,下面有相關方法的具體程式碼展示。.

4:如何給遊戲設計計時

首先,我們需要給設定時間的按鈕繫結監控。在按下按鈕後要求使用者輸入限制的時間,進行相應的操作。當用戶輸入時間大於0時,啟動啟動執行緒,執行時間的遞減。

簡而言之,就是當黑方行棋時,計時器開始執行逐步遞減,當白方行棋時,黑方的時間停止遞減,輪到白方的時間遞減。當時間用盡時,遊戲就結束了。