• 沒有找到結果。

PGN西洋棋的Palm IR應用

N/A
N/A
Protected

Academic year: 2021

Share "PGN西洋棋的Palm IR應用"

Copied!
60
0
0

加載中.... (立即查看全文)

全文

(1)

甲 大 學

資 訊 工 程 學 系 專 題 報 告

PGN西洋棋的Palm IR應用

生:

尚 儒 (四丙)

彥 廷 (四丙)

: 劉 振 緒

中華民國九十一年十一月

(2)

目錄

圖表目錄...2 摘要...5 第一章 導論………...6 第二章 開發環境………...8 第三章 Palm 程式設計……….…...11 3-0 程式大概………....11 3-1 繪圖………...…...13 3-2 規則檢查與棋盤移動………...17 3-3 記錄資料………...……...21 3-4 紅外線介面………..……...23 第四章 在 PC 端的轉換程式………...27 第五章 遭遇到的困難………..…...33 第六章 心得………..………...38 參考資料………...……...41 附錄 PGN 表示法………...42 附錄 PDB 檔案結構………...48 附錄 操作手冊………..…...53

(3)

圖表目錄

表2-1 開發環境………..9 表3-0-1 事件處理順序……….11 表3-0-2 事件迴圈……….11 表3-0-3 程式使用架構………13 圖3-1-1 繪圖(移動前)……….…….14 圖3-1-2 繪圖(將需要的部分塗消)………..15 圖3-1-3 繪圖(將新的圖形畫上)………..15 圖3-1-4 繪圖(選擇棋子)………..16 圖3-1-5 繪圖(反轉棋盤)………..16 表3-1-4 繪圖……….16 圖3-2-1 基本移動檢查……….18 圖3-2-2 移動後的合法性檢查……….18 圖3-2-3 吃過路兵檢查(1) ………...19 圖3-2-4 吃過路兵檢查(2) ………...19 圖3-2-5 城堡護主檢查(1) ………...19 圖3-2-6 城堡護主檢查(2) ………...20 表3-2-5 規則檢查與棋盤移動………20 表3-3-1 palm 記憶體的儲存方式………22 表3-3-2 palm 資料庫的儲存動作………22 表3-3-3 palm 資料的儲存格式………22

(4)

圖3-4-1 第一次連線………24 圖3-4-2 處理同步資訊………25 圖3-4-3 單一棋步的移動………26 表3-4-1 通訊資料格式……….26 圖4-1 PDB 檔………...27 圖4-2 棋盤(程式) ………28 圖4-3 棋盤(PGN) ………28 圖4-4 轉換………29 圖4-5 轉換(分辨) ………29 圖4-6 將 pdb 檔轉成 PGN 文字檔………30 圖4-7 輸入………30 圖4-8 轉換過程………31 圖4-9 轉換出來的檔案………31 圖4-10 轉出來的 PGN 檔……….32 圖4-11 在支援 PGN 的程式上能讀入(以 ChessLight 為例) …………..32 圖5-1 emChat 測試圖(1) ……….34

表5-1 IrDA 通訊標準 IrDA Data Protocols……….34

表5-2 IrDA DATA-Hardware/Protocol Stacks………35

表5-3 IrDA 控制操作 Optional IrDA Data Protocols………..35

圖5-2 IrTest(discover) ……….36

(5)

圖5-4 IrTest(傳送資料) ………..37 圖5-5 IrTest(斷線) ………..37 圖A-1 palm 桌面………..53 圖A-2 進入西洋棋畫面………..53 圖A-3 訊息-換棋………54 圖A-4 選單-Start……….56 圖A-5 選單-Start-Save………56 圖A-6 選單-Edit………..57

(6)

摘要

近年來數位科技的進步使我們生活習慣有了重大的改變,個人電 腦計算能力的增強讓電腦不再只是幫人處理重複不變的瑣事,而漸漸 的開始取代其他的家電,開始可能出現在客廳中,網際網路的快速發 展讓許多的企業開始拓建網路虛擬窗口為客戶提供服務以爭取客 源,手機市場迅速蓬勃的發展已經到了可以說是人手一機的程度,這 些都是改變,雖然PDA 還不是人手一機的普及,但是從 PDA 技術的 成熟可以預見將取代傳統的行事曆、個人名片、通訊錄的功能。這是 種不可避免的趨勢,本專題開發了一個在PDA 上的下棋程式,讓 PDA 的使用者可以在PDA 上下棋。 這個系統提供了幾個功能: 1. 西洋棋基本的下棋 檢查下棋規則的正確性,確保沒有違反規則。 2. 紀錄存檔 讓玩家隨時能中斷,隨時能繼續遊戲。 3. 透過紅外線連線 紅外線是PDA 上的標準裝置,理所當然的能用紅外線進行連 線。 4. PGN 標準的轉換 PGN 是一種標準格式,利用 PGN 能讓你的棋譜在其他程式上 撥放。

(7)

第一章 導論

近年來,PDA 也就是所謂的數位個人助理的風行,使得社會上多

了一些新族群,由於PDA 的 size 小,泛用度廣,且功能多,用電省,

續航力強,剛好填補了Notebook 無法觸及的領域,PDA 又分 Palm OS

跟Windows CE 兩種系統而又因為 Palm 的設計較為簡單,所以我們 選擇以Palm OS 來設計開發。 Palm 的一般功能就是取代傳統的名片簿、行事曆、所以擁有 palm 的使用者,在PDA 上面都是一堆行事曆,名片管理, PDA 的能力 當然不只如此,也要有一些娛樂的服務。而下棋是最能修身養性的 了,下棋也最不會膩,西洋棋又是世界有名的棋,我們就選它為藍本, 設計一個下棋的程式。 我們的程式包含了幾個特點: 一、 下棋的存檔、讀檔:讓遊戲能隨時的中斷,如果沒有下完的 殘局,還可以記錄起來,改天有時間在下。 二、 棋路的瀏覽:在遊戲的過程中,隨時能瀏覽目前的棋路。觀 看別人下的棋,思考為什麼要下這步棋,可以磨練自己下棋 的技巧,我們讓使用者可以以我們的程式來撥放網路上下載 的棋譜,方便使用者在任何地方都可以悠閒的拿著palm,看 著名的大師對弈,別有一番滋味。 三、 規則的檢查:能檢查移動的規則,不正確的棋路〈刻意造成 的死棋〉。

(8)

四、 紅外線的連線:既然要更進一步確實自己是否已經進步,隨 時可以找身邊有Palm的人,利用Ir的連線互相對弈。 五、 將紀錄轉成PGN格式:PGN是一個標準的格式,能描述一場 棋的過程。我們有附上一個簡單的程式,能在PC上將我們的 紀錄檔轉成PGN語法。PGN是一種標準的純ASCII語法,透過 這個標準能在不同的程式之間交換資料。

(9)

第二章 開發環境

程式採用的開發工具,是CodeWarrior for Palm OS Platform 7.0, Code Warrior 是目前 Palm OS 程式開發領域中最為成熟的一個開發環

境。它是由Metrowerks 公司所開發出來的一套整合式軟體開發環境

(IDE);各有 Windows 及 Macintosh 兩種不同的版本。使用 C/C++ 程式語言來進行程式開發的工作,這套工具是屬於整合式的視窗環境

介面,在開發的過程中,利用單步執行的功能,讓我能夠很方便的追

蹤記憶體中變數的變化,是否合於我所預期的運作流程,在各個函式

之間的呼叫,是否有陷入迴圈。

在開發的過程中除了 CW 外還加上了 Palm 公司的 Palm OS Simulator 還有 Palm OS Emulator,Simulator 和 Emulator 同樣是模擬 Palm 的工具,Simulator 和 Emulator 的差異在於,Simulator 可以說是 將PalmOS compiler 成 x86 執行檔,所以執行的效率比較高,反過來 說Emulator 則是完完全全的硬體模擬,他模擬真實的 Palm 硬體的動 作,匯流排的操作,處理器中暫存器的值,兩者的模擬方式完全不同。 在開發的過程中,使用Simulator 是比較方便的,因為在執行程式碼 時透過x86 的 PalmOS 效率較高的原因,但是因為 Emulator 比較類似 真實的硬體環境(Palm OS 3.0 以後),所以開發初期是偏重於 Emulator,但是 Emulator 缺乏我們所需要的紅外線的模擬,所以後期 的設計便完全由Simulator(Palm OS)來做。

(10)

一個號碼,PDA 以後和 HotSync 連線時便由這個代碼來確定彼此的 身分,同時HotSync 程式會備份 PDA 上的資料庫,讓使用者以後可 以復原PDA 上的資料。在 PDA 上新增或移除軟體也是一樣的做法, 當你在PDA 上移除一項資料庫時,根據你程式的不同,可能需要在 備份的PC 上一併的移除,在這種情況下 PDA 資料庫的移除會將資 料庫的空間釋放出來,但保留他的屬性資料直到下次HotSync 時跟 PC 上備份的資料一起移除。透過 HotSync 的方式,我們下棋存檔的 資料同樣的也會備份到PC 上,我們利用這個備份的檔案取得棋譜的 內容,在利用一個轉換的程式,便可以得到PGN 的棋檔。關於這個 轉換的程式採用了 Visual C++ 6.0 來開發。 Palm 作業系統 PalmOS 3.5 以後

開發工具 CodeWarrior for Palm OS Platform 7.0

Visual C++ 6.0

筆記本

UltraEdit-32 中文版 Palm 主機 Palm M505,

CPU : Motorola DragonBall VZ33MHz,

Ram : 8 MB,Rom : 4MB Visor Neo,

CPU: Motorola Dragonball VZ33 MHz Ram:8 MB Rom : 4MB 程式開發環境 CPU : P4 1.6G Memory : 256MB Storage : 40GB 程式開發主機作 Microsoft Windows 2000 Microsoft Windows Me

(11)

業系統

Sync Software HotSync Manager 4.02 表2-1 開發環境

(12)

第三章 Palm 程式設計

3-0 程式概述

在PalmOS 上開發應用程式時,處理使用者的輸入或處理一些 OS 的狀態是透過事件回圈來處理,我們利用事件迴圈來抓取發生的事 件,利用這個方式來處理使用者的輸入動作。 表3-0-1 事件處理順序 表3-0-2 事件迴圈 處 理 順 序 Event1 Event2 Event3 Event4 Event5 事件產生 事件處理 事件佇列 抓取事件 SysHandleEvent MenuHandleEvent AppHandleEvent FrmDispatchEvent F 是否已被處理 T F 是否已被處理 T F 是否已被處理 T

(13)

當使用者在螢幕上向下按時,會發生PenDownEvent,這個事件 包含資料(PenDown 的位置)將會進入 Event 佇列中等待處理,所有的

操作都是透過這個佇列來處理,不處理的事件將會送回OS 來處理,

所以說如果你將所有的事件通通攔截下來,那可能發生異常的狀態

(不能做選單的繪圖)。用選單處理為例,選單的處理是透過 OS 來處 理(FrmDispatchEvent),OS 在接收到一個連續的 PenDownEvent 和 PenUpEvent 後將檢查是否發生在表單區,如果是將產生選單事件放 入佇列,等到事件在進入OS 時將繪出選單。所以在 PalmOS 上設計 程式是圍繞在許多事件的處理上,針對不同的事件撰寫適當的函式, 透過這個介面跟使用者還有OS 來溝通。 在程式的功能上,則分為幾個部分: 一、 棋譜的紀錄:紀錄每一步棋移動的過程。 二、 規則檢查:能檢查規則,避免死棋的移動。 三、 棋譜的瀏覽:能往前看往後看。 四、 紀錄的讀存檔;能紀錄存檔,可以在以後繼續下,程式跳出 時記住目前的棋譜,下次進入時自動載入。 五、 紅外線連線介面:能與另一台PDA 進行連線 程式使用架構:

(14)

表3-0-3 程式使用架構 在程式製作的過程中,順序是繪圖、規則檢查、棋譜紀錄、讀存檔、紅外線 介面。

3-1 繪圖

3-1-0 設計方法 在程式設計的過程最先想到的,就是想畫出一個棋盤,並且產生 棋子在開始的位置上,所以我們是利用一個8x8 的陣列來存放棋子, 這樣的設計方法,在當初是相當的直觀,也是我們所採用的方法,但 是在仔細的思考後,還有在程式實作的過程中,發覺利用描述棋子的 移動過程來紀錄比較有效率,在存檔方面的處理也比較方便,但是在 規則的檢查功能,還有在產生棋面上,是比較困難的,所以兩個方法 都有使用,繪圖有用兩個棋盤,用來紀錄移動前跟移動後的棋盤,再 根據不同的位置,做重新繪圖的動作,為什麼要利用兩個兩個棋盤? 原因是螢幕的閃爍問題,在移動棋子時,如果一再的全部重新繪製棋 主程式 規則檢查 棋譜紀錄 紅外線介面 讀檔存檔 繪圖 User 觸控筆

(15)

盤,則在白格子黑棋盤,或在黑棋子白棋盤的地方,會嚴重的閃爍, 所以利用兩個棋盤,只針對不一樣的格子做重新繪圖的動作。 3-1-1 實作: 在繪圖的程式,主要分為繪製棋盤,還有繪製棋子部分,在繪製 棋盤方面,是由單一獨立的小方格所組成,這樣製作的好處在於,在 重繪表格時只會將需要的部分畫上,將原本的圖形蓋掉,在繪製棋子 時是利用Bitmap 來貼圖。 圖形的製作,考慮到 Palm 系統上的繪圖區域只有 160X160 像素, 所以單一棋格用13 個像素來完成,棋子的大小也是 13 個像素,整個 棋面共用了104x104 個像素來繪圖。 在繪圖程式時,是針對單一棋步的移動來設計程式,所以到了後 來,為了能處理多個圖形同時改變的情形,又重新寫過了繪圖函式。 圖 3-1-1 繪圖(移動前)

