跳到主要內容區塊

ntuccepaper2019

技術論壇

用Google Go程式寫五子棋小遊戲(雙人對戰版)
  • 卷期:v0042
  • 出版日期:2017-09-20

作者:陳俊傑 / 臺灣大學計算機及資訊網路中心教學研究組幹事


Go程式語言是Google公司所開發,有時被稱之為Golang,自2009年推出以來,約每半年就會發布新的版本[1]。而且,在TIOBE指數,獲得2016年的最佳進步獎[2]。因此,本文將示範撰寫五子棋小遊戲,幫助每位讀者能進一步認識這個進步最多的程式語言。

 

Go程式簡介

本文將先介紹Go主程式的建置環境、開發工具,並透過簡單的範例介紹程式架構,以及如何撰寫五子棋(雙人對戰版)程式,並參考聯發科技工程師吳柏毅先生的文章[3],將其相關特性整理如下:
1. 快速部署:使用go build指令,即可編譯成二進制檔案。
2. 不需要Web伺服器:使用http.HandleFunc、http.ListenAndServe函式,就可以處理http連線。
3. 保護程式碼:所編寫的服務將是一個exe執行檔,不需要公開程式碼。
4. 多核心處理:使用go開頭的語法,就可以啟用多個執行緒。
5. 跨平台編譯:目前可編譯成Windows、MacOS或Linux的執行檔。

 

作業環境

1. 作業系統:Windows 7 Service Pack 1
2. 程式語言:Go 1.8.3(64位元版本)
3. 開發工具:LiteIDE X32.2
4. 本文所使用的路徑功能說明,如表1:

 


表1:路徑功能說明

 

環境設定:Windows版

1. 至官方網站下載所需Go主程式版本:https://golang.org/dl/
本文所使用的版本及下載網址如下:
https://storage.googleapis.com/golang/go1.8.3.windows-amd64.zip
2. 將檔案解壓縮至指定的位置,本文是解壓縮至「D:\go」。
3. 設定「環境變數」的「系統變數」內容,如表2、圖1、圖2:

 


表2:系統變數

 


圖1:GOPATH變數及GOROOT變數設定畫面

 


圖2:Path變數編輯畫面

 

4. 在使用「go version」指令,查詢Go主程式版本,如圖3:

 


圖3:go version查詢結果畫面

 

開發工具:LiteIDE

1. 至官方網站下載所需LiteIDE版本:https://sourceforge.net/projects/liteide/files/X32.2/
本文所使用的LiteIDE版本及下載網址如下:
https://sourceforge.net/projects/liteide/files/X32.2/liteidex32.2.windows-qt5.zip/download
2. 將檔案解壓縮至指定的位置,本文是解壓縮至「D:\go_tools」。
3. 開啟LiteIDE工具,本文的執行檔路徑是:D:\go_tools\liteide\bin\liteide.exe,如圖4:

 


圖4:LiteIDE操作畫面

 

第一個Go程式(Basic.go)

1. 按「檔案」,選擇「New」,如圖5:

 


圖5:選單畫面

 

2. 選擇「Go Source File」類別,名稱「Basic」,位置在「D:/go_code」,完成後按「OK」,如圖6:

 


圖6:建立文件畫面

 

3. 預設的「Basic.go」程式內容如下:

 


說明:
(1) package套件宣告,是用來組成與重複使用程式碼的方式,本範例並無須作變更。
(2) import引用fmt格式套件進行作I/O處理,可參閱:https://golang.org/pkg/fmt/
(3) func函式,名稱為main的函式是程式一開始就執行的部分,本例是Println印出Hello World!字串。

 

4. LiteIDE的執行結果,如圖7:

 


圖7

 

5. 在命令提示字元使用go run Basic.go的執行結果,如圖8:

 


圖8

 

6. 編輯後的「Basic.go」檔案內容如下:

 

7. 在命令提示字元使用go build Basic.go,編譯成Basic.exe執行檔,如圖9:

 


圖9

 

8. 在命令提示字元執行Basic.exe執行檔,如圖10:

 


圖10

 

五子棋簡介

而根據《維基百科》的介紹,「五子棋」基本上是一種雙人對弈的棋類遊戲,先完成五子連線者即獲得勝利[4],在第一屆及第二屆五子棋世錦賽是採用《Gomoku-Pro規則》,而本文所開發的五子棋遊戲,亦需符合此規則,其內容說明如下:
1. 黑子在天元放第一子。
2. 白方下第二子。
3. 黑方在中央五乘五區域外放第三子。
4. 此後按一般標準的五子棋規則進行,即先完成五子連線者獲勝。

 

五子棋程式(Gomoku.go)

1. 使用的套件說明如下:
(1) fmt:基本I/O處理
(2) net/http:伺服器設定
(3) strconv:類別轉換
(4) strings:字串處理
更多說明可參閱:https://golang.org/pkg/

 

2. 程式碼內容如下:

 

3. 執行五子棋的Go遊戲程式
(1) 使用「go build Gomoku.go」編譯,再執行「Gomoku.exe」,如圖11:

 


圖:11

 

(2) 讓Windows防火牆允許Gomoku.exe能使用8080連接埠,如圖12:

 


圖:12Windows安全性警訊

 

(3) 在Chrome上輸入「"http://localhost:8080"」預覽,如圖13、圖14:

 


圖13:用Chrome瀏覽器執行

 


圖14:若有任一方獲勝時

 

結論

本文在撰寫時,其實沒有使用太多的Go程式套件,而是用了大量的字串處理。若是經常寫C#或VB.Net的人,會需要習慣沒有try-catch處理的機制,而是直接回傳2個值,當第2個值不是nil時,則代表回傳的是錯誤值。而它對函數使用方式變得嚴格,如「func xxx() {」,而不能將「{」放在下一行,所以經常會發生編譯錯誤是因為沒有符合使用方式。不過,因為Go程式套件讓一些服務變得簡單,例如本文所撰寫的Web服務,所以還是可以期待它未來的發展。

 

參考資料

[1] Go。維基百科。檢上檢索日期:2017年08月01日。網址:https://zh.wikipedia.org/wiki/Go
[2] 張庭瑜(2017年01月16日)。TIOBE公布2016年度程式語言:熱門程度進步最多的Go奪冠、C語言「退步」最多。數位時代。檢上檢索日期:2017年08月01日。網址:https://www.bnext.com.tw/article/42761/tiobe-2016-program-language
[3] 吳柏毅(2017年01月14日)。從商業利益看 Go 程式語言。小惡魔–電腦技術–工作筆記–AppleBOY。檢上檢索日期:2017年08月01日。網址:https://blog.wu-boy.com/2017/01/business-benefits-of-go/
[4] 五子棋。維基百科。檢上檢索日期:2017年08月01日。網址:https://zh.wikipedia.org/wiki/%E4%BA%94%E5%AD%90%E6%A3%8B