ADD file via upload

main
nxist2202005031 1 year ago
parent e838b6eb59
commit ab59e73205

@ -0,0 +1,252 @@
package view;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.*;
import util.Constant;
import model.Block;
/**
*
*
*/
//定义自定义对话框类Zidingyi继承自JDialog实现ActionListener接口
public class Zidingyi extends JDialog implements ActionListener{
// 创建多个面板用于不同功能设置
JPanel jp_sudu=new JPanel();
JPanel jp_rank=new JPanel();
JPanel jp_she=new JPanel();
JPanel jp_b=new JPanel();
// 创建单选按钮用于等级选择
JRadioButton jr_rank1=new JRadioButton("初级");
JRadioButton jr_rank2=new JRadioButton("中级");
JRadioButton jr_rank3=new JRadioButton("高级");
// 创建滑动条用于速度调节
JSlider jsl=new JSlider(1,10);//滑动框1-10
int newspeed;// 存储新的速度值
Block block;// 引用Block类对象用于游戏中的方块
GameCanvas gc;// 引用GameCanvas类对象用于游戏界面显示
ButtonGroup bg_rank=new ButtonGroup(); // 创建ButtonGroup管理单选按钮
JLabel tj_sudu=new JLabel("下落速度");// 速度标签
// 创建复选框用于附加功能开关
JCheckBox jc1=new JCheckBox("方块是否自动上涨");
JCheckBox jc2=new JCheckBox("游戏过程是否播放声音");
JCheckBox jc3=new JCheckBox("更换背景");
// 图片资源引用
ImageIcon image=new ImageIcon(Constant.backGround1);
JLabel label=new JLabel(image);// 使用图片作为背景的标签
// 构造函数初始化对话框和组件
public Zidingyi(JFrame j,String s,boolean a,Block block,GameCanvas gc){
super(j,s,a);
this.setBounds(0,170, 480, 350);// 设置对话框大小和位置
this.setVisible(false);// 初始时对话框不可见
this.setResizable(false);// 对话框不可调整大小
this.setLayout(null); // 使用null布局管理器
this.block=block;// 初始化Block对象引用
this.gc=gc;// 初始化GameCanvas对象引用
label.setBounds(0, 0, this.getWidth(), this.getHeight());// 设置背景图片大小与对话框一致
// 添加各个面板到对话框中
add1();
add2();
add3();
add4();
}
/**
*
*/
public void add1(){
jp_sudu.setBounds(0, 40, 500, 80);// 设置面板位置和大小
jp_sudu.add(tj_sudu);
tj_sudu.setFont(new Font("华文行楷", Font.BOLD, 15));// 设置字体
jsl.setValue(11-Constant.step);// 设置滑动条初始值
newspeed=11-jsl.getValue();// 获取新的速度值
// 添加滑动条监听器以响应速度变化
jsl.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent ce) {
// TODO Auto-generated method stub
newspeed=11-jsl.getValue();// 更新速度值
}
});
jsl.setMajorTickSpacing(9);// 设置主刻度间隔
jsl.setMinorTickSpacing(1);// 设置次刻度间隔
jsl.setPaintTicks(true);// 显示刻度标记
jsl.setPaintLabels(true);// 显示刻度标签
jp_sudu.add(jsl);
// 添加速度说明标签
JLabel tj_sudu1=new JLabel("速度1到10依次加快");
tj_sudu1.setFont(new Font("华文行楷", Font.BOLD, 15));
// 添加所有组件到面板并将其添加到对话框中
jp_sudu.add(tj_sudu1);
this.add(jp_sudu);
}
/**
*
*/
public void add2(){
// 设置面板位置、大小和组件
JPanel jp_rank=new JPanel();
jp_rank.setBounds(90, 140, 300, 30);
JLabel tj_shape=new JLabel("方块形状");
tj_shape.setFont(new Font("华文行楷", Font.BOLD, 15));
int i=Block.get_addl();// 获取当前难度级别
// 单选按钮监听器及设置
jr_rank1.addActionListener(this);
jr_rank1.setActionCommand("初级");
jr_rank2.addActionListener(this);
jr_rank2.setActionCommand("中级");
jr_rank3.addActionListener(this);
jr_rank3.setActionCommand("高级");
// 根据当前等级预选单选按钮
if(i==7)
jr_rank1.setSelected(true);
else if(i==10)
jr_rank2.setSelected(true);
else
jr_rank3.setSelected(true);
bg_rank.add(jr_rank1);
bg_rank.add(jr_rank2);
bg_rank.add(jr_rank3);
jp_rank.add(tj_shape);
jp_rank.add(jr_rank1);
jp_rank.add(jr_rank2);
jp_rank.add(jr_rank3);
// 设置单选按钮位置
jr_rank1.setBounds(0, 0, 80, 30);
jr_rank2.setBounds(90, 0, 80, 30);
jr_rank3.setBounds(180, 0, 80, 30);
this.add(jp_rank);
}
/**
*
*/
public void add3(){
JPanel jp_she=new JPanel();
// 复选框监听器及设置
jp_she.setBounds(20, 190, 400, 30);
jc1.addActionListener(this);
if(MyFrame.high==true)
jc1.setSelected(true);
else
jc1.setSelected(false);
jc1.setBounds(0, 0, 160, 30);
jp_she.add(jc1);
jc2.addActionListener(this);
jp_she.add(jc2);
if(MyFrame.isMusic==true)
jc2.setSelected(true);
else
jc2.setSelected(false);
if(MyFrame.changeBack==true)
jc3.setSelected(true);
else
jc3.setSelected(false);
jc3.addActionListener(this);
// 添加复选框到面板
jp_she.add(jc3);
this.add(jp_she);
}
/**
*
*/
public void add4(){
JPanel jp_b=new JPanel();
jp_b.setBounds(100, 240, 300, 40);
JButton jb_y=new JButton("确定");
jb_y.addActionListener(this);
jp_b.add(jb_y);
JButton jb_n=new JButton("取消");
jb_n.addActionListener(this);
jp_b.add(jb_n);
// 创建包含所有面板的容器面板,并添加到对话框中
JPanel jp_zi=new JPanel();
jp_zi.setLayout(null);
jp_zi.setBounds(0, 0, this.getWidth(), this.getHeight());
jp_zi.add(jp_sudu);
jp_zi.add(jp_rank);
jp_zi.add(jp_she);
jp_zi.add(jp_b);
this.add(jp_zi);
}
// 实现ActionListener接口方法
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() instanceof JButton) {
int i=Block.get_addl();
String buttonCommand = e.getActionCommand();//获取信息
if (buttonCommand.equals("确定")) {
// 处理确定按钮点击事件
String actionCommand = bg_rank.getSelection().getActionCommand();
// 根据用户选择的等级更新Block对象的等级属性
if (actionCommand.equals("初级") ) {
Block.set_addl(7);
} else if (actionCommand.equals("中级")) {
Block.set_addl(10);
} else if (actionCommand.equals("高级")) {
Block.set_addl(13);
}
// 更新附加功能状态
if (jc1.isSelected()) {
MyFrame.high=true;
}else
MyFrame.high=false;
if (!jc2.isSelected()) {
MyFrame.isMusic=false;
}else
MyFrame.isMusic=true;
if(jc3.isSelected()){
MyFrame.changeBack=true;
MyFrame.background = new ImageIcon(Constant.backGround2);
MyFrame.setBackGround();}
else
{MyFrame.changeBack=false;
MyFrame.background = new ImageIcon(Constant.backGround1);
MyFrame.setBackGround();}
// 更新速度值和游戏相关属性
Constant.step=newspeed;
jsl.setValue(11-Constant.step);
MyFrame.rank=11-Constant.step;
MyFrame.jt10.setText("等级:"+MyFrame.rank);
this.dispose();
} else if (buttonCommand.equals("取消")) {
// 恢复原有设置并关闭对话框
Block.set_addl(i);
if(i==7)
jr_rank1.setSelected(true);
else if(i==10)
jr_rank2.setSelected(true);
else
jr_rank3.setSelected(true);
this.dispose();
}
}
}}
Loading…
Cancel
Save