|
|
|
@ -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();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}}
|
|
|
|
|
|