📄 pintu.java
字号:
//拼图游戏
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
public class pintu extends JApplet implements ActionListener,MouseMotionListener,MouseListener
{
private Timer timer;
private Image image1;
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[]={"image.jpg","start.jpg","stop.jpg"};
private int px,py;
private int statuslist[]=new int[16];
private int p_time;
private int game_status;
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";
}
Container c=getContentPane();
c.setLayout(null);
c.setSize(500,400);
try{image1=getImage(new URL(getCodeBase(),"pic/background.jpg"));}
catch(MalformedURLException e) {System.out.println("下栽图片错误 URL:"+e+"\n");return;}
ImgJPanel pan1=new ImgJPanel(image1);
pan1.setLayout(null);
pan1.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;}
command=new JButton(but_icon[0]);
command.setSize(97,33);
command.setLocation(380,20);
command.addActionListener(this);
pan1.add(command);
feedback.setBounds(150,202,200,60);
feedback.setForeground(Color.blue);
feedback.setVisible(false);
feedback.setFont(new Font("Arial",Font.PLAIN,36));
pan1.add(feedback);
int col,row;
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);
pan1.add(piclabel[i]);
}
picno=0;
time1.setSize(80,24);
time1.setForeground(Color.red);
time1.setLocation(280,45);
pan1.add(time1);
c.add(pan1);
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://开始游戏
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://停止游戏
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 paintComponent(Graphics g)
{
g.drawImage(image1,0,0,this);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -