📄 复件 dl_01.java
字号:
//拼图游戏
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
public class dl_01 extends JApplet implements ActionListener,MouseMotionListener,MouseListener
{
private Timer timer;
private Image imagel;
private JButton command;
//时间显示标签
private JLabel time1=new JLabel("time:0");
//反馈信息标签
private JLabel feedback=new JLabel("Successful!",JLabel.CENTER);
private String[] picname={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16"};
//图片文件名数组
private String piclist[][]=new String[3][16];
//存放图片的数组
private ImageIcon img[]=new ImageIcon[16];
//显示图片的标签数组
private JLabel piclabel[]=new JLabel[16];
//存放图片编号的变量
private int picno;
//存放按钮图片的数组
private ImageIcon but_icon[]=new ImageIcon[3];
//命令按钮的图片文件名数组
private String but_picname[]={"pic/image.jpg","pic/start.jpg","pic/stop.jpg"};
//按下鼠标键时的坐标位置
private int px,py;
//图片的状态数组
private int statuslist[]=new int[16];
//时间变量
private int p_time;
//游戏状态变量
private int game_status;
//初始化applet
public void init()
{
//取得每一张图快的文件名
for(int i=0;i<16;i++){
piclist[0][i]="pic/风景1_"+picname[i]+".jpg";
piclist[1][i]="pic/风景2_"+picname[i]+".jpg";
piclist[2][i]="pic/风景3_"+picname[i]+".jpg";
}
//赋值变量c等于Contentpane
Container c=getContentPane();
c.setLayout(null);
c.setSize(500,400);
//加载背景图案
try {imagel=getImage(new URL(getCodeBase(),"pic/background.jpg"));}
catch(MalformedURLException e){System.out.println("下载图片文件发生错误URL:"+e+"\n");return;}
//建立一个放置所有组件的panel
ImgJPanel panl=new ImgJPanel(imagel);
panl.setLayout(null);
//设定panel的尺寸
panl.setSize(500,400);
try{
//加载命令按钮的图案
for(int i=0;i<3;i++){
but_icon[i]=new ImageIcon(new URL(getCodeBase(),but_picname[i]));
}
}
catch(MalformedURLException e){System.out.println("下载图片文件发生错误 URL:"+e+"\n");return;}
//在panel上建立一个command按钮
command=new JButton(but_icon[0]);
command.setSize(97,33);
command.setLocation(380,20);
command.addActionListener(this);
panl.add(command);
//设定反馈信息标签的格式
feedback.setBounds(150,202,200,60);
feedback.setForeground(Color.blue);
feedback.setVisible(false);
feedback.setFont(new Font("Arial",Font.PLAIN,36));
//将反馈信息标签加入panel中
panl.add(feedback);
int col,row;
//在panel上建立16个JLabel组件,以显示16张图块
for(int i=0;i<16;i++){
piclabel[i]=new JLabel();
piclabel[i].setSize(110,70);
col=i%4;
row=(int)i/4;
piclabel[i].setLocation(30+110*col,90+70*row);
piclabel[i].addMouseMotionListener(this);
piclabel[i].addMouseListener(this);
panl.add(piclabel[i]);
}
picno=0;
//设定时间标签的格式
time1.setSize(80,24);
time1.setForeground(Color.red);
time1.setLocation(280,45);
//将时间标签加入pane1中
panl.add(time1);
//将panel加入ContentPane中
c.add(panl);
timer=new Timer(1000,this);
}
//开始运行applet
public void start()
{
game_status=0;
}
//加载图片
public void loadpicture(){
try {
for(int i=0;i<16;i++) {
img[i]=new ImageIcon(new URL(getCodeBase(),piclist[picno][i]));
piclabel[i].setIcon(img[i]);
}
picno++;
if(picno>2) picno=0;
}
catch(MalformedURLException e) {System.out.println("下载图片文件发生错误 URL:"+e+"\n");return;}
}
//随机分布图片位置
public void random_picture(){
for(int i=0;i<16;i++){
piclabel[i].setLocation(30+(int)(Math.random()*330),90+(int)(Math.random()*210));
statuslist[i]=0;
}
}
//检查是否已经完成了子程序
public boolean check_finished(){
boolean flag=true;
for (int i=0;i<16;i++){
if (statuslist[i]==0){
flag=false;
break;
}
}
return flag;
}
//按下命令钮时的时间处理程序
public void actionPerformed(ActionEvent e){
if(e.getSource()== command){
switch(game_status){
case 0: //image显示图像
game_status=1;
loadpicture();
feedback.setVisible(false);
command.setIcon(but_icon[1]);
break;
case 1: //start开始游戏
game_status=2;
p_time=0;
time1.setText("time :" + p_time);
feedback.setVisible(false);
random_picture();
timer.start();
command.setIcon(but_icon[2]);
break;
case 2: //stop停止游戏
game_status=0;
timer.stop();
feedback.setText("Stop!");
feedback.setVisible(true);
command.setIcon(but_icon[0]);
}
}
if (game_status==2){
if(e.getSource() == timer){
p_time++;
time1.setText("time :" + p_time);
}
}
}
public void mouseMoved(MouseEvent e){}
//拖动鼠标的事件处理程序
public void mouseDragged(MouseEvent e){
int x1=e.getX();
int y1=e.getY();
int x,y;
for(int i=0;i<16;i++){
if(e.getSource()==piclabel[i]){
x=piclabel[i].getLocation().x;
y=piclabel[i].getLocation().y;
piclabel[i].setLocation(x+x1-px,y+y1-py);
}
}
}
//按下鼠标键的事件处理程序
public void mousePressed(MouseEvent e){
px=e.getX();
py=e.getY();
}
//释放鼠标键时事件处理程序
public void mouseReleased(MouseEvent e){
int x1,y1;
int ox,oy;
for(int i=0;i<16;i++){
if(e.getSource()==piclabel[i]){
//取得图片目前的坐标位置
x1=piclabel[i].getLocation().x;
y1=piclabel[i].getLocation().y;
//计算图片正确的坐标位置
ox=30+(int)(i%4)*110;
oy=90+(int)(i/4)*70;
//判断是否搬移到正确位置上
if(x1>ox-8 && y1>oy-8 && x1<ox+8 && y1<oy+8){
piclabel[i].setLocation(ox,oy);
statuslist[i]=1;
//检查图片是否已经完成
if(check_finished()==true){
game_status=0;
timer.stop();
feedback.setText("Successful!");
feedback.setVisible(true);
command.setIcon(but_icon[0]);
}
} else {
statuslist[i]=0;
}
}
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
//JPanel的扩展对象,用来放置背景图案
class ImgJPanel extends JPanel{
private Image image1;
public ImgJPanel(Image image_a){
this.image1= image_a;
}
public void paintCompont(Graphics g) {
g.drawImage(image1,0,0,this);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -