• 沒有找到結果。

結論與未來展望

在文檔中 通用棋譜編製系統之研究 (頁 59-66)

本篇論文研究市面上的棋譜編輯系統,並根據本實驗室所提出的 POT 通用遊戲模組理論與 GAML 通用棋譜格式,開發出通用棋譜編輯 系統開發平台。

目前我們的通用棋譜編輯系統開發平台,能夠支援編輯遊戲的初 始棋盤、棋步、標記、分支、註解及棋局相關資訊等功能。在瀏覽方 面,我們提供完整的棋譜列表,讓使用者自由點選欲觀看的棋步。另 外在工具列中也提供按鈕,讓使用者可以跳至第一步、上一分支點、

上一步、下一步、下一分支點及最後一步。

透過我們的平台所開發的棋譜編輯系統,能夠享有快速開發、程 式碼更少、維護更容易的優點。同時透過平台提供的機制,能讓遊戲 保有本身的特性,與附加自己獨特的功能。

在未來的發展上,可以考慮支援更多種類的棋譜格式,或是擴充 如棋盤的翻轉,棋盤棋子圖檔的替換等圖形使用者介面功能。另外,

可以設計更多的附加機制或是遊戲自由設定項目,讓遊戲在開發時能 夠保有更多的彈性與擴充空間,同時又能享受到透過平台開發的好 處。

參考文獻

[1] Brian Burns, The Encyclopedia of Games, MetroBooks, October 2000.

[2] 徐健智, “A General Development Platform for Play-on-table Game Over Internet”, 交通大學資訊工程系, 碩士論文, June 1999.

[3] I-Chen Wu, “Platform for Artificial Intelligence Game Tournament”, invited talk at International Computer Symposium, December 2002, Hualien, Taiwan, R.O.C.

[4] 胡小奇, “圍棋助手”, available from http://www.go-assistant.com/english/, 2004.

[5] 黃暉, “WinMGT”, available from http://waterfire.us/go/winmgt.htm, 2003.

[6] 天元科技, “Go2000”, available from http://sanppy.bizland.com/.

[7] “MultiGo”, available from http://www.ruijiang.com/multigo/chs/, 2004.

[8] Frank Arkbo, Uppsala , “Renju Library program”, available from http://www.renju.nu/renlib/, 2004.

[9] “GoRenjer”, available from

http://www.gonnta.ne.jp/~itty/GoRenjer-en.html, 2002.

[10] 董世偉, “象棋演播室”, available from

http://www.qipaile.net/xqstudio/index.htm, 2002.

[11] “象棋橋”, available from http://www.ccbridge.net/, 2001.

[12] Arno Hollosi, “Smart Game Format”, available from http://www.red-bean.com/sgf/, 2001.

[13] Judea Pearl, Heuristics/Intelligent Search Strategies for Computer Problem Solving, Addison-Wesley, 1984.

[14] W3C, “Extensible Markup Language”, available from http://www.w3c.org/XML/.

[15] Sun Microsystems, “Java 2 SDK”, available from http://java.sun.com/j2se/1.4.2/index.jsp, 2003.

[16] W3C, “Document Object Model”, available from http://www.w3.org/DOM/.

[17] 吳清源, 吳仁譯, 吳清源名局細解(4), 台灣世界文物出版社, 1986.

[18] Martin Fowler, Kendall Scott, UML distilled :a brief guide to the standard object modeling language, 2nd Edition, Addison-Wesley, December 2001.

[19] Robert Eckstein, Marc Loy, Dave Wood, Java Swing, 2nd Edition, O’REILLY, February 2003.

[20] David Flanagan, Java Examples In A Nutshell, 2nd Edition, O’REILLY, May 2002.

附錄一

以下是使用我們的通用棋譜編輯系統開發平台,來開發五子棋棋 譜編輯系統的完整程式碼和 Property 檔案內容。

‹ 程式部分:

package Five;

import javax.swing.*;

import Gamlib.lib.*;

import Gamlib.GameBase;

import java.util.*;

public class Five extends GameBase{

public static final int BLACK = 0;

public static final int WHITE = 1;

private static int[] piece_id = {BLACK,WHITE};

private static int[] piece_count = {300,300};

Vector nextPlys;

public void init(){

nextPlys = null;

}

//設定棋子代碼

public int[] getPiece_IDs(){

return piece_id;

}

//設定棋子數量

public int[] getPiece_count(){

return piece_count;

}

//設定遊戲資訊輸入對話框

public JPanel getSettingPanel(){

return new FiveSettingPanel(this);

}

//檢查擺譜後的棋盤

public boolean checkLegalBoard() { return true;

}

//repaint 時需要更新的資料寫在這裡 public void refresh(){

clearHighLight();

nextPlys = super.getNextPlys();

for (int i = 0; i < nextPlys.size(); i++){

PlyNode ply = (PlyNode)nextPlys.elementAt(i);

MoveNode move = ply.getMoveNodeAt(0);

for (int j = 0; j < ply.getMoveCount(); j++){

move = ply.getMoveNodeAt(j);

if (move.getMoveType() == MoveNode.PLACE) break;

}

int x = move.getDestPosition_X();

int y = move.getDestPosition_Y();

super.setHighLight(x,y,1);

} }

