gpt4 book ai didi

java - 在面板和主机之间发送信息

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:28 24 4
gpt4 key购买 nike

我的计算机科学类(class)的期中作业是我必须创建一个井字棋游戏。我有 9 个代表图 block 的单独 JPanel 对象,所有对象都具有 int 值“turn”,用于确定将哪个图形放入面板中。我的问题是,我需要这样做,以便当您单击面板中的按钮时,它会更改框架内所有 CellPanel 对象的转动值,而不仅仅是它的该实例,以便下次您使用面板时,它会放置一个新图形,而不是与以前相同的图形。

我的 Mid1 类的主要方法:

import java.awt.*;
import javax.swing.*;

public class Mid1 extends JFrame {
public Mid1() {
setLayout(new GridLayout(3, 3));

CellPanel panel1 = new CellPanel();
add(panel1);
CellPanel panel2 = new CellPanel();
add(panel2);
CellPanel panel3 = new CellPanel();
add(panel3);
CellPanel panel4 = new CellPanel();
add(panel4);
CellPanel panel5 = new CellPanel();
add(panel5);
CellPanel panel6 = new CellPanel();
add(panel6);
CellPanel panel7 = new CellPanel();
add(panel7);
CellPanel panel8 = new CellPanel();
add(panel8);
CellPanel panel9 = new CellPanel();
add(panel9);
}

public static void main(String[] args) {
Mid1 frame = new Mid1();
frame.setTitle("mid1");
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null); // Center the frame
frame.setVisible(true);

}
}

我的 CellPanel 类:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

class CellPanel extends JPanel implements ActionListener{
Image cross = new ImageIcon("image/x.gif").getImage();
Image not = new ImageIcon("image/o.gif").getImage();
JButton button;
int turn = 0;
int draw;

public CellPanel(){
BorderLayout layout = new BorderLayout();
setLayout(layout);
button = new JButton("Take");
button.setPreferredSize(new Dimension(0,20));
button.addActionListener(this);
this.add(button, layout.SOUTH);
}

public void setTurn(int t){
turn = t;
}

public int getTurn(){
return turn;
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

if (draw == 1)
g.drawImage(cross, 0, 0, getWidth(), getHeight(), this);
if (draw == 2)
g.drawImage(not, 0, 0, getWidth(), getHeight(), this);

System.out.println(turn);

/*int mode = (int)(Math.random() * 3);

if (mode == 0) {
g.drawImage(cross, 0, 0, getWidth(), getHeight(), this);
}
else if (mode == 1) {
g.drawImage(not, 0, 0, getWidth(), getHeight(), this);
}*/
}

@Override
public void actionPerformed(ActionEvent e) {
switch(turn) {
case 0:
draw = 1;
this.repaint();
turn = 1;
break;
case 1:
draw = 2;
this.repaint();
turn = 0;
break;
default: turn = 0;
break;
}
this.remove(button);
}
}

最佳答案

使用observer pattern让每个CellPanel知道游戏状态何时发生变化。 ;建议几种实现 here 。尽管 CellPanel 可能会有效地扩展 JPanel 来建立 preferred size ,它仍然可以实现Observer观察者。您的游戏模型应该通知监听单元重新绘制自己,可以扩展 Observable

关于java - 在面板和主机之间发送信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26066032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com