吃热狗程序开发

项目介绍

程序目标描述(即开发的目的):

1.掌握使用标识符、数据类型、表达式、if、return、for、复合语句。
2.了解面向对象的使用。包括(封装、继承、多态)基本特征。
3.记住一些固定语句固定用法。

程序用途描述(即希望具备功能):

1.能实现图形化界面。2.能实现图片的加载。
3.能实现图片的移动。
问题来源与资料采集(构思的来源与引用的代码或思想及其来源,请以哈佛引用格式附参考文献):
1.思想来源于IG夺冠现场,思聪大口吃热狗,然后就出现了各种p图表情包(来源于表情包)。2.代码来源于网上看视频学习。

设计方案

设计基本思想:

1.构造窗体。2.背景图片添加到窗体中。3.把游戏图片画上去。
4.是图片从上向下进行移动。5.把图片出入集合中。6.图片相撞清除集合中的图片。7.绑定鼠标监听事件。

程序实现代码

package noom.ml.yu;
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();
       private List<HotDog> list = new ArrayList<>();
       int sum = 0;
       public DogGame(){
                Icon icon = new ImageIcon(DogGame.class.getResource("/Beijing.jpg"));
        JLabel label = new JLabel(icon);
              this.add(label);
    }
//       采用定时器的方式,创建很多的热狗对象,存入到list集合中
//       使用Java的定时器的API,定时器每隔1秒钟执行一次方法
    public void createHotDogs() {
           TimerTask timerTask = new TimerTask() {
            public void run() {
                 HotDog dog = new HotDog(list);
            }
        };
        java.util.Timer timer = new java.util.Timer();
        timer.schedule(timerTask,0,1000);
    }
//    重写面板的绘图方法
     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.yellow);
        g.setFont(new Font("宋体",Font.BOLD,20));
        g.drawString("您现在已经吃了"+sum+"个热狗",20,30);
        if(sum>=4){
            g.drawString("真香(热狗就是好吃)!",250,30);
        }
    }

//     线程run方法
    public void run() {
         while(true){
             this.repaint();
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

     public void mouseDragged(MouseEvent e) {
    }
     public void mouseMoved(MouseEvent e) {
        int x = e.getX();
        wsc.setX(x);
    }
//     主函数,运行主函数开始游戏
     public static void main(String[] args) {
        JFrame frame = new JFrame("吃热狗游戏");
        frame.setSize(489,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);
    }

}

package qimozuoye;
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 {
    private int x;
    private int y;
    private BufferedImage image;
    private Random random = new Random();
    private List<HotDog> list;
//    热狗随机出现的位置
    public HotDog(List<HotDog> list){
        try {
            image = ImageIO.read(HotDog.class.getResource("/HotDog.png"));
            this.list = list;
            y = 0;
            x = random.nextInt(400);
            this.list.add(this);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void move(){
        y += 10;
        if(y >= 600){
            this.list.remove(this);
        }
    }
//       吃热狗碰撞,消除数据
//    返回消除的数量
    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 = dogx2 - wscx2;
        int flagx3 = dogx3 - wscx3;
        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;
    }
}


package qimozuoye;
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("/Wsc.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;
    }

}

描述:生成多个热狗从上向下(热狗x不变,y增大)用鼠标移动思聪吃热狗。

分析与结论(开发过程中的问题):

1.窗口大小需要反复调整未达到最佳效果。

2.程序未能读取图片。

3.程序的复杂代码难理解。

4.类、对象、方法、属性易混淆。

5.敲代码慢且容易出错。

6.出错难以解决。

7.版本不同导致异常。

8.图片实现不了移动。

9.窗口文字需要反复调整。

总结与改进(总结与对改进工作的初步构想):

总结:1.通过以往对Java的学习和认识,以为只能实现底层开发(如:DOS)不能实现图形化。2.通过这次实践唤起了对Java的热爱。3.Java并不是很难着手,只要上课认真听老师细心讲解。加上部分类或对象的直接拖动,集成开发环境强大功能 。学习起来还是很容易上手的。
改进:1.代码格式不规范。2.能实现用键盘来控制主图片的移动。3.能实现背景图片的移动。4.能实现背景音乐。


  转载请注明: 奇遇少年 吃热狗程序开发

 上一篇
学成在线源码下载 学成在线源码下载
学成在线借鉴了MOOC(大型开放式网络课程,即MOOC(massive open online courses))的设计思想,是一 个提供IT职业课程在线学习的平台,它为即将和已经加入IT领域的技术人才提供在线学习服务,用户通过在线学 习、
下一篇 
图书管理系统需求调研提纲 图书管理系统需求调研提纲
图书管理系统需求调研提纲一、总体需求分析面对大量繁杂的图书馆管理,分类,查询与借还工作,迫切的需要通过计算机来帮助解决,介绍图书馆管理人员的工作量。图书馆管理系统采用瀑布模型。“图书借阅管理系统”需要具有界面友好,功能强大,使用方便,安全可
2020-11-11
  目录