//設定棋譜列表中的棋步文字

public String getStepString(PlyNode ply){

MoveNode place = ply.getMoveNodeAt(0);

for (int i = 0; i < ply.getMoveCount(); i++){

place = ply.getMoveNodeAt(i);

if (place.getMoveType() == MoveNode.PLACE) break;

}

if (place.getPieceID() == BLACK)

return "● " + POS.charAt(place.getDestPosition_X())+" "

+ place.getDestPosition_Y();

return "○ "+POS.charAt(place.getDestPosition_X())+" "

+ place.getDestPosition_Y();

}

public void mouseClick(int x,int y, int mouse_key) { if (mouse_key == Game.MOUSE_KEY_RIGHT){

return;  //使用滑鼠右鍵無作用 }

//瀏覽模式

if ((getMode() == Game.ViewMode)&& (nextPlys != null)){

for (int i = 0; i < nextPlys.size(); i++){ && (y == move.getDestPosition_Y())) super.gotoPlyNode(ply);

} }

//下子模式

else if (super.getMode() == Game.PlyMode){

//已經有子的位置不能點選

if (getPieceID(x,y) != Piece.EMPTY) return;

PlyNode ply = new PlyNode();

if ((getCurrentPlyNo()%2) == 0){

ply.addMoveNode(MoveNode.newPlacePieceMoveNode (x,y,BLACK,false));

}

else{

ply.addMoveNode(MoveNode.newPlacePieceMoveNode (x,y,WHITE,false));

}

this.addPly(ply,PlyNode.LEGAL);

}

//標記模式

else if (super.getMode() == Game.MarkMode){

int tar_id = getPieceID(x,y);

int index = getCurrentMarkMenuIndex();

if (tar_id == BLACK) index = 2*index;

else

index = 2*index + 1;

super.addMark(x,y,index);

} } }

//重建棋步

public PlyNode buildFullPly(PlyNode originPly) { return originPly;

}

‹ Property 部分:

#遊戲名稱

GAME_NAME = Five

#棋盤大小

EDITER_BOARD_WIDTH = 15 EDITER_BOARD_HEIGHT = 15

#Board Panel 大小

EDITER_BOARD_PANEL_WIDTH = 500 EDITER_BOARD_PANEL_HEIGHT = 530

#棋子位置調整與棋盤格大小調整 EDITER_BOARD_OFFSET_X = 20 EDITER_BOARD_OFFSET_Y = 20 EDITER_PIECE_OFFSET_X = 0 EDITER_PIECE_OFFSET_Y = 0 EDITER_GRID_OFFSET_X = 8 EDITER_GRID_OFFSET_Y = 7 EDITER_GRID_SIZE_X = 30 EDITER_GRID_SIZE_Y = 30

#棋盤與棋子圖檔

EDITER_IMG_BOARD = table.gif EDITER_IMG_PIECE = pieces.gif EDITER_CUT_PIECE = 2

#標記相關設定

EDITER_MARK_SYMBOL = ○|●|△|▲|□|■

EDITER_IMG_MARK = marks.gif EDITER_CUT_MARK = 6

EDITER_MARK_MENU_TOTAL = 3

EDITER_MARK_MENU_0 = 添加圓形標記 EDITER_MARK_MENU_1 = 添加三角形標記 EDITER_MARK_MENU_2 = 添加正方形標記 EDITER_MARK_BUTTON_0 = ○

EDITER_MARK_BUTTON_1 = △ EDITER_MARK_BUTTON_2 = □

#手順使用的顏色

EDITER_PIECE_PLY_COLOR = FFFFFF|000000

#手順數字的大小

EDITER_PIECE_PLY_FONT_SIZE = 14

#手順數字的位置

EDITER_PIECE_PLY_OFFSETX_0 = 10 EDITER_PIECE_PLY_OFFSETY_0 = 17 EDITER_PIECE_PLY_OFFSETX_1 = 7 EDITER_PIECE_PLY_OFFSETY_1 = 17 EDITER_PIECE_PLY_OFFSETX_2 = 4 EDITER_PIECE_PLY_OFFSETY_2 = 17

#提示圖案相關設定

EDITER_IMG_HIGH_LIGHT = highLight.gif EDITER_CUT_HIGH_LIGHT = 3

EDITER_IMG_INDEX_CURSOR = 0 EDITER_IMG_INDEX_CLICK = 1 EDITER_IMG_INDEX_SRC = 2 EDITER_IMG_INDEX_DES = 2

在文檔中 通用棋譜編製系統之研究 (頁 59-66)

相關文件