📄 design.java
字号:
import java.awt.*; //导入awt包
import java.awt.event.*; //关闭awt包
import javax.swing.*; //导入swing包
public class Design extends JApplet //设置的主类
{
JTabbedPane tab=new JTabbedPane(); //定义的选择面板
Container c=this.getContentPane(); //定义的面板变量
public void init()
{
tab=new JTabbedPane(); //实例化选择的面板
tab.addTab("华容道",new DesignRoad()); //将华容道面板添加到选择面板中
tab.addTab("翻板",new DesignColor()); //将翻板面板添加到选择面板中
c.add(tab);
}
}
//华容道类
class DesignRoad extends JApplet
{
//定义i,j坐标
int i=0,j=0;
//定义总次数,显示结果,标签按钮的移动大小
int count=0,state=0,btnNull;
JButton btnRoad[]=new JButton[16]; //向拼板中实力化16个按钮
JLabel labRoad; //定义标签
JPanel pRoad,pLabRoad,pButRoad; //面板,拼板,标签,按钮
Container conRoad;
public DesignRoad()
{
pRoad=new JPanel(); //向面板中实力化拼板
pRoad.setLayout(new BorderLayout()); //设置拼板
pButRoad=new JPanel(); //向面板中实力化按钮
pButRoad.setLayout(new GridLayout(4,4,1,1)); //将面板按钮设置为4行4列
pLabRoad=new JPanel(); //向面板中实力化标签
pLabRoad.setLayout(new BorderLayout());
for(int i=15;i>=0;i--)
{
if (i==0)
btnRoad[i]=new JButton();
else
btnRoad[i]=new JButton(""+i+"");
btnRoad[i].addActionListener(new Roadlisten()); //注册监听器类
pButRoad.add(btnRoad[i]); //向按钮中添加数字
}
labRoad=new JLabel("请开始"); //实力化标签
pLabRoad.add(labRoad); //添加标签
pRoad.add(pButRoad,BorderLayout.CENTER); //设置按钮间距
pRoad.add(pLabRoad,BorderLayout.SOUTH); //设置标签间距
conRoad=getContentPane();
conRoad.setLayout(new BorderLayout());
conRoad.add(pRoad,BorderLayout.CENTER);
}
private class Roadlisten implements ActionListener //设置监听器类
{
public void actionPerformed(ActionEvent e)
{
for(int i=0;i<16;i++)
if(btnRoad[i].getLabel()=="") //将数字0在面板中设置为空
btnNull=i; //将i复给空按钮
for(int i=0;i<16;i++)
if(e.getSource()==btnRoad[i])
{
if(i==btnNull+1 || i==btnNull-1 || i==btnNull+4 || i==btnNull-4)//判断当前被点击的按钮是否处于标签为0的按钮的四个正方向
{
btnRoad[j].setLabel(""+btnRoad[i].getLabel()+""); //交换被点击的按钮与标签为0的按钮的标签
btnRoad[i].setLabel(""); //按钮为空
j=i; //交换i,j值
i=j;
count++;
labRoad.setText("您当前的总移动次数为:"+count+"次!");//显示当前的总次数
for(i=1;i<16;i++) //判断游戏最终是否取得胜利
{
if(btnRoad[i].getLabel()==""+(16-i))
state=1; //胜利
else
state=0; //失败
}
if(state==1) //state=1表示胜利
{
labRoad.setText("你通过"+count+"次移动取得了胜利");//显示文本框中的标签信息
JOptionPane.showMessageDialog(null,"恭喜你取得了胜利!!!","消息",JOptionPane.INFORMATION_MESSAGE);//显示最终结果
}
}
else
labRoad.setText("必须按空格旁边的按钮!"); //否则将显示显示括号里的内容
}
}
}
}
class DesignColor extends JApplet //设置颜色类
{
/*定义坐标,背景颜色被黄色填充的按钮总数,游戏最终是否取得胜利,当前正在移动的按钮,即标签为0*/
private int i=0,j=0,count=0;
private JButton btnReset,btnColor[]=new JButton[25];
private JLabel labelYellow,labelBlack;
private JTextField textYellow,textBlack;
private JPanel panelBtn,panelState1,panelState2,panelState,panelReset,panelUnder;
private JPanel panelM;
private Container conColor;
public DesignColor()
{
panelBtn=new JPanel(new GridLayout(5,5)); //将面板中按钮设置为5行5列
panelState1=new JPanel(new GridLayout(1,2));
panelState2=new JPanel(new GridLayout(1,2));
panelState=new JPanel(new GridLayout(2,1));
panelReset=new JPanel(new GridLayout(1,2));
panelUnder=new JPanel(new GridLayout(2,1));
for(int i=0;i<25;i++)
{
btnColor[i]=new JButton();
btnColor[i].addActionListener(new DcolorLs()); //注册监听器类
btnColor[i].setBackground(Color.black);
panelBtn.add(btnColor[i]);
}
labelYellow=new JLabel("黄色");
labelBlack=new JLabel("黑色");
textYellow=new JTextField("0",10);
textBlack=new JTextField("25",10);
btnReset=new JButton("重玩");
btnReset.addActionListener(new DcolorLs()); //注册监听器类
panelReset.add(btnReset);
panelState1.add(labelYellow);
panelState1.add(textYellow);
panelState2.add(labelBlack);
panelState2.add(textBlack);
panelState.add(panelState1);
panelState.add(panelState2);
panelUnder.add(panelState);
panelUnder.add(panelReset);
conColor=getContentPane();
conColor.setLayout(new BorderLayout());
conColor.add(panelUnder,BorderLayout.SOUTH);
conColor.add(panelBtn,BorderLayout.CENTER);
}
private void reverse(int n) //设置被点击的按钮及其四周的按钮的背景颜色
{
if(btnColor[n].getBackground()==Color.BLACK) //如果原是黑色的则设置成黄色
{
btnColor[n].setBackground(Color.yellow);
count++;
}
else //如果原是黄色的则设置成黑色
{
btnColor[n].setBackground(Color.BLACK);
count--;
}
}
private class DcolorLs implements ActionListener //设置监听器类
{
public void actionPerformed(ActionEvent e)
{
for(i=0;i<25;i++)
{
if(e.getSource()==btnColor[i])
{
if(i%5==0) //判断是否是第一行按钮
{
if(i/5!=0) //排除右上角的按钮
reverse(i-5); //设置相反的颜色
if(i/5!=4) //排除左上角的按钮
reverse(i+5);
reverse(i+1);
reverse(i);
}
else if(i/5==0 && i%5!=4 && i%5!=0) //判断是否是第一列按钮
{
reverse(i+1);
reverse(i+5);
reverse(i);
reverse(i-1);
}
else if(i%5==4) //判断是否是最右边的列即第5列
{
if(i/5!=0)
reverse(i-5);
if(i/5!=4)
reverse(i+5);
reverse(i);
reverse(i-1);
}
else if(i/5==4 && i%5!=0 && i%5!=4) //判断是否是最下边的行即第5行
{
reverse(i+1);
reverse(i-5);
reverse(i);
reverse(i-1);
}
else //处于中间的按钮
{
reverse(i+1);
reverse(i+5);
reverse(i);
reverse(i-1);
reverse(i-5);
}
}
textYellow.setText(""+count); //设置文本框的内容,即当前黄色按钮的总数
textBlack.setText(""+(25-count)); //黑色按钮的总数
}
if(e.getSource()==btnReset) //重玩按钮的事件处理程序
{
for(i=0;i<25;i++)
{
btnColor[i].setBackground(Color.BLACK);
count=0;
textYellow.setText("0");
textBlack.setText("25");
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -