【问题标题】:Java Tic Tac Toe GUIJava井字游戏图形用户界面
【发布时间】:2013-08-19 17:17:17
【问题描述】:

代码工作正常,但问题是我想要 3 列和 3 行。但输出显示 6 列而不是 3 行和 3 列

这是出现问题的代码.. 这是一个主类:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import games.board.Board;
import games.board.Cell;
import games.board.Mark;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;



public class TicTacToeGUIGame extends JFrame  {

/**
 * @param args
 */
private Board gb;
private int turn;
private void takeTurn(Cell c) {
    Mark curMark = (turn++ % 2 == 0)? Mark.NOUGHT
    : Mark.CROSS;
    gb.setCell(curMark, c.getRow(), c.getColumn());
    }
private TicTacToeGUIGame() {
    gb = new Board(3, 3, new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
    Cell c = (Cell) ae.getSource();
    takeTurn(c);
    }
    });
    this.add(gb);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setTitle("TIC-TAC-TOE");
    this.setSize(300, 300);
    this.setVisible(true);
    }


public static void main(String[] args) {
    // TODO Auto-generated method stub
    SwingUtilities.invokeLater( new Runnable () {
        public void run() { new TicTacToeGUIGame(); }
        });

}

}

这是一个板类:

package games.board;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class Board extends JPanel {
private Cell[][] cells;
public Board(int rows, int columns) {
cells = new Cell[rows][columns];
for( int r = 0; r < cells[0].length; r++ ) {
for (int c = 0; c < cells[1].length; c++) {
cells[r][c] = new Cell(r,c);
}
}
}
public Board(int rows, int columns, ActionListener ah) {
    cells = new Cell[rows][columns];
    this.setLayout(new GridLayout());
    for( int r = 0; r < cells.length; r++ ) {
    for (int c = 0; c < cells[r].length; c++) {
    cells[r][c] = new Cell(r,c);
    this.add(cells[r][c]);
    cells[r][c].addActionListener(ah);
    }
    }
    }
public void setCell(Mark mark, int row, int column) throws
IllegalArgumentException {
if (cells[row][column].getContent() == Mark.EMPTY)
cells[row][column].setContent(mark);
else throw new IllegalArgumentException("Player already there!");
}
public Cell getCell(int row, int column) {
return cells[row][column];
}
public String toString() {
StringBuilder str = new StringBuilder();
for( int r = 0; r < cells.length; r++ ) {
str.append("|"); 


for (int c = 0; c < cells[r].length; c++) {
switch(cells[r][c].getContent()) {
case NOUGHT:
    str.append("O");
    break;
    case CROSS:
    str.append("X");
    break;
    case YELLOW:
    str.append("Y");
    break;
    case RED:
    str.append("R");
    break;
    case BLUE:
    str.append("B");
    break;
    case GREEN:
    str.append("G");
    break;
    case MAGENTA:
    str.append("M");
    break;
    case ORANGE:
    str.append("M");
    break;
    default: //Empty
    str.append("");
    }
    str.append("|");
    }
    str.append("\n");
    }
    return str.toString();

}

}

【问题讨论】:

  • 那是很多代码。如果您编辑代码并且只包含与问题相关的部分,您会更快地获得帮助。例如,三个枚举都不相关。
  • 安德鲁谢谢..我编辑了它..
  • @user2694776 接受我的方式,然后几秒钟后不接受。 ;) 哈哈。来吧,伙计们有 90k 代表,他不需要它。

标签: java swing tic-tac-toe


【解决方案1】:

我想要 3 列和 3 行。但输出显示 6 列

您需要为 GridLayout 指定适当的参数:

this.setLayout(new GridLayout(0, 3));

这将告诉网格包含 3 列。行数取决于您添加的组件数。

【讨论】:

    【解决方案2】:

    我想要 3 列和 3 行...但输出显示 6 列

    使用,this.setLayout(new GridLayout(nRows, nColumns));

    根据您想要的列数和行数更改nRowsnColumns,即,如果您想要一个20x20 游戏,您将使用this.setLayout(new GridLayout(20, 20));

    【讨论】:

      【解决方案3】:

      更改您的 Board 课程:

      for( int r = 0; r < cells[0].length; r++ ) {
          for (int c = 0; c < cells[1].length; c++) {
            cells[r][c] = new Cell(r,c);
         }
       }
      

      for( int r = 0; r < cells[0].length; r++ ) {
          for (int c = 0; c < cells[r].length; c++) {
            cells[r][c] = new Cell(r,c);
         }
       }
      

      【讨论】:

      • i.qkme.me/3vjgab.jpg 换行符和空格将有助于使您的代码更清晰。它将有助于与原版进行比较,并且更易于阅读。
      • @RyanAmos 我曾经在一行上写了一个完整的程序来取乐。 public class example { public static void main(String args[]) { System.out.println("hahaha"); } } - 相当难以阅读。
      • 感谢您修复它! @DummyCode 这主要是样板代码,因此很容易阅读。嵌套的 for 循环开始变得更少样板,因此如果没有空格就更难阅读。
      猜你喜欢
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多