首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建一个for循环来在meta tic tac toe板中绘制矩形,以用于大小和位置正确的按钮?

如何创建一个for循环来在meta tic tac toe板中绘制矩形,以用于大小和位置正确的按钮?
EN

Stack Overflow用户
提问于 2015-05-21 02:46:44
回答 1查看 103关注 0票数 0
代码语言:javascript
运行
复制
  import java.io.*;
  import java.util.*;
  import java.awt.*;
  import java.applet.*;
  import java.awt.event.*;

  public class MetaTicTacToe extends Applet implements MouseListener {
  Graphics buffer;
  Image img;
  protected int height, width;
  Rectangle[][] rectangles = new Rectangle[9][9];
  int[][] squarecheck = new int[9][9];
  //False = X, True = O
  boolean turn;


  public void makeButtons() {
    height = getSize().height;
    width = getSize().width;
    for (int x = 0; x < 9; x++) {
      for (int y = 0; y < 9; y++) {
      //   rectangles[x][y] = new Rectangle(width/9+10

      }
    }
  }


  public void init() {
    //0 = Empty
    //1 = X's
    //2 = O's
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j < 9; j++) {
        squarecheck[i][j] = 0;
      }
    }
    addMouseListener(this);
  }
  public void paint(Graphics g) {
    height = getSize().height;
    width = getSize().width;
    //Larger 3x3 
    g.drawRect(10,10,width-20,height-20);
    g.fillRect(10,height/3,width-20,5);
    g.fillRect(10,height/3*2,width-20,5);
    g.fillRect(width/3,10,5,height-20);
    g.fillRect(width/3*2,10,5,height-20);

    //TopLeft 3x3 
    g.drawLine(15,height/9,width/3-5,height/9);
    g.drawLine(15,height/9*2,width/3-5,height/9*2);
    g.drawLine(width/9,15,width/9,height/3-5);
    g.drawLine(width/9*2,15,width/9*2,height/3-5);

    //LeftMiddle 3x3
    g.drawLine(15,height/9*4,width/3-5,height/9*4);
    g.drawLine(15,height/9*5,width/3-5,height/9*5);
    g.drawLine(width/9,height/3+10,width/9,height/3*2-5);
    g.drawLine(width/9*2,height/3+10,width/9*2,height/3*2-5);

    //BottomLeft 3x3
    g.drawLine(15,height/9*7,width/3-5,height/9*7);
    g.drawLine(15,height/9*8,width/3-5,height/9*8);
    g.drawLine(width/9,height/3*2+10,width/9,height/3*3-15);
    g.drawLine(width/9*2,height/3*2+10,width/9*2,height/3*3-15);

    //TopMiddle 3x3
    g.drawLine(width/9*4,15,width/9*4,height/3-5);
    g.drawLine(width/9*5,15,width/9*5,height/3-5);
    g.drawLine(width/3+10,height/9,width/3*2-5,height/9);
    g.drawLine(width/3+10,height/9*2,width/3*2-5,height/9*2);

    //Middle 3x3
    g.drawLine(width/9*4,height/3+10,width/9*4,height/3*2-5);
    g.drawLine(width/9*5,height/3+10,width/9*5,height/3*2-5);
    g.drawLine(width/3+10,height/9*4,width/3*2-5,height/9*4);
    g.drawLine(width/3+10,height/9*5,width/3*2-5,height/9*5);

    //BottomMiddle 3x3
    g.drawLine(width/3+10,height/9*7,width/3*2-10,height/9*7);
    g.drawLine(width/3+10,height/9*8,width/3*2-10,height/9*8);
    g.drawLine(width/9*4,height/3*2+10,width/9*4,height/3*3-15);
    g.drawLine(width/9*5,height/3*2+10,width/9*5,height-15);

    //TopRight 3x3
    g.drawLine(width/9*7,15,width/9*7,height/3-5);
    g.drawLine(width/9*8,15,width/9*8,height/3-5);
    g.drawLine(width/3*2+10,height/9,width-15,height/9);
    g.drawLine(width/3*2+10,height/9*2,width-15,height/9*2);

    //RightMiddle 3x3
    g.drawLine(width/9*7,height/3+10,width/9*7,height/3*2-5);
    g.drawLine(width/9*8,height/3+10,width/9*8,height/3*2-5);
    g.drawLine(width/3*2+10,height/9*4,width-15,height/9*4);
    g.drawLine(width/3*2+10,height/9*5

我正在尝试编写一个meta tic tac toe程序,目前正在努力让按钮在方块中选择x或o时进行注册。我如何使用for循环来编写这些按钮,以便它们可以正确缩放到当时的电路板大小?

EN

回答 1

Stack Overflow用户

发布于 2015-05-21 08:21:34

为此,我们通常使用LayoutManagers。它们可以嵌套以获得所需的行为。下面是一个游戏面板的实现可能是什么样子。它使用按钮,为了让它看起来很好,你必须确保宽度与高度相同:

代码语言:javascript
运行
复制
public class GamePanel extends JPanel {

  private int size, count;
  private JButton[] buttons;
  private ClickListener listener = null;
  private boolean[] occupied;

  public GamePanel(int size) {
    this.size = size;
    reset();
  }

  public void reset() {
    removeAll();
    count = 0;
    buttons = new JButton[size * size];
    occupied = new boolean[size * size];
    setLayoutManager(new GridLayout(size, size));
    for (int i = 0; i < buttons.length; i++) {
      buttons[i] = new JButton();
      buttons[i].addActionListener(new MyActionListener(i));
      add(buttons[i]);
    }
  }

  public void setClickListener(ClickListener cl) {
    this.listener = cl;
  }

  public void setEnabled(boolean b) {
    for (int i = 0; i < buttons.length; i++) {
      buttons[i].setEnabled(b);
    }
    super.setEnabled(b);
  }

  // TODO add getters ... ommitted

  public interface ClickListener {
    public void buttonClicked(int index);
  }

  private class MyActionListener implements ActionListener {
    private int i;    
    public MyActionListener(int i) {
      this.i = i;
    }
    public void actionPerformed(ActionEvent event) {
      if (occupied[i])
        return;
      buttons[i].setText(count++ % 2 == 0 ? "X" : "O");
      occupied[i] = true;
      if (listener != null)
        listener.buttonClicked(i);
    }
  }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30357982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档