遊戲執行流程圖 |
|||||||||
棋盤空格與棋子圖案 |
|||||||||
本單元的目的是使用UDP為通訊基礎,互相傳遞井字棋盤的狀態,來完成井字連線的線上遊戲。首先請開啟一個專案,將上述三個圖檔加入為資源檔案E代表空格,其餘兩圖代表圈叉,完成後專案屬性頁會顯示如下: 表單設計 表單設計如上,請注意中間的九個(3X3)物件代表棋盤,由Button物件構成,名稱須改為B0~B8,如下圖:
繼承不變的程式碼 以下幾個程式單元與之前的單元相同,打開舊專案複製即可。不是偷懶哦!這叫做『繼承』,程式老是重寫誰等你呀! 首先是匯入的命名空間: 接著是啟動監聽的程式 在啟動按鍵程式中會呼叫Listen副程式,你可以先建立一個程式框架,以免一直受錯誤題是困擾,如: Private Sub Listen End Sub 如果你需要與同學互傳訊息測試時可以加入以下Form_Load程式,你的IP就會顯示於標題列了! 棋盤狀態字串 本遊戲在玩家之間傳遞的是一個棋盤狀態字串,就是九個按鍵B0~B8的Tag屬性值串起來的字串!預設都是"_"就是九個"_",稍後自己下的位置會是圈"O",對手下的位置會是"X"。字串可能變成這樣:"_O_X_O_X_"。 這個設計下兩個玩家都會看到自己在畫圈圈,對手畫的是叉叉,所以各自取得的狀態字串中"O"與"X"應該是相反的,我們會在稍後每次收到資訊時反轉它們。 檢查輸贏的程式 chk 上述字串的作用主要是用來判斷是否有連線,因為每次主動下棋後的結果一定是"O",所以檢查連線的程式只需要檢視"O"的連線,我們設計一個chk副程序,如有連線就回傳True,沒有時回傳False,程式碼如下: 其中C(?)就是對應到按鍵B(?)的Tag值了!C(0)C(1)C(2)就代表最上方的橫向連線,依此類推! 下棋的程式 下棋就是要點選B0~B8的其中一個按鍵,改變空格為圈。請先雙按B0按鍵產生B0_Click事件副程式,再加入共用,讓B1~B8的Click事件都可以共用此副程式,而且應該建立一個控制下棋次序的變數T,輪到自己下時T=True,論到對手時T=False,這個變數必須持續記得,所以要公告為公用(全域)變數,完整程式碼如下: 1.如果Tag不為"_"表示此格已經有棋子,應離開副程式 2.如果T=False表示不是輪到你下,也應離開副程式 3.條件合法時畫圈,註記Tag="O" 4.建立棋盤狀態字串,並檢查勝負(我是不是贏了?) 5.傳送棋盤狀態字串給對手 5.自己下好了輪到對手,T設為False 監聽副程式 Listen 監聽副程式收到對手的棋盤狀態字串(A)之後,首先要檢查對手("O")是否已經連線(我是不是輸了?)。 接著將棋盤狀態字串的圈叉反轉並繪製新棋盤以及重新設定Tag值。 最後將T設為True,表示輪到我可以下棋了! 重玩的按鍵功能 重玩就是將所有狀態歸零!包括圖案與Tag值,清除勝負訊息,還有設定T=True表示我可以開始下棋。 執行畫面大概如下: |
|||||||||