(16)

圖3-1-2 繪圖(將需要的部分塗消) 圖3-1-3 繪圖(將新的圖形畫上) 繪圖的資料是包含了兩個8X8 的陣列,每個陣列的元素包含了, 棋子名,選擇,標記。在繪圖時先檢查兩個陣列有哪些棋子的名字不 同,將不同名的地方塗消,在根據ChessTable1 來畫上新的棋子,之 後將新棋盤的資料複製到ChessTable2 上。 typedef struct{ int name; Boolean chosen,marked; }BasicChessTableElement; BasicChessTableElement ChessTable1[8][8]; BasicChessTableElement ChessTable2[8][8]; 畫圖的部分還包含了一個標記的功能,能在棋盤上顯示一個綠色 的方框,表示選擇的棋子。

(17)

圖3-1-4 繪圖(選擇棋子) 繪圖的部分,最後一個功能,就是反轉棋盤。這個功能主要是透 過繪圖時做轉換來達成的,所以在機器中所存放的資料並沒有改變, 只是表示的方法改變了。 圖3-1-5 繪圖(反轉棋盤) 表3-1-4 繪圖 新棋盤 舊棋盤棋 消抹棋格 檢查陣列內容是否不同 畫上新棋子 刷新舊棋盤資料

(18)

3-2 規則檢查與棋盤移動

3-2-0 設計方法 規則的檢查,是在程式設計到能在Palm 完成移動棋子之後才 寫的,所以檢查的方式,在起先是只能夠檢查移動方式的合法 性,在程式製作到紀錄串列的部分時,檢查的方式加上了移動後 的棋面是不是合法的檢查,利用這個方法來檢查比較有效,根據 單步移動跟棋面(目前的棋盤狀態)的關係,在很多的特殊移動並 不能檢查出來,比如說過路吃兵的移動,城堡護主的移動,死棋 的移動,這些的移動牽涉到不只一個棋,或是跟上一步有關係。 所以移動的檢查,到這邊已經幾乎能檢查所有的移動問題。 3-2-1 實作 棋譜的紀錄,紀錄了每一次的移動狀態,紀錄了從A 移到 B 的位置資訊,還有目標位置的棋子名,當每一次的移動,都需要 透過規則檢查器的驗證來做正確的移動,這樣的做法,是因為要 能夠在一筆紀錄中能夠描述出正確的結果,每當有城堡護主的移 動,過路吃兵的移動,這些移動都牽涉到不只一個棋子。所以必 須透過規則檢查器的解譯來產生新的棋盤,規則檢查器的工作除 了產生棋盤外,最重要的功能是檢查每一步的移動是否正確,我 把檢查分成三個階段來進行。 一、 移動檢查,在這個步驟我所處理的,是基本的移動規則, 棋由A 點移動到 B 點,A 是哪種棋,是否合於規定,是

(19)

否有被檔到,是否吃同色子。 圖 3-2-1 基本移動檢查 不正確的移動,無法移動(綠色移到紅色) 二、 棋面檢查,在第一次的檢查後,我利用規則檢查器來產 生新的棋盤,新的棋盤代表的是移動後的結果,檢查的 項目主要是將軍的檢查,因為自己的將陷入被吃的狀態 是不合法的,如果產生了這樣的移動,將會檢查出來。 圖 3-2-2 移動後的合法性檢查 不正確的移動(綠色移到紅色後還是將死) 三、 棋面的恢復,規則檢查器將會把整個棋盤清空,在依照 棋譜的紀錄,重新移動一次棋盤,當上面的兩個檢查都 是正確的,則將這次的移動加入紀錄中,並呼叫繪圖函 式。 四、 棋面的產生,能夠根據移動的棋子,作出適當的棋面。

(20)

圖3-2-3 吃過路兵檢查(1) 由綠色移動到紅色,這時必須檢查黑色的棋子的上一步移 動。因為過路吃只有對上一回合的兵有效。 圖3-2-4 吃過路兵檢查(2) 因為是過路吃兵所以除了將白子移動外,同時吃掉掉黑 子。在來看城堡保護主。 圖 3-2-5 城堡護主檢查(1) 由綠色到紅色,將和城堡都不能移動過。

(21)

圖3-2-6 城堡護主檢查(2) 同樣的也是兩個棋的移動。並且必須檢查移動後的城堡與 國王不在對方的攻擊範圍內。 表3-2-5 規則檢查與棋盤移動 使用者移動 規則移動檢查 棋步移動解析 棋面檢查 繪圖 結束 錯誤訊息

(22)

3-3記錄資料、棋譜瀏覽

3-3-0 設計方法 程式的設計到存檔讀檔時,並不知道PGN標準的存在,所以就採 取了最簡單的紀錄方式。用單步棋移動紀錄來存檔。這種做法的好 處,在於所用的方式,是類似玩家再下棋時的資料標示方法(同於在 程式中所傳的參數),所以在實作上不需要增加轉換的代價。在存入 Palm上的資料庫時也十分的方便,Palm的資料庫基本上是記憶體空間 的集合,所以在操作上,是利用類似new的語法來呼叫,類似memory copy 的方法來完成。 瀏覽棋譜的功能在能檢查規則的元件完成後,也變的簡單,只需 要找到目前在棋譜中的位置,利用串列搜尋上一步棋,在重新移動一 次就能完成。 3-3-1 實作 在程式運作當中棋譜的資料,是利用一雙向鏈節串列來完成,鏈 結串列當每移動一步時便在串列的尾端加上一筆資料,用於紀錄整個 棋譜。在棋譜的串列函式中有基本的串列搜尋功能,能傳回上一步、 下一步或最後一步棋譜資料的address,讓我在操作串列上更方便。 在PDA 裝置上的資料庫,事實上也可以說是一種記憶體,所以 PDA 裝置對記憶體資料庫會有重新整理來得到最大連續空間的動 作,所以當對資料庫管理員要求一塊空間時,是和new 一塊記憶體空 間的指令相當類似,但是在操作記憶體時,必須將記憶體 Lock,在

(23)

不用時也必須UnLock 掉,這是為了不讓 OS 搬動這塊記憶體,雖然 多了點不方便,但是因為能將資料庫當作記憶體來使用,所以在紀錄

棋譜時只需要new 一塊足夠大小的空間,將 Linking List 的資料搬入 就完成。 在Palm 的資料庫上,資料庫可以包含超過一個以上的記憶體空 間,也可以說一筆record 就是一塊記憶體空間,在我們的程式中一共 用到了三個空間,分別紀錄了棋譜資料,一段可供使用者輸入的文 字,還有資料庫名。 表3-3-1 palm 記憶體的儲存方式 表3-3-2 palm 資料庫的儲存動作 表3-3-3 palm 資料的儲存格式 第一步棋 第二步棋 第三步棋 第四步棋 頭 夠大的空間 將棋譜從串列中搬到資料庫的Record 在記憶體中的棋譜紀錄(雙向串列表示) 第一步棋 第二步棋 第三步棋 第四步棋 頭

