實驗題目:五子棋
Github地址:https://github.com/zhangmin131/text/blob/master/FiveChessAppletDemoji
結對人部落格園連結:http://www.cnblogs.com/xuweizheng/
一.題目簡介
本次程式碼實現的是五子棋小遊戲,下棋時每次在適當位置點選滑鼠的時候就在所點選的位置上出現你這個角色的顏色的棋子,然後計算機會用另一個顏色的棋子自動的下棋,計算機自動下棋要有一個控制變數來控制能不能下棋。人可以隨意的下,可是計算機就要計算在哪個位置下了。這裡由計算機下子的演算法來確定,人人對戰的話就不象單機遊戲一樣,要計算機來判斷人下子之後計算機下那一個地方了,人人對戰只要在雙方下子的時候判斷贏棋情況,當然還要同步的控制兩個人下棋的順序,這樣的話就要用到執行緒了,各自都繼承或實現執行緒類或介面,以便各自能隨時單獨控制接發訊息。
二.結對分工及過程
姓 名 |
學號 |
承 擔 的 任 務 |
張敏 |
2013030140001 |
對弈規則的實現,人機對弈,人人對弈,對程式碼的最終測試 |
徐偉正 |
201303014014 |
棋盤介面設計棋盤顏色模式的設計,選單選項的設計, |
(1) ChessFrame主要功能
建立五子棋遊戲主窗體和選單。建立五子棋介面的遊戲、檢視及檢視模式等一系列選單
public ChessFrame() {
this.setTitle("五子棋遊戲");
cm=new ChessModel(1);
mp=new MainPanel(cm);
Container con=this.getContentPane();
con.add(mp,"Center");
this.setResizable(false);
this.addWindowListener(new ChessWindowEvent());
MapSize(20,15);
JMenuBar mbar = new JMenuBar();
this.setJMenuBar(mbar);
JMenu gameMenu = new JMenu("遊戲");
mbar.add(makeMenu(gameMenu, new Object[] {
"開局", "棋盤","模式", null, "退出"
}, this));
JMenu lookMenu =new JMenu("檢視");
mbar.add(makeMenu(lookMenu,new Object[] {
"灰白色","藍灰色","金屬黃"
},this));
JMenu helpMenu = new JMenu("幫助");
mbar.add(makeMenu(helpMenu, new Object[] {
"關於"
}, this));
}
(2)類chessmodel
功能: 實現了整個程式演算法的核心,例如通過對棋子的八個方向進行判斷,以及計算機走棋方向等
class ChessModel {
//棋盤的寬度、高度、棋盤的模式(如20×15)
private int width,height,modeChess;
//棋盤方格的橫向、縱向座標
private int x=0,y=0;
//棋盤方格的橫向、縱向座標所對應的棋子顏色,
//陣列arrMapShow只有3個值:1,2,3,-5,
//其中1代表該棋盤方格上下的棋子為黑子,
//2代表該棋盤方格上下的棋子為白子,
//3代表為該棋盤方格上沒有棋子,
//-5代表該棋盤方格不能夠下棋子
private int[][] arrMapShow;
//交換棋手的標識,棋盤方格上是否有棋子的識別符號
private boolean IsOdd,isExist;
public ChessModel() {}
//該構造方法根據不同的棋盤模式(modeChess)來構建對應大小的棋盤
public ChessModel(int modeChess){
this.IsOdd=true;
if(modeChess == 1){
PanelInit(20, 15, modeChess);
}
if(modeChess == 2){
PanelInit(30, 20, modeChess);
}
if(modeChess == 3){
PanelInit(40, 30, modeChess);
}
}
(3)類MainPanel
功能:
1、構建一個皮膚,在該皮膚上畫上棋盤;
2、處理在該棋盤上的滑鼠事件(如滑鼠左鍵點選、滑鼠右鍵點選、滑鼠拖動等)
class MainPanel extends JPanel
implements MouseListener,MouseMotionListener{
private int width,height;//棋盤的寬度和高度
private ChessModel cm;
//根據棋盤模式設定皮膚的大小
MainPanel(ChessModel mm){
cm=mm;
width=cm.getWidth();
height=cm.getHeight();
addMouseListener(this);
}
//根據棋盤模式設定棋盤的寬度和高度
public void setModel(ChessModel mm){
cm = mm;
width = cm.getWidth();
height = cm.getHeight();
}
(4)類ChessWindowEvent
主要針對該程式的視窗事件
class ChessWindowEvent extends WindowAdapter{
public void windowClosing(WindowEvent e){
System.exit(0);
}
ChessWindowEvent()
{
}
}
四.測試情況
主介面進入方式及介面截圖
執行程式即可進入主介面
(1)遊戲選單
包括遊戲、檢視、幫助三個選單。通過遊戲選單下的棋盤子選單可以選擇棋盤的大小,有三種選擇。
通過此選單可以選擇對弈模式,分別有人機對弈和人人對弈。
(2)檢視選單
分別由三種不同的顏色的棋盤,可以根據自己的喜好進行選擇,灰白色為預設棋盤顏色。
(3)幫助選單
開始遊戲:(在此選擇人機對弈)
先達到五子連珠的即是贏家,可以自己動腦進行遊戲。
白棋代表計算機,黑棋先開始走,此圖為計算機先達到了在同一個方向上五個白棋
所以玩家輸了
此圖為玩家贏先達到五子連珠的即是贏家,可以自己動腦進行遊戲。
(4)測試情況
第一次測試沒有成功,經檢查後程式碼出錯。
測試成功後
六、實驗總結
通過本課程設計,跟結對人藉助網路並結合自己的專業知識編譯一個小程式,雖說在設計的過程中遇到了很多錯誤,但也通過跟結對夥伴互相商量討論得到了解決,並且兩人的基礎知識都得到了提高,使知識運用的更熟練,並能學以致用。從中把程式的語法編譯規則弄的也更清楚,使用Eclipse 也更加的得心應手,而且也大大的提高了工作效率。總而言之,我明白了,即使過程是坎坷的,只要耐下心來,總能成功的。