好吧,我正在製作一個簡單的Tic Tac Toe程序。現在我正在使用MouseListener檢查鼠標單擊的位置,並查看鼠標單擊的9個空格中的哪一個。我想檢查一下,以確保矩形檢查工作,所以每次鼠標點擊控制檯將顯示一個9個字母的字符串。這些字母是e =空x = X o = O.但是看起來這個矩形似乎沒有包含任何座標。下面是一些代碼片段:檢查一個點是否包含在一個矩形內時出錯
package com.blackattack.tictactoe;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
public class TicTacToePanel extends JPanel implements MouseListener {
Graphics2D g2d;
Rectangle[] bounds = new Rectangle[9];
TicTacToeLogic board = new TicTacToeLogic();
int STATE = 0;
final int PLAYING = 0;
final int LOSS = 1;
final int WIN = 2;
Win w = new Win(false, "e");
public TicTacToePanel() {
super();
addMouseListener(this);
bounds[0] = new Rectangle(0, 0, getWidth()/3, getHeight()/3);
bounds[1] = new Rectangle(getWidth()/3, 0, getWidth()/3, getHeight()/3);
bounds[2] = new Rectangle((getWidth()/3)*2, 0, getWidth()/3, getHeight()/3);
bounds[3] = new Rectangle(0, getHeight()/3, getWidth()/3, getHeight()/3);
bounds[4] = new Rectangle(getWidth()/3, getHeight()/3, getWidth()/3, getHeight()/3);
bounds[5] = new Rectangle((getWidth()/3)*2, getHeight()/3, getWidth()/3, getHeight()/3);
bounds[6] = new Rectangle(0, getHeight()/3, (getWidth()/3)*2, getHeight()/3);
bounds[7] = new Rectangle(getWidth()/3, (getHeight()/3)*2, getWidth()/3, getHeight()/3);
bounds[8] = new Rectangle((getWidth()/3)*2, (getHeight()/3)*2, getWidth()/3, getHeight()/3);
}
//paintComponent would be here
@Override
public void mouseClicked(MouseEvent e) {
int x = getX();
int y = getY();
if(bounds[0].contains(x, y)) {
board.changeState(0, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[1].contains(x, y)) {
board.changeState(1, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[2].contains(x, y)) {
board.changeState(2, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[3].contains(x, y)) {
board.changeState(3, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[4].contains(x, y)) {
board.changeState(4, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[5].contains(x, y)) {
board.changeState(5, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[6].contains(x, y)) {
board.changeState(6, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[7].contains(x, y)) {
board.changeState(7, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
if(bounds[8].contains(x, y)) {
board.changeState(8, "x");
w = board.isWin();
board.aiPlayerChoose();
w = board.isWin();
}
System.out.println(board.board[0] + " " + board.board[1] + " " + board.board[2] + " " + board.board[3] + " " + board.board[4] + " " + board.board[5] + " " + board.board[6] + " " + board.board[7] + " " + board.board[8]);
}
所以我在這裏檢查,看看是否鼠標在9位和I輸出「遊戲板」的1點擊這裏TicTacToeLogic的一部分,所以你可以有一個更好的瞭解:
public class TicTacToeLogic {
String[] board = { "e", "e", "e", "e", "e", "e", "e", "e", "e" };
public TicTacToeLogic() {
}
public void changeState(int pos, String val) {
board[pos] = val;
}
public void aiPlayerChoose() {
boolean ready = true;
while (ready) {
Random r = new Random();
int which = r.nextInt(8);
if (board[which].equals("e")) {
board[which] = "o";
ready = false;
}
}
}
}
我似乎無法找出問題所在。當我打印板[n]時,它總是以一堆e的形式出現。它是否與我在構造函數中調用getWidth和getHeight有關?在先進的感謝,
安德魯
謝謝,幫助我解決了問題 –