紀錄一header Data 紀錄二header Data 紀錄三header Data 資料庫header 紀錄一 LocalID 紀錄二 LocalID 紀錄三 LocalID

(24)

3-4紅外線介面

3-4-0 設計方法 紅外線介面的設計是採用IR Library 來操作,因為 IR Library 的 操作方式,類似於由程式本身來建立連線,維護連線,中斷連線,還 有IR 設備的操作,在這方面因為有找到適合的範例程式所以設計的 方式是以範例程式為基礎觀念改寫而成,因為所有的硬體操作都是由 程式本身來控制,連線的方式我們是採取不保持連線的方式,在資料 傳送後就結束連線,讓使用者在下棋時不需考慮到IR 設備保持連線 的問題。 3-4-1 實作 紅外線線的操作位系統包含了幾個基本的功能: 一、 紅外線設備的尋找:尋找紅外線裝置,紀錄遠端裝置的資料。 二、 紅外線連線的建立:建立連線。 三、 兩方連線的介面:透過這個介面,讓兩個設備能夠溝通,同 步化彼此的資料,保持資料的一致性 這些功能紅外線介面透過以下的操作(溝通的訊息)來達到: 1. ACK 2. 要求連線 3. 送出總共有 N 筆資料 4. 要求第 N 筆的資料 5. 同步完成

(25)

7. 要求 UnDo 8. 要求新遊戲 9. 結束連線遊戲 建立連線時必須先找到對方的裝置,然後開始將資料同步 圖 3-4-1 第一次連線 當連線由A(Server)發起時,A 將會建立一個連線的通道,AB 兩 端便由A 所建立的通道來溝通。當同步完成時,B 將會找尋 A 的裝 置名(Address),用於以後連線的建立。 尋找對方的設備 建立連線 處理資料同步 結束連線 找尋裝置名 發出棋譜 接收棋譜 第一次連線

(26)

圖3-4-2 處理同步資訊 在傳送處理的資料時是一來一往的方式,這樣雖然比較沒有效 率,但是在傳送資料的處理方面比較方便。 要求對方將舊資料清除 詢問總共有幾筆資料 總共有N 筆資料 要求第1 筆資料 送出第1 筆資料 要求第N 筆資料 送出第N 筆資料 同步完成 Server Client 處理同步資訊

(27)

建立連線 傳送資料 Ack 結束連線 主動 被動 移動單一棋步時的資料傳送 在兩邊的同步完成之後,基 本上沒有所謂的Server 或 Client 之分,雙方都可以主 動的發出連線。 圖 3-4-3 單一棋步的移動 這種連線的建立有一個特性就是每一次的資料傳送,在送出端可以馬 上知道資料是否能傳出去,因為每一次都需要重新建立連線,同時因 為不需要保持連線,所以在下棋時使用者能隨意的放置Palm 裝置, 不需要考慮到兩台機器的連線。在實作上實際通訊的資料格式是固定 的。 每次收到資料時,會先判斷資料代號,然後根據代號來解讀資料 內容的意義。 資料代號 int type 資料內容 int dname,sname; UInt8 sourX,sourY,destX,destY; 表 3-4-1 通訊資料格式

(28)

第四章 在 PC 端的轉換程式

在每一次的HotSync 時,HotSync 程式會將在資掉庫上我們的棋 譜給備份到PC 端中,我們配合了一個程式,能將這份資料轉換為 PGN 棋檔。PGN 格式能讓你的棋譜能夠移到其他的程式來瀏覽。因為要 讀取pdb 檔,所以也找了一些有關於 pdb 檔的格式的資料。 下面是一份由PDA 上備分得到的 PDB 檔 圖4-1 PDB 檔 在開始的32 個 Bytes(00h 到 1Fh 藍色框)所存的是資料庫名,接 下來的2 個 Bytes 屬性,2Bytes 版本代號,4Bytes 建立時間,4Bytes 修改時間,4Bytes 備份時間,4Bytes 應用程式 Offset,4Bytes 排序 Offset,4Bytes 資料屬性,用不能用 appl 或 APPL 將會被誤認為是可 執行的程式,4Bytes 建立者名字(一般是開發者代號),4Bytes 由系統 產生的唯一編號,4Bytes 下一個 RecordList 的 ID,2Bytes 這個 RecordList 有幾筆 Record。接下來的 00 00 00 66 為第一個 Record 由 檔頭開始算起的OffSet,40 為 record 的屬性,8E2003 為 Record 的唯

(29)

由上面的資料得知在 4dh 的地方 03 代表在這個資料庫中有三筆 資料,在51h 的地方 66 代表這筆紀錄在離檔案 66h 的地方開始。這 是第一個移動紀錄,反白的部分中,0457 代表了一個白色的士兵由 0604 的位置(參考下圖)移動到 0404 的位置,接下來的 0451 代表一個 黑色士兵由0104 移到 0304,藉由這個檔案可以在 PC 上寫一個 PGN 的產生器。 在程式中表示法 圖4-2 棋盤(程式) PGN 表示的棋譜 圖4-3 棋盤(PGN) 0000 00010002 0003 0004000500060007 0100 01010102 0103 0104010501060107 0200 02010202 0203 0204020502060207 0300 03010302 0303 0304030503060307 0400 04010402 0403 0404040504060407 0500 05010502 0503 0504050505060507 0600 06010602 0603 0604060506060607 0700 07010702 0703 0704070507060707 A8 B8 C8 D8 E8 F8 G8 H8 A7 B7 C7 D7 E7 F7 G7 H7 A6 B6 C6 D6 E6 F6 G6 H6 A5 B5 C5 D5 E5 F5 G5 H5 A4 B4 C4 D4 E4 F4 G4 H4 A3 B3 C3 D3 E3 F3 G3 H3 A2 B2 C2 D2 E2 F2 G2 H2 A1 B1 C1 D1 E1 F1 G1 H1

(30)

在PGN 轉換的過程中,除了位置的轉換最重要是刪除不必要的 資料,舉例來說白兵從c2 移動到 c3,在程式的紀錄中,包含了來源、 目標、移動棋子名、移動後棋子名,但在PGN 中所用的紀錄,只有 c3。這是因為 PGN 紀錄方法的關係。 圖4-4 轉換 在PGN 紀錄中他會使用最少的資料來紀錄,紀錄包含移動的目標, 哪種棋做移動,當有一樣的棋子能移動到相同目標時,例用橫座標或 是縱座標來區別棋子。 圖4-5 轉換(分辨) 在兩個白騎士都可以吃掉黑方最前面的黑兵,如果用右邊的吃 PGN 顯示 Nfxd5(N 為騎士,f 指的是 f5, x 表示吃子,d5 為移動目 標),用左邊的吃顯示 Ncxd5。所以在產生 PGN 檔時必須先掃描過整 個棋盤是否有一樣的棋子在不同位置,一樣能走到相同的目標上,在

(31)

這種情況下必須決定適當的顯示方法。

下面是利用PGN 的轉換程式將 pdb 檔轉成 pgn 檔的範例。

圖4-6 將 pdb 檔轉成 PGN 文字檔

(32)

圖 4-8 轉換過程

(33)

圖4-10 轉出來的 PGN 檔

(34)

第五章 遭遇到的困難遭遇到的困難與解決

在程式發展的初期,完全不知道要如何繪圖,然後我在網路上找 到了我的第一個問題的解答。在http://www.littleaeris.com/palm/ 的地 方我找到了我的第一個範例程式。 http://www.littleaeris.com/download/download.php?get=NBbitmap 這個 程式能在Palm 的螢幕上產生一個圖檔。在學習的過程中,因為 CW 的版本有所改變,使得在這個程式原始碼的專案無法開啟,這是因為 有許多的變數名稱跟新版的不同,如在舊版CW 的 DW(double word) 在新版是UInt32,Word 是 UInt16,許多類似的問題,甚至於不是用 CW 開發的原始碼我也有參考過。 第二個問題,就是紅外線介面的使用,紅外線的介面,雖然參考 了Palm OS Reference 的文件,但是對於每個函式之間的關係還是不 了解,所以我找到了第二筆網路上的程式在PalmOpenSource.com 的 網頁上我找了emChat 的程式(http://coopcomp.com/emchat/) ,這個程 式的功能是透過 PalmOS 的訊息管理員函式,來呼叫紅外線介面,但 是呢因為使用紅外線的訊息管理員函式時,管理員API 會在螢幕上產 生訊息,所佔用的畫面太大,這個問題在文件中也有提到,但是跟據 文件的說明,目前還無法解決這個問題,所以我們只好呼叫更下層的 函式來使用。

(35)

圖5-1 emChat 測試圖(1)

接下來我們使用的是CW 所提供的 IR Lab 函式,在 Palm 的 IR 設 備是根據IrDA(INFRARED DATA ASSOCIATION http://www.irda.org/ )

所制定的標準來製作。

表 5-1 IrDA 通訊標準 IrDA Data Protocols PHY (Physical Signaling Layer)

IrLAP (Link Access Protocol)

(36)

表5-2 IrDA DATA-Hardware/Protocol Stacks

表 5-3 IrDA 控制操作 Optional IrDA Data Protocols

專題所用的協定用了,PHY(physical layer)、IrLAP、IrLMP、加上 TTP 協定,之所以會用這樣的協定,原因也很簡單,因為我們又找到了另

一個有原始碼的程式 Ir-Test,Ir-Test 的工作方式分為幾個步驟: 尋 找對方機器、建立連線、傳送資料,斷線。

IrTran-P OBEX IrLan IrCom IrMC

LM-IAS Tiny Transport Protocol - Tiny TP

Ir Link Mgmt - MUX - IrLMP

Ir Link Access Protocol - IrLAP

Async Serial-IR 9600-115.2kb/s Sync Serial-IR 1.152Mb/s Sync 4PPM 4Mb/s Tiny TP 流量控制,類似 assemble 的通訊控制 IrCOMM 用於 Serial 或 Parallel Port 的模擬 OBEX™ 類似於 HTTP 的協定

IrDA Lite 用於 IrCode 資料壓縮 IrTran-P 用於交換數位影像的協定 IrMC 用於跟手機的通訊協定

(37)

圖 5-2 IrTest(discover)

在這個步驟將會得到對方IR 裝置的 Address,利用這個資料來跟遠端

裝置建立連線。

圖5-3 IrTest(建立連線)

(38)

圖5-4 IrTest(傳送資料)

圖5-5 IrTest(斷線)

在程式中,因為我們是採取斷線的作法所以基本上,是由這個程式的

(39)

第六章 心得

●資訊四丙楊尚儒 在這次製作專題的過程之中,所遇到的問題在經過與老師的研究 和一次又一次的測試之後終於有了初步的成果,製作專題讓我學到了 很多的經驗,我認為一個系統的製作如不在設計的初期有詳細的計 畫,那麼是很難能夠完成的,要完成一件事情先要有計畫,有了計畫 在逐步的去實行才有進度,才有成果。預定的計畫雖然往往不能如預 定的實行,但是呢沒有預定的計畫那麼便往往無法開始。用電腦解決 問題的方法,可以分為如何在電腦中表現資料和如何將判斷的方法變 成演算規則,在製作專題的過程中得到了很多的經驗,加強了找尋資 料的能力,網路上的資料庫幾乎是什麼資料都找的到。所以找資到的 能力也,閱讀資料的訓練也很有幫助。我要對指導老師致上最深的謝 意,感謝你給予我機會,讓我有機會得到別人所沒有的特殊經驗,我 也要感謝我的另一名組員,沒有你的配合又不會有今天的成果。

(40)

●資訊四丙侯彥廷 隨著大三升上大四的腳步,專題為畢業必修的我們,也開始了一 個新的歷練,從開始的我,對程式很反感,對自己寫程式沒有信心, 甚至逃避寫程式的我,真的是一種強烈的感受一波波的襲來,沒有信 心寫程式的我,在組員的交代下,盡量完成被交代的小小工程,以前 都沒想過,寫一個程式該如何開始,而且這個也是大家在之前也都不 是很熟悉的palm 系統下的開發,慢慢的,知道我們專題到底要做的 是什麼,也開始有了對這個專題的從開始到最終的小小流程的小心 得,程式方面雖然 C 是我們資訊系必學的語言,可是沒想到,由於 palm 的程式開發的系統,會預設一些參數,好讓使用者方便開發, 起初都被這些部分搞的迷迷糊糊,而且一些個資源的連結,一開始還 不知道是做什麼的,現在至少心裡有個底了。 為了專題,學到找資料是一個蠻重要的部分,因為是不會的東西,所 以開始找資料,通常就直接上網查,可是常常都是找到根本跟自己要 的差很多,要不就是問班上的同學,同學會給建議,但是問題通常出 現在自己本身,知道問題的癥結,卻總是問不出問題的重心,弄得雞 同鴨講,了解到做一件事情,還是得要有個底,不然根本連自己在做 什麼都不知道。在專題的中期,就是大概什麼都有那麼一些東西了, 就是祇差把它弄完而已,老師就會開始說他這個使用者的想法,感覺 項在外面接case 一樣,要把介面弄得很實在,還不能太陽春,專題 真像是真的在工作一樣的感覺。

(41)

感謝組員跟老師,專題從開始做的時候,老師也給我們一些做專

題的建議,組員也不介意我的程式很差,還會慢慢講解palm 程式主

(42)

參考資料

[1] Palm, Inc.5400 Bayfront Plaza Santa Clara, CA 95052 USA Palm OS SDK Reference Document Number 3003-003 June 23, 2000 http://homepages.enterprise.net/jmarshall/palmos/

[2]Lonnon R.Foster/原著,陳永昱/譯,PalmOS程式設計大全(譯自 Palm OS Programming Bible),旗標,民90

[3]Robert Mykland/原著, 吳卓俊/譯,PalmOS程式設計大全(譯自 PalmOS Programming From the Ground Up),McGrawHill,2001.4 [4]紅外線標準協會 http://www.irda.org/ [5]PalmOpenSource.com http://www.palmopensource.com/ [6]PalmSource http://www.palmos.com/dev/support/ [7] rec.games.chess新闻组, 关于PGN、FEN记谱规范(上), http://www.chessit.net/file_topic/computerchess/pgn-fen-1.htm [8] 逢甲大學,資訊工程學系專題報告,逢甲大學手持式校園導覽 系,學生:林政巨(四丁) 陳英俊(四丁) 黃志雄(四丁)指導教授: 劉安之,p12-14,中華民國九十年十一月

(43)

附錄

PGN 的西洋棋記譜格式

轉載自 http://www.ckes.tn.edu.tw/~zmz/nac004.htm 本文 版權宣告:此篇轉載於 http://www.chessit.net/file_topic/computerchess/pgn-fen-1.htm,並獲 得原譯者授權轉載並修改成繁體格式,著作權歸原作者及譯者所 有。如仍有侵權情事,煩請來信告知zhengzmz@ms16.hinet.net。

出處: Chess world 的 PGN Archive 譯者: michael

類型: 編譯

原文: 原文內容

關於 PGN、FEN 記譜規範(上) 來源:rec.games.chess 新聞組

PGN(Portable Game Notation)”可移植式的棋局記號法”,是一種

以ASCII 文字檔案表示西洋棋棋局資料的標準設定。PGN 設計成使

人們很容易進行閱讀和編寫,電腦程式很容易進行解析和產生。定義

和傳播PGN 的目的,是為了促進公開對局資料的共用交流,包括來

(44)

PGN 不是萬能;也沒有什麼標準無所不能。它被希望作為資料交 換的一種通用可移植式表示法,就是給予國際象棋應用群體能夠從 PGN 本身導入導出來快速方便地處理對局資料的。對它的要求是: 簡潔明瞭、可在不同平臺工作、多數人們和多種處理程式都能理解運 用和產生,也就是說“同一種語言”、公開而不加密、易於擴展和升 級、國際化、以及具有繼承性。 舉例來說,一個標準的PGN 棋局的紀錄方式大概如下:

[Event "F/S Return Match"] //賽事名 [Site "Belgrade, Serbia JUG"] //地點 [Date "1992.11.04"] 該局日期

[Round "29"] //第 29 輪

[White "Fischer, Robert J."] //白方: Fischer, Robert J. [Black "Spassky, Boris V."] //黑方: Spassky, Boris V. [Result "1/2-1/2"] //結果:和棋

1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15. Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21. Nc4 Nxc4 22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7 27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33. f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5 40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2

上面的例子,是最基本的紀錄,如果還要了解的更多更繁雜的紀

(45)

明一下,也就是機器會擷取來用的多加說明。 一個PGN 資料檔案是從零到很多盤 PGN 棋局的順序性集合。空 文件也是合法的PGN 資料檔案,雖然有點不太常規。 一個PGN 棋局由兩部分組成。第一是“標籤對部分”,第二是 “棋譜部分”。標籤對部分用於識別棋局,有著標準的參數;棋譜則 用“標準代數記譜法”表示,也將在後文加以描述。 一、標籤對部分 標籤對部分由一系列空的或更多的“標籤對”組成。而標籤對則 由左右方括號、象徵符號、字串符號組成。象徵符號是標籤的名字, 而字串符號就是如之一起的標籤值,它們的表示法都有一定標準。在 一個標籤對部分裏不能出現同一個標籤名多於一次以上。標籤名是分 大小寫的,所有用於檔案儲存的標籤名都是以大寫字母開頭[譯注: 一時不熟悉PGN 的不要被這些術語名詞嚇倒,相對於十分詳盡的原 文,譯文已儘量大大簡略了。實際只要對照上面那個標準 PGN 棋局 看下去,看到那些方括號了吧?就是標籤對部分,很容易明白的]。 七個標籤項 這是最基本七個標籤項目,實際上輸入時,順序不一定這樣嚴 格,而且還可能根據需要進行擴展和增加。這七個基本標籤項依順序 是: 1)Event 比賽名。比如:

