我正在創建一個井字游戲,但在這種情況下,它有兩個以上的玩家。我完全不確定如何去做,并且進行了多次迭代。它是通過 JButtons gridlayout 完成的。對于普通的tictactoe,它作業得很好:
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(int i=0;i<9;i ) {
if(e.getSource()==buttons[i]) {
if(pTurn) {
if(buttons[i].getText()=="") {
buttons[i].setForeground(new Color(255,0,0));
buttons[i].setText("X");
pTurn=false;
txt.setText("O turn");
checkCondition();
}
}
else {
if(buttons[i].getText()=="") {
buttons[i].setForeground(new Color(0,0,255));
buttons[i].setText("O");
pTurn=true;
txt.setText("X turn");
checkCondition();
}
}
}
}
}
});
但是,我對 3 玩家的實施不起作用。我的邏輯有偏差,但我不確定在哪里。
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(int i=0;i<size;i ) {
if(e.getSource()==buttons[i]) {
for (int k = 0; k < col_row; k ) {
for (int j = k 1; j < col_row; j ) {
if (players[k]) {
if(buttons[i].getText()=="") {
buttons[i].setForeground(new Color(0,0,255));
buttons[i].setText(pIcon[k]);
players[k]=false;
txt.setText(pIcon[j] " turn");
checkCondition();
}
}
else {
if(buttons[i].getText()=="") {
buttons[i].setForeground(new Color(0,0,255));
buttons[i].setText(pIcon[j]);
players[k]=true;
txt.setText(pIcon[j 1] " turn");
checkCondition();
}
}
}
}
}
}
}
});
在這種情況下, col_row 只是玩家的數量。Players[] 是一個布爾播放器陣列。我的邏輯是它檢查了他們是否已經去了,但它并沒有真正起作用。pIcon[] 是一個玩家角色陣列(X,O,A,B,C...)。我不確定如何解決這個問題。

uj5u.com熱心網友回復:
兩個播放器邏輯(已實作)
- 標記第一個活躍玩家
- 單擊時遍歷所有欄位,直到識別出單擊的欄位
- 如果輪到玩家 A 輪到玩家 A否則輪到玩家 B
n播放器邏輯(根據您的布爾陣列想法)
- 在布爾陣列中標記第一個活躍玩家
- 單擊時遍歷所有欄位,直到識別出單擊的欄位
- 遍歷所有玩家直到找到活躍玩家k然后讓玩家 k 轉身并標記下一個活躍玩家j = (k 1) 模數玩家
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for(int i=0;i<size;i ) {
if(e.getSource()==buttons[i]) {
// iterate over players to find next active player
for (int k = 0; k < 3; k ) { // 3 players
if (players[k]) {
// next active player found
if(buttons[i].getText()=="") {
buttons[i].setForeground(new Color(0,0,255));
buttons[i].setText(pIcon[k]);
players[k]=false;
int j = (k 1) % 3; // index for next active player
players[j] = true; // mark next active player
txt.setText(pIcon[j] " turn");
checkCondition();
break; // leave inner loop
}
}
}
}
}
}
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/491724.html
