首先要知道遊戲流程,這相當於是程式流程
-->人落子-->贏了嗎-->END
-->沒贏-->換CPU-->檢查本回落子會贏位置
-->不會贏檢查人下一回落子會贏位置
-->任意位置落子
井字棋判定演算法很單純,就是把會贏的狀況作成array,每次落子就用array檢查棋盤現況
比較麻煩的地方在如何在front panel顯示每次落子後棋盤的狀態
當然方法有很多種,我希望可以使用Labview原本就有的東西來顯示
這邊選用了獨立的9顆布林LED (不可以作成array)
布林LED的好處在於可以用布林值標注這個位置是不是已有落子
另外又可以用property改變燈色,在panel顯示出不同家的落子
整個架構就是基本狀態機,包含初始化、iDLE、1P(人下子後判斷)、CPU、end幾個狀態
需要一個array紀錄真實棋盤狀態(因為panel顯示的是獨立布林)、一個array紀錄有效空位(可能也不需要)
另外需要一個整數標記現在要下子的是哪一方
每輪都會停在iDLE等人下在有效的位置
這邊確認下子的方式是讀取鍵盤scancode,用下面code來確認輸入合法及改變棋盤
輸贏判定的code
輸入棋盤狀態跟現在落子方標記
贏棋列表紀錄三個一組的index,檢查棋盤後只要三個都屬於同一方就是贏棋
若是有兩個屬同一方而且第三格未落子,會記錄下來供CPU防守
CPU落子演算法如同一開始的判斷流程