2013-02-18 67 views
-3

我正在用Java寫我的第一個自己的國際象棋遊戲。 我的代碼已經適用於兩名玩家,從鍵盤手動播放,我想將其擴展爲針對電腦遊戲的玩家。JAVA中的隨機動作

我的問題是,我從來沒有處理隨機操作。 在棋盤上移動一塊棋子的方法,需要接收4個輸入: 兩個棋子的棋子位置,以及兩個棋子上的目標棋子。

選擇錯誤的輸入是可以的,因爲movePiece方法已經檢查整數是否超出棋盤邊界,它們真的達到了當前棋手的顏色,協調中有一塊棋子並且它不是空的等

但是,我怎麼隨機獲得這4個整數?我如何讓他們儘可能接近「真實」的投入(所以我不花很多時間去取消不良投入的資格)?

非常感謝:d

+5

嗯..奇怪的方法在這裏。國際象棋不應該隨意移動棋盤上的棋子。有很多國際象棋遊戲庫。你爲什麼不嘗試在你的遊戲中使用其中的一個? – Averroes 2013-02-18 13:06:36

+0

是的,正如Averroes所說,你必須讓電腦像人類一樣思考。 – 2013-02-18 13:09:28

+0

我需要隨機動作來模擬「計算機」與玩家對戰,但我不需要複雜的算法。只是一些移動件。 – Jjang 2013-02-18 13:16:49

回答

2

Java提供至少兩個選項來生成隨機值:

http://docs.oracle.com/javase/6/docs/api/java/util/Random.html http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#random()

例如通過4中得到界的隨機INT值:

int x = new Random().nextInt(4); 
int y = (int) (Math.random() * 4); 

System.out.println(x + " " + y); 

>> 2 3 
+0

真正的隨機數字:http://stackoverflow.com/a/381043/279511 – tbsalling 2013-02-18 13:10:30

+0

看到這一點,但不明白如何使用它,以得到我想要的... – Jjang 2013-02-18 13:11:13

+0

在答案中增加了一個例子。 – Raman 2013-02-18 13:21:09

1

如果你真的想建立一個電腦玩家誰只是移動約隨機的,我認爲這將是更好的做這樣的:

  1. 隨機選擇在董事會
  2. 計算現有的棋子之一一切法律目的地到該棋子可以移動
  3. 如果沒有法律的目的地,選擇一塊新的先前未選定的作品之中
  4. 隨機選擇的計算法律目的地之一

然而,讓計算機玩家移動隨機左右相當愚蠢。電腦玩家需要有某種形式的邏輯來比較兩種動作中的哪一種更好。實現這樣的邏輯可能是相當複雜的,你可能會更好地使用國際象棋庫,正如有人在評論中提出的那樣。

+0

這也是一個好主意。謝謝 – Jjang 2013-02-18 13:41:34

0

你不需要4個整數。你只需要1

這樣做的一種方式:

  1. 反覆調整的棋子。
  2. 對於每件作品,確定其可用移動並將所有可用移動放在列表中。
  3. 從列表中隨機選擇一個動作(如果感覺如此傾向,則選擇非隨機動作)。