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學習交流,獲取學習資料,面試題,開發工具等。

 

 

 

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