Java程式設計 五子棋(二) 新增棋子

2021-09-11 02:19:44 字數 1677 閱讀 8663

如何新增棋子

我們平時也在不同平台上玩過類似的棋盤遊戲,一般的棋盤遊戲的玩法都是在你想下的位置點一下,系統就會在你點的位置下乙個棋子。五子棋的棋盤很規則,都是乙個個正方形格仔,點乙個位置便會在那附近的格仔角下一顆棋子。

那麼怎麼判斷是哪個角呢?一般簡單的定義一下就能解決。以乙個格仔為例,假設點在這個格仔中,位置為(x,y),而這個格仔的某個頂點位置已知(一般是左上角),比如左上角位置為(a,b),格仔邊長為l,那麼把格仔橫著豎著平均分成四份,分別對應四個角即可:

具體的邏輯用**表現為:

if(x所以當我們按下某乙個位置後,首先需要判斷按在哪乙個格仔中,即根據x,y確定a,b,如果判斷格仔位置的基準是左上角位置,那麼棋盤最左上角是 (m,n),只需要用(x-m)/l和(y-n)/l就能得到第幾行第幾列,進而得出a和b。

知道要在哪個點繪製棋子後,下面就需要繪製棋子了。為了防止繪製出的棋子被系統不斷重新整理介面重新整理掉,因此我們需要在背景中繪製棋子,即直接將棋子繪製在背景中,繪製的顏色根據具體情況而定,棋子半徑要小於l/2,這樣棋子才不會重疊。

繪製棋子

一般為了方便,我們會設立乙個二維陣列,大小依據棋盤而定,比如你的棋盤是19×19的,那就定義乙個19×19的陣列,用來存放每個位置是否有棋子,也可以再多一維存放棋子的顏色,或者嫌麻煩的話另定義乙個陣列存放,或者直接自定義乙個棋子類,用陣列佇列存放。

在重寫jframe的paint類時,繪製完背景的棋盤後,可以緊接著繪製棋子,這樣你下乙個棋子系統只需要更改陣列的引數,jframe會自動繪製出棋子。

當然要獲得按下的位置,我們還需要給jframe新增乙個滑鼠監聽,這些筆者就不再贅述了,直接看**吧。

自定義的棋子類chess:

class chess

}

自定義的監聽類mymouselistener:

class mymouselistener implements mouselistener 

public void mouseclicked(mouseevent e)

public void mousepressed(mouseevent e) else

} else

} if (main.chess[hang][lie].color == 2) else

main.repaint();// 重新整理棋盤

} public void mousereleased(mouseevent e)

public void mouseentered(mouseevent e)

public void mouseexited(mouseevent e)

}

主類main:

Java實現五子棋

一定義常量類 public class constant二定義我們的棋盤類 public class chess private void playchess 錯誤輸入 if str.length 2 正常輸入的情況 判斷是否越界 if isoverstep str else end if 判斷是否...

pythonAI五子棋 二

以為第二篇很晚到來,主要是我的想法是等我把機器學習學個大概之後再回來優化。不過最近在深入的學習python,學到了一些pythonic的 風格,所以決定回來重構一下我的五子棋 這次主要做了 1.優化了我的 使得 更加簡潔美觀。可讀性更高。比如這段優化前的函式 def robotchess self ...

五子棋練習(二)

這是主程式的部分。到這裡已經可以實現黑白輪流落子了。import chess import tkinter as tk import time 生成視窗和畫布 root tk.tk cv tk.canvas root,width 980,height 700,bg c09900 cv.create ...