五子棋+人機演算法
最近正在做五子棋,隨便和大家分享一下這過程中的收穫的發現。
首先五子棋的規則很簡單,五子棋是在一個15*15的網格盤上下的,所以代碼第一步先畫出棋盤。這個直接用java里的Graphics來畫直線就可。說一個很尷尬的事(我發現強迫症敲代碼簡直是要命。。。),剛開始謝代碼時由於出於棋盤的美觀(其實都差不多。。。)我把棋盤畫成了21*21的。寫完之後覺得哪樣這種棋盤,於是我又想改回來。。。(作為強迫症患者,一旦有了這個想法,不做是不行的)。問題的關鍵來了,因為我畫棋盤時直接使用具體數值,沒有用全局變數,定義二位數組時也是直接int[21][21]的,所以當我要該某一個參數時就得把所有的值都該一遍。。。(其中的心酸自己體會,哭臉。。。)。
血的教訓:寫代碼一定要盡量用變數代替數值,方便修改,不然你一定會後悔的。
棋盤畫完,實現按鈕的功能,接下來就要寫人機演算法了。
由於是新手就先寫了一個較簡單的權值法的人機演算法。但這個演算法的智能水平很明顯一般是堪優的。
權值法就是把每一個位置的對應的八個方位的情況做一個評估,給它一個權值,最後從中選出最大的一個位置下子。
下面我就和我寫的所謂的人工智慧下一把,????。
https://www.zhihu.com/video/904749793530744832 https://www.zhihu.com/video/904749843178737664這個AI的程度我就不評論了,哈哈哈。有一個很嚴重的bug就是不能判斷出空格情況,比如一個空格左邊兩個右邊兩個敵子,這肯定是最危急的情況,除非自己已有活四子,否則這肯定得下子。這個問題後續我會解決,如果能解決這個問題,最起碼這個AI是可以和它博弈的。後續我還會用其它演算法在寫一個高級人機演算法,敬請期待。。。。。。
對了再附上一個人人對戰的錄屏。
https://www.zhihu.com/video/904752522676297728推薦閱讀:
※五子棋和圍棋有什麼區別?
※五子棋先下的一定贏嗎?如何證明?
※下圍棋的人是如何看待五子棋?
※下五子棋有什麼制勝方法嗎?
※五子棋下得好,智商就高嗎?或者說學習能力更強嗎?