java基础之国民老公吃热狗小游戏

图片验证码 -- 拓薪教育

第一章:吃热狗游戏

游戏效果

1.封装热狗类

package cn.tx.main;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.List;
import java.util.Random;

/**
 * 作者:樱木老师
 * 热狗
 */
public class HotDog {

    // 出生位置x
    private int x;
    // 出生位置 y
    private int y;
    // 热狗的图片
    private BufferedImage image;
    // 随机数
    private Random random = new Random();
    // 存储热狗的list集合
    private List<HotDog> list;

    /**
     * 热狗随机出现的位置
     */
    public HotDog(List<HotDog> list){
        try {
            // 加载图片
            image = ImageIO.read(HotDog.class.getResource("/666.png"));
            this.list = list;
            // 默认从顶部出现
            y = 0;
            // x横座标随机出现
            x = random.nextInt(400);
            // 把热狗存入到list集合中
            this.list.add(this);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 热狗移动的方法
     */
    public void move(){
        // 纵座标向下移动
        y += 10;
        // 判断y座标值是否大于最大高度,如果大于,从list集合中移除当前热狗对象
        if(y >= 600){
            this.list.remove(this);

        }
    }

    /**
     * 吃热狗碰撞,消除数据
     * 返回消除的数量
     * @param wsc
     */
    public int clear(Wsc wsc){
        // 开始判断
        // 获取到热狗的横座标
        // 获取到热狗的左边顶点横座标
        int dogx2 = x;
        // 获取到热狗的右边横座标
        int dogx3 = dogx2+66;

        // 获取到热狗的纵座标
        int dogy = y;
        // 获取到热狗图片的纵座标加上热狗的长度
        int dogy2 = dogy+102;

        // 获取到王思聪的嘴
        int wscx = wsc.getX();
        int wscx2 = wscx+30;
        int wscx3 = wscx + 80;

        int wscy = wsc.getY();

        // 进行消除
        // int flagx2 = wscx2 - dogx2;
        int flagx2 = dogx2 - wscx2;
        // int flagx3 = wscx3 - dogx3;
        int flagx3 = dogx3 - wscx3;

        // int flagy = wscy - dogy2;
        int flagy = dogy2 - wscy;

        if(flagx2 > -20 && flagx3 < 20 && flagy > 20 && flagy < 40){
            boolean remove = this.list.remove(this);
            if(remove){
                return 1;
            }
        }
        return 0;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public BufferedImage getImage() {
        return image;
    }

    public void setImage(BufferedImage image) {
        this.image = image;
    }
}

2. 封装思聪类

package cn.tx.main;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;

/**
 * 作者:樱木老师
 * 思聪
 */
public class Wsc{

    // 图片的横纵座标
    private int x;
    private int y;
    // 图片
    private BufferedImage image;

    public Wsc() {
        try {
            // 默认的显示位置
            x = 180;
            y = 500;
            image = ImageIO.read(Wsc.class.getResource("/555.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public BufferedImage getImage() {
        return image;
    }

    public void setImage(BufferedImage image) {
        this.image = image;
    }

}

编程主程序

package cn.tx.main;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.TimerTask;

/**
 * 拓薪教育 -- 腾讯课程认证机构
 * 樱木老师
 */
public class DogGame extends JPanel implements Runnable,MouseMotionListener {

    // 构建思聪对象
    private Wsc wsc = new Wsc();
    // 存储热狗的list集合
    private List<HotDog> list = new ArrayList<>();
    // 总计分数使用
    int sum = 0;

    // 通过构造方法的方式添加背景图片
    public DogGame(){
        // 设置背景图片
        Icon icon = new ImageIcon(DogGame.class.getResource("/111.png"));
        JLabel label = new JLabel(icon);
        // 添加
        this.add(label);
    }

    /**
     * 采用定时器的方式,创建很多的热狗对象,存入到list集合中
     * 自己回去练代码
     * 使用Java的定时器的API,定时器每隔1秒钟执行一次方法
     */
    public void createHotDogs() {
        // 读取雪花的图片
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                // 创建热狗对象
                HotDog dog = new HotDog(list);
            }
        };
        // 定时器
        java.util.Timer timer = new java.util.Timer();
        // 开启定时任务
        timer.schedule(timerTask,0,1000);
    }

    /**
     * 重写面板的绘图方法
     * @param g
     */
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        // 画王思聪
        g.drawImage(wsc.getImage(),wsc.getX(),wsc.getY(),null);

        // 画热狗
        for (int i = 0; i < list.size(); i++) {
            HotDog hotDog = list.get(i);
            // 让热狗移动
            hotDog.move();
            // 消除热狗
            int n = hotDog.clear(wsc);
            // 计算分数
            sum += n;
            // 画热狗
            g.drawImage(hotDog.getImage(),hotDog.getX(),hotDog.getY(),null);
        }
        g.setColor(Color.PINK);
        g.setFont(new Font("隶书",Font.BOLD,20));
        // 画数字
        g.drawString("您吃了"+sum+"个热狗",20,30);
        // 添加效果
        if(sum >= 5){
            g.drawString("牛逼,真香!",200,30);
        }
    }

    /**
     * 线程run方法
     */
    @Override
    public void run() {
        // 死循环
        while(true){
            // 重绘
            this.repaint();
            try {
                // 睡眠操作
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void mouseDragged(MouseEvent e) {

    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // 获取到移动的座标
        int x = e.getX();
        // 给思聪设置座标
        wsc.setX(x);
    }

    /**
     * 主函数,运行主函数开始游戏
     * @param args
     */
    public static void main(String[] args) {
        // 创建窗口
        JFrame frame = new JFrame("吃热狗游戏");
        // 设置宽高
        frame.setSize(500,650);
        // 居中显示
        frame.setLocationRelativeTo(null);
        // 设置关闭
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建游戏主类
        DogGame dogGame = new DogGame();
        // 添加到窗口中
        frame.add(dogGame);

        // 创建多个热狗
        dogGame.createHotDogs();

        // 画思聪上去,调用重绘的方法
        dogGame.repaint();

        // 启动线程,定时刷新
        new Thread(dogGame).start();

        // 绑定鼠标监听事件
        dogGame.addMouseMotionListener(dogGame);

        // 显示窗口
        frame.setVisible(true);
    }

}

 

 

根据本人多年从业以及学习经验,录制了一套最新的Java精讲视频教程,如果你现在也在学习Java,在入门学习Java的过程当中缺乏系统的学习教程,你可以加我的微信renlliang2013学习交流,获取学习资料,面试题,开发工具等。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章