问题描述
我正在写简单的tictactoe游戏。 一切正常,直到我转弯为止。 我创建了开关盒以在X和O形之间切换。 不幸的是,当我单击第一个单元格时,它绘制X,但随后的每个单元格绘制Os。
这是主类:
public class TicTacToe_10 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JFrame ticTacToe = new Game_frame();
ticTacToe.setTitle("TicTacToe Game");
ticTacToe.setSize(600, 600);
ticTacToe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ticTacToe.setLocationRelativeTo(null);
ticTacToe.setVisible(true);
}
这是我的带有Click类的Cell类,其中包含开关盒:
public class Cell extends JPanel{
//dial of cell
protected static String dial="";
String cturn=getTurn();
public Cell(){
setBorder(new LineBorder(Color.black,1));
addMouseListener(new Click());
}
//get and set dials
public static String getDial(){
return dial;
}
public void setDial(String d){
dial=d;
repaint();
}
//defining shapes
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
if (dial.equals("X")){
g.drawLine(10, 10, getWidth()-10, getHeight()-10);
g.drawLine(getWidth()-10, 10, 10, getHeight()-10);
}
if(dial.equals("O")){
g.drawOval(10, 10, getWidth()-20, getHeight()-20);
}
}
private class Click extends MouseAdapter
{
@Override
public void mouseClicked(MouseEvent e)
{
// if the cell is empty
if (dial.equals(""))
setDial(cturn);
else
{
switch (cturn) {
case "X":
cturn="O";
setDial(cturn);
break;
case "O":
cturn="X";
setDial(cturn);
break;
}
}
}
}
}
还有game_frame类,仅包含单元格:
public class Game_frame extends JFrame{
private static String turn="X";
//cell grid
private Cell[][] cells = new Cell[3][3];
public Game_frame(){
JPanel panel = new JPanel (new GridLayout(3,3,0,0));
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
panel.add(cells[i][j] = new Cell());
panel.setBorder(new LineBorder (Color.red,1));
add(panel,BorderLayout.CENTER);
}
public static String getTurn(){
return turn;
}
}
1楼
可能是您做错了什么吗? 但是我真的不知道,因为我试图测试您的代码,但是由于缺少一种方法而无法正常工作:/我认为应该是这样的:
switch (dial) {
case "X":
cturn="O";
setDial(cturn);
break;
case "O":
cturn="X";
setDial(cturn);
break;
}
2楼
对不起,如果我误解了代码,我觉得应该拨入开关。
else
{
switch (dial) {
case "X":
cturn="O";
setDial(cturn);
break;
case "O":
cturn="X";
setDial(cturn);
break;
}
}