本課簡介
本課為五子棋系列第六課此次會先來修復上次課程最後發現的 Bug
接著稍微整理一下一些遊戲邏輯的程式碼
結尾時來為最後的課程做一些準備!
教學影片
注意:影片有高畫質 720P 的選項,可以看得更清楚喔!重點提示
製作重點
- Board 內的邊界判斷 Bug 其實是因為沒有在 Board 內限定棋盤交叉點數目造成的
- 增加一個 class Game 來處理遊戲相關邏輯,使得程式碼更有結構性
- 讓 Board 能夠回答在某個給定座標點上放置的棋子是甚麼顏色
製作步驟
- 解決邊界 Bug
- 在 Board 內新增一個常數 NODE_COUNT = 9
- 在 findTheClosetNode(int x, int y) 內,判斷 findTheClosetNode(int pos) 傳回的數字是不是介於 0 到 NODE_COUNT - 1 之間。若不是就回傳 NO_MATCH_NODE。
- 新增一個遊戲管理 class Game
- 把 Form1 中 board 跟 nextPieceType 兩個變數移到 Game 裡面
- 在 Form1 內新增一個 Game 的變數 game
- 新增一個 public method,CanBePlaced(int x, int y),內容就是呼叫 board.CanBePlaced(x, y)
- 新增一個 public method,PlaceAPiece(int x, int y)
- 把 Form1 內 MouseDown 的程式碼貼到這裡
- 把 e.x 與 e.y 改成 x 跟 y
- 把 Controls.Add 的程式碼刪除
- 讓此 method 把棋子往外 return
- (選擇性) 把 nextPieceType 都改成 currentPlayer
- 修改 Form1 的程式碼
- 把原本呼叫 board 的地方都改成 game
- 把 MouseDown 內處理 nextPieceType 的程式碼刪除
- 讓 Piece 回傳自己的 PieceType (顏色)
- 在 Piece 內新增一個 public abstract method,GetPieceType(),回傳 PieceType
- 在 BlackPiece 內實作 GetPieceType,回傳 PieceType.BLACK
- 在 WhitePiece 內實作 GetPieceType,回傳 PieceType.WHITE
- 在 PieceType 內新增一個常數,NONE
- 在 Board 內新增一個 public method,GetPieceType(int nodeIdX, int nodeIdY),回傳 PieceType
- 檢查 pieces[nodeIdX, nodeIdY] 是否為 null,是的話就回傳 PieceType.NONE
- 不是的話回傳 pieces[nodeIdX, nodeIdY].GetPieceType()
練習
- 要怎麼在 Game 裡面判斷遊戲是否出現五顆相同顏色的棋子連成一條線?
- 有一方勝利後,要如何顯示給使用者知道?
相關資訊連結
多型(C# 程式設計手冊) | Microsoft Docs
https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/classes-and-structs/polymorphism
沒有留言:
張貼留言