(46)

[Event "FIDE World Championship"] //國際棋聯世界錦標賽 [Event "Casual Game"] //即興比賽

[Event "?"] //比賽名不詳 2)Site 比賽地點。比如:

[Site "New York City, NY USA"] //美國紐約 [Site "Beijing, China"] //中國北京

3)Date 該局開始時日期,使用當地時間。比如: [Date "2001.01.01"] //一看就懂了吧! [Date "1993.??.??"] //1993 年但月、日不詳 注意日期的格式是:年.月.日 4)Round 該局在比賽中的輪次。比如: [Round "1"] [Round "3.1"] //第 3 大輪的第 1 小輪 ,以“.”分開;有更小的輪 次則類似表示下去 [Round "?"] //輪次不詳 5)White 白方棋手名字。有一定的書寫規則,不同民族的人的姓名 不好一概而論,但至少看懂是不難的。電腦棋手則在名字後加上版本 資訊。比如:

[White "Tal, Mikhail N."] //米哈依爾·N·塔爾 [White "Kasparov, Garry"] //加里·卡斯帕羅夫

(47)

6)Black 黑方棋手名字,與白方的規則沒有區別。 7)Result 該局結果。比如: [Result "0-1"] //黑勝 [Result "1-0"] //白勝 [Result "1/2-1/2"] //和棋 [Result "*"] //可能還在進行,可能該局作廢,可能其他原因,反正 結果不詳 二、棋譜部分 包括棋步、回合數、可選的評注、以及棋局終止符。不合法的棋 步不能出現在棋譜部分中,不過可以出現在注釋中。 使用“標準代數記譜法”,以一個大寫英文字母表示棋子:P= 兵,N=馬,B=象,R=車,Q=後,K=王 。但兵往往不需要用字母表 示,一般省略。以小寫字母“x”表示吃子,兵吃子與其他棋子吃子 的表示法有少許區別。注意某方假如有不止一隻棋子可以走到特定某 一格的話,為了區別究竟是哪一隻在走,有一套規定的表示法,但這 與通常見到的書上的棋譜表示法類似…… 短的王車易位(城堡護主)以“O-O”、長易位以“O-O-O”表 示,注意這裏是大寫字母“O”,而不是數字“零”。 吃過路兵沒有什麼特殊表示法。至於兵的升變,以“=”後面緊 接升變棋子的符號來表示。

(48)

一步棋帶將軍(普通的”將軍”)的就在後面加個“+” ,將死就 是用“#”表示。舉個複雜點的棋譜寫法,比如:fxg1=Q#,意思就是

(49)

附錄

PDB 檔案結構

文章轉自: 逢甲大學,資訊工程學系專題報告,逢甲大學手持式校園導覽 系,學生:林政巨(四丁) 陳英俊(四丁) 黃志雄(四丁)指導教授: 劉安之,p12-14,中華民國九十年十一月 2-1、前言: 對於單機使用而言,使用Palm Inc.所提供的SDK 以及CDK,可以很 方便的處理資料庫中的內容,包括建立資料庫、刪除資料庫、讀取紀 錄、寫入紀錄、刪除紀錄等等。

