java打地鼠小游戏

准备阶段:

工具:eclipse(MyEclipse) 材料:三张图片(地鼠,打地鼠背景图,锤子) 

代码阶段:

import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class playMouse extends JFrame implements Runnable{


    private int num=0;//分数
    private JLabel back;//背景
    private JLabel [] mouses;//老鼠
    private ImageIcon imgMouse;//老鼠图片
    private JLabel jtf;//计分字
    
    //构造函数,初始化
    public playMouse() {
        this.setResizable(false);//不能修改大小
        this.getContentPane().setLayout(null);
        this.setTitle("打林毅");
        this.setBounds(650, 200, 400, 240);
        
        //背景
        back=new JLabel();
        ImageIcon icon=new ImageIcon(this.getClass().getResource("1.jpg"));//创建Icon ,放背景图片,放入Icon中
        back.setIcon(icon);//加入背景图
        back.setBounds(0, -35, 400, 240);//设置背景位置与大小
        
        //锤子显示
        this.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(
                Toolkit.getDefaultToolkit().getImage("src/com/iotek/mouse/3.jpg"), 
                new Point(), "se"));//放入工具锤子*
        
        //老鼠显示
        imgMouse =new ImageIcon(this.getClass().getResource("21.jpg"));//放入老鼠图片
        mouses =new JLabel[9];//九个
        for(int i=0;i<9;i++) {
            mouses[i]=new JLabel();//建立九个对象
            mouses[i].setSize(imgMouse.getIconWidth(),imgMouse.getIconHeight());//大小就设为老鼠图片的大小
            //mouses[i].setIcon(imgMouse);
            
            //打中老鼠的事件监听器
            mouses[i].addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {//加分
                    Object object=e.getSource();
                    if(object instanceof JLabel) {
                        JLabel label=(JLabel)object;
                        //击中,不为空加分
                        if(label.getIcon()!=null) {
                            num++;
                            jtf.setText("得分:"+num+"分");//更新计分器,加入分数
                        }
                        label.setIcon(null);
                    }
                }
            });
            this.getContentPane().add(mouses[i]);//加入老鼠对象,九个
        }
        
        jtf=new JLabel();//计分
        jtf.setBounds(315, 5, 100, 30);//位置与大小
        jtf.setFont(new Font("",20,20));//字体大小
        jtf.setForeground(Color.cyan);//字体颜色
        jtf.setText("得分:");//字
        
        mouses[0].setLocation(76,10);//每个老鼠图片的位置
        mouses[1].setLocation(170,10);
        mouses[2].setLocation(270,11);
        mouses[3].setLocation(67, 57);
        mouses[4].setLocation(170,55);
        mouses[5].setLocation(270, 55);
        mouses[6].setLocation(60, 105);
        mouses[7].setLocation(172, 105);
        mouses[8].setLocation(280, 105);
        
        this.getContentPane().add(jtf);//加入计分器
        this.getContentPane().add(back);//加入背景
        
        this.setVisible(true);//可见
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//可关闭
    
        }//初始化完成

    //线程
    @Override
    public void run() {
        //死循环,保证一直下去
        while(true) {
            try {
                Thread.sleep(500);//线程睡眠0.5秒
                int index=(int)(Math.random()*9);//产生0~8的随机数
                //当老鼠对象图片为空时,放入老鼠图片容器,显示
                if(mouses[index].getIcon()==null) {
                    mouses[index].setIcon(imgMouse);
                    Thread.sleep(800);//反应时间,更具难度的不同
                    //打到老鼠,老鼠立马消失
                    if(mouses[index].isShowing()) {
                        mouses[index].setIcon(null);
                    }
                }
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        playMouse p1=new playMouse();
        Thread t1=new Thread(p1);
        t1.start();

        
    }

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值