但是目前HotSync 只提供Windows 及Mac 的版本,如果有資料庫是 存放在Linux 或是資料庫系統中的話﹝例如:MySQL、Sybase﹞,就 必須轉換成PDB 檔案,再安裝到Palm Device 上面。

另一個問題是軟體更新的時候,可能只有資料庫需要更新,而不是更

新整套軟體,那麼我們可以將原來平台或伺服器端的資料庫內容,轉

換成PDB 檔案,再安裝到Palm Device 上面,就可以達到更新Palm Device 的程式版本,使用者每次也只需要下載新的資料庫就好了。 因為這個原因,所以我們花了一些時間,了解PDB 的檔案結構,並 且設計出轉換程式,方便以後我們將PC 端的資料庫轉換為PDB 檔 案。

(50)

2-2、概述:

PalmOS 使用的檔案格式有三種,分別列舉如下: • Palm database(PDB)

o用來存放應用程式會使用到的資料。 • Palm query application(PQA)

o包含WWW 內容的PDB 檔集合。 • Palm resource(PRC)

o應用程式。

在桌上型電腦中,這三種檔案的副檔名分別為PDB、PQA 以及PRC, 但實際上,PalmOS 是依據檔案的Header 來判斷檔案格式(包括 database name 和database type)。

接下來的一節我們先以表格的方式,介紹PDB 檔案的結構以及每 個欄位的意義。

2-3、資料結構:

(51)

Record Entry Type(最大65535*8 bytes) Record Date(資料庫內容)~END PDB Header 0 Name(database name) 20 Attributes version 24 CreationDate(建立時間)(備註1) 28 ModificationDate(最後更新時間) (備註1) 2C LastBackupDate(最後備份時間) (備註1) 30 ModificationNumber(被更新次數)

34 AppInfoID(PDBHeader 到appInfo 的local offset) 38 SortInfoID(PDBHEader 到sortInfo 的local offset) 3C Type(PDB type) 40 Creator(PDB creator) 44 UniqueIDSeed 48 RecordList … (資料庫內容開啟位置) RecordList Type

(52)

NumRecords WORD RecordList 中的Record數量

Placeholder bytes 2 bytes 如果此RecordList 有一筆以上的紀錄,則 第一筆Record 的local offset 從這裡開始記錄。

RecordEntry Type

Local Chunk ID DWORD PDB 檔開始到該Record 的local offset Attributes 1 byte Record 屬性

UniqueID 3 bytes Record ID 備註: 1、creation Date、modificationDate、以及lastBackupDate 是從1904/1/1 到開始到現在的秒數,要在Desktop 上計算這個數值,可以使用標準 C 函式中的time()加上2082844800 即可。 2、PalmOS 使用的ByteOrdering 是由低到高,例如,16 進位的 0x01020304在PC 的記憶體中表示為0x04030201,在PalmOS 的記憶 體中表示為0x01020304。所以,在PC 上的計算出來的local offset 或 是數字,都必須倒轉,才能儲存在PalmOS 的檔案中。(範例程式中 的SwapDWORD、SwapWORD) 3、Record 屬性 Delete bit(7)

(53)

Dirty bit(6) Busy bit(5) Secret bit(4) Category(3-0)

• Delete bit:its entry in the database header remains until the next synchronization with the PC。

• dirty bit:已被更新。

• busy bit:某個應用程式正在讀取record。

• secret bit:records that should not be displayed before the user password has been entered on the device。

2-4、PDB 檔案結構範例:

介紹完PDB 檔案的結構以及欄位,我們使用二進位的方式來觀看一 個PDB 檔的實際內容:

PDB 檔案的Header,從0000 到0055 都屬於這個部份的內容 PDB 檔案有關資料的內容,二筆紀錄之間用0000 隔開。

(54)

附錄 操作手冊

當我們把IrChess.prc 使用 hardsync 把 IrChess.prc 灌進 palm 之後,我

們自然可以在palm 螢幕上面找到一個”Chess”這個路徑(如下圖紅 色框框起來的地方), 圖A-1 palm 桌面 就會進入到下圖,沒錯就是西洋棋遊戲的畫面,讓我們試著走一步試 試看吧。。。 圖A-2 進入西洋棋畫面

(55)

棋子的訊息:

由於預設為白色先下,那我一開始選黑色邊的話,就會出現”Sel Wrong Side”表示選錯邊了,當然如果已經進行了一些棋步之後,選 錯了邊也是會有”Sel Wrong Side”。

例如:我選了白色的騎士,程式就會在騎士的圖案周圍畫出綠框,以

顯示你點了哪一顆棋子,下面的欄位則會顯示”Sel White Chess”就是 你選了白色的棋子的意思,選了棋子之後,當然就是要走棋子囉。 如果走的地方不符合該棋子的規則,則會顯示”Move Error”移動錯誤 的訊息。 如果是正確的移動棋步的話,就是棋子移動過去,而不會有特殊的訊 息了。 當有一小兵走到對面的盡頭之後,就可以選擇想要換的棋子, Queen(皇后),Rook(城堡),Bishop(主教),Knight(騎士) ,如下圖: 你可以選一想要的棋子,程式將會自動幫你轉變。 圖A-3 訊息-換棋 在國王走了某一步會有被吃的危機的話,會有”Table Error”的錯誤訊

(56)

息。 例如:在想要城堡護主的時候,如果做了護主這步棋會有被吃的危險 (也就是不合法的城堡護主) ,產生了”Table Error”訊息。 Last Next 按鈕的功能: Last:用來看棋盤回到上一步的功能。 Next:配合”Last”觀看棋盤下一步的功能。 我們走了幾步,按下”Last”鈕,棋盤則回復到上一步的棋盤。 待我們一直”Last”到最初的原樣的時候,則欄位會出現”Record is head”表示已經到了紀錄的最開始了。 再按一次”Last”的話,則欄位會顯示”Record is NULL”表示已經沒有 上一筆的紀錄了,不論再按幾次”Last”都一樣。 讓我們開始按”Next”試看看吧,棋子會以之前走的路徑,一步一步走。 按”Next”到最後我們停住的那一步,再多按一下的話,就會顯 示”Record is tail”表示已經到了紀錄的最後了。 如果是直接點棋盤上的任意處的話,則會直接顯示最後,讓使用者開 始接下去下。 選單的介紹: 點擊左上角的”Chess”或是 menu 鍵,就會出現如下的選單。 包括Start Edit Options 三大項

(57)

圖A-4 選單-Start 選單-Start:

分有NEW Save Load

NEW:不用說大家都知道,這個就是直接開一個新局,從頭開始下。 Save:當使用者點擊了 Save 或是在英文手寫區下寫出”S”則會進入 Save,如下圖:Game Name 可以寫入 24 個字元,Memo 可以打一些 有的沒的,點”ok”就會以 pdb 的格式紀錄在 palm 的資料庫裡面了。 圖A-5 選單-Start-Save 在palm 的資料庫裡,可以看到剛紀錄的 pdb 檔案。 Load:點擊”Load”或是在手寫的地方寫 L 就會進入 Load 畫面,選擇 剛才紀錄的檔案,按下”ok”就會回到棋盤上,顯示的就是之前所下的 棋。

(58)

選單-Edit

分有Undo Open/Close IR Connect/DisConnect SIDE ChangeColor TakeBack Forward

圖A-6 選單-Edit

Undo:

當我們點擊了”Undo”之後,會有跟”Last”鍵依樣的現象,但不同的 是,Undo 以後,就沒辦法”Next”了,就等於是悔一步棋,而且欄位 會有”White Move”或是”Black Move”表示悔棋後,現在這一步的上一 步,是白色(或是黑色)的走過了。

Open/Close IR:

當我們點擊了”Open/Close IR”之後,會有對話窗”IR Port Is Open”出 現,提示你已經把紅外線的介面打開了,

而如果再點及一次”Open/Close IR” ,就會出現”IR Port Is Close” ,表 示紅外線介面已經關閉。

Connect/DisConnect:

(59)

擊”Connect/DisConnect”如果成功的搭上線了,則伺服器端會在欄位 上顯示”user Lsapok”且 server 端預設為白色(PS 如果想換黑色,可 用”ChangeColor”來更換顏色) ,而用戶端則是在欄位出現”Down is Black”的訊息表示為黑色。

若紅外線沒有調整好適當的收發距離,而彼此無法連線,則會有Ir Err

視窗”no IrDA in range”的訊息出現,表示需要調整好紅外線的接收。

當我們在連線狀態下,正常的下棋的話,則下完一步的人,其欄位會

顯示”IR Move”表示該對方下,而另一方就會顯示”You Move”表示為 該自己下。 如果對方是已經連線且對弈了一段時間之後,雙方紅外線沒有良好的 溝通的話,導致於失去連線,則會有”Ir Err”的訊息視窗”Check IR Device Direction” ,表示已經失去連線,如果要再繼續下的話,請重 新Connect,而且如果最後一步棋是有下沒有傳過去的話,則會回到 上一步的狀態。 SIDE: 當使用者點擊了”SIDE”,棋盤會反過來,在欄位中會顯示”Down is Black”表示黑色在底下,由於預設為白色在底下,所以我們點擊了一 次就會變成黑色在底下。(PS:連線狀態下使用 SIDE 只是反轉棋盤, 並不能換顏色下) 如果我們再點擊一次,則會恢復成白色在底下,欄位會顯示”Down is

(60)

White” 。 ChangeColor: 要在Connect 的前提下,這一項才會有效,主要是為了兩個人的顏色 可能不是自己想要的那邊,所以要求換色,可能上次他是白色沒有下 完,這次要繼續下白色諸如此類的,點擊之後如果是連線狀態下,對 方會出現對話視窗,問是否要交換,而且此功能是伺服器端限制,而 又由於IR 為誰將下那一步棋就是誰當伺服器的設定,所以只有正要 下棋的那一方,或是提出連線的那一方,才可以要求換顏色。 TakeBack: 跟”Last”一樣的功能,用於瀏覽之前下的棋步,有快速鍵,在手寫板 上畫”T”。 Forward: 跟”Next”一樣的功能,配合”Last”瀏覽下一步棋,有快速鍵,在手寫 板上畫”F”。 全文完

數據

表 3-0-3 程式使用架構  在程式製作的過程中,順序是繪圖、規則檢查、棋譜紀錄、讀存檔、紅外線 介面。  3-1 繪圖 3-1-0  設計方法  在程式設計的過程最先想到的,就是想畫出一個棋盤,並且產生 棋子在開始的位置上,所以我們是利用一個 8x8 的陣列來存放棋子, 這樣的設計方法,在當初是相當的直觀,也是我們所採用的方法,但 是在仔細的思考後,還有在程式實作的過程中,發覺利用描述棋子的 移動過程來紀錄比較有效率,在存檔方面的處理也比較方便,但是在 規則的檢查功能,還有在產生棋面上,是比較困難的,所
圖 3-1-2 繪圖(將需要的部分塗消)  圖 3-1-3 繪圖(將新的圖形畫上)  繪圖的資料是包含了兩個 8X8 的陣列,每個陣列的元素包含了, 棋子名,選擇,標記。在繪圖時先檢查兩個陣列有哪些棋子的名字不 同,將不同名的地方塗消,在根據 ChessTable1 來畫上新的棋子,之 後將新棋盤的資料複製到 ChessTable2 上。  typedef struct{   int  name;    Boolean  chosen,marked;  }BasicChessTableElement;  B
圖 3-1-4 繪圖(選擇棋子)  繪圖的部分,最後一個功能,就是反轉棋盤。這個功能主要是透 過繪圖時做轉換來達成的,所以在機器中所存放的資料並沒有改變, 只是表示的方法改變了。  圖 3-1-5 繪圖(反轉棋盤)  表 3-1-4 繪圖 新棋盤  舊棋盤棋消抹棋格檢查陣列內容是否不同畫上新棋子刷新舊棋盤資料
圖 3-2-3 吃過路兵檢查(1)  由綠色移動到紅色,這時必須檢查黑色的棋子的上一步移 動。因為過路吃只有對上一回合的兵有效。  圖 3-2-4 吃過路兵檢查(2)  因為是過路吃兵所以除了將白子移動外,同時吃掉掉黑 子。在來看城堡保護主。    圖 3-2-5 城堡護主檢查(1)  由綠色到紅色,將和城堡都不能移動過。
+7

參考文獻

Outline

相關文件

使我們初步掌握了電壓、電流和電阻三者之間的關係。我

• 全面品質的工具讓公司的員工,無論是工 程師、技術員或現場作業員,甚至是辦公 室職員,能夠完成他們的工作。這些工具

• 這種 學與教策略把歷史了 解和歷史思考的權利還給 學生,激發了同學之間的 互動,有利協作能力的發

智慧型手機是一種運算能力及功能比傳統手機更強的手機。 通常使用的作 業系統有: Symbian 、 Windows Mobile 、 iOS 、 Linux (含 Android 、 Maemo 和 WebOS) 、.. Palm

由於 Android 作業系統的開放性和可移植性,它可以被用在大部分電子產品 上,Android 作業系統大多搭載在使用了 ARM 架構的硬體設備上使裝置更加省電

LINE 為了打出在海外的知名度,以置入行銷方式出現在劇情畫面中,除了在劇 中多次使用 LINE

Professional 與 Studio 不同的地方在於前者擁有四種特殊開發套 件,可以開發出更逼真的虛擬實境場景。分別為 CG 模組、Human 模組、Physic 模組與 CAD

The results showed that the subjects’ shoulder width, elbow-middle finger length, hand length, palm length, hand width (thumb included), hand width (thumb excluded) were