目录

前言

代码实现

思路

 具体步骤

游戏窗体,创建FlyWar类

监听器类 

 DrawThread类

编辑

强调的几点

for语句中的逻辑

try语句

总结

前言

       这个项目是一个简单的Java游戏,主要使用Java Swing框架实现GUI界面的设计和绘制,使用了多线程和定时器来实现动画效果,使用了Java事件处理机制来响应用户的操作。通过这个项目,可以学习到Java GUI编程多线程编程事件处理机制等知识,以及Java绘图API的使用方法。同时,这个项目也涉及到一些基本的OOP概念,如类、对象、继承、组合等。该项目对于Java初学者来说是一个很好的练手项目,可以提高编程能力和实践能力。

代码实现

思路

小项目的java源程序 java编程小项目_小项目的java源程序

 具体步骤

游戏窗体,创建FlyWar类

  1. 首先,需要定义一个类 FlyWar,继承自 JFrame 类。
  2. 在 FlyWar 类中,需要定义一个 initUI 方法,用来初始化窗口。
  3. 在 initUI 方法中,需要设置窗口大小、标题、关闭按钮等属性,并且创建一个 Graphics 对象,以便在窗口中绘图。
package com.game;

import javax.swing.*;
import java.awt.*;

public class FlyWar extends JFrame {
    public void initUI(){
        //编写窗体的属性
        this.setSize(1600,400);
        this.setTitle("线程子弹");
        this.setDefaultCloseOperation(3);
        this.setVisible(true);

监听器类 

  1. 创建一个 MouseLis 类,继承自 MouseAdapter 类,用来监听鼠标事件。
  2. 在 MouseLis 类中,需要定义一个构造方法,接受一个 Graphics 对象,用来在鼠标事件发生时绘制图形。
  3. 在 MouseLis 类中,需要覆盖 mousePressed 方法,创建一个 DrawThread 对象,用来启动一个新线程绘制图形。
package com.game;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MouseLis extends MouseAdapter {
    public Graphics g;
    public MouseLis(Graphics g){
        this.g=g;
    }
    public void mousePressed(MouseEvent e){
        DrawThread dt=new DrawThread(e,g);
        dt.start();
    }
}

 DrawThread类

  1. 创建一个 DrawThread 类,继承自 Thread 类,用来绘制图形。
  2. 在 DrawThread 类中,需要定义一个构造方法,接受一个 MouseEvent 对象和一个 Graphics 对象,用来确定图形的位置和绘制图形的对象。
  3. 在 DrawThread 类中,需要覆盖 run 方法,使用 Graphics 对象绘制图形,并且在每次绘制之前使用 Thread.sleep 方法让线程暂停一段时间,以实现动画效果。
import java.awt.*;
import java.awt.event.MouseEvent;

public class DrawThread extends Thread{
    private MouseEvent e;
    private Graphics g;

    public DrawThread(MouseEvent e,Graphics g){
        this.e=e;
        this.g=g;
    }
    public void run(){
        int x=e.getX();
        int y=e.getY();
        for(int i=0;i<500;i+=20){
            g.setColor(Color.CYAN);
            g.fillOval(x+i,y,50,60);
            try{
                Thread.sleep(100);
            }catch(Exception ef){}
            g.setColor(Color.WHITE);
            g.fillRect(0,0,1000,800);
        }
    }
}

最后回到FlyWar类中,把监听器中的功能添加到窗体上

package com.game;

import javax.swing.*;
import java.awt.*;

public class FlyWar extends JFrame {
    public void initUI(){
        //编写窗体的属性
        this.setSize(1600,400);
        this.setTitle("飞机大战");
        this.setDefaultCloseOperation(3);
        this.setVisible(true);

        Graphics g=this.getGraphics();
        MouseLis ms=new MouseLis(g);
        this.addMouseListener(ms);
    }
    public static void main(String[] args){
        FlyWar db=new FlyWar();
        db.initUI();
    }
}

强调的几点

for语句中的逻辑

       在 DrawThread 类的 run 方法中,使用了一个 for 循环,用来实现动画效果。该 for 循环的循环变量 i 从 0 开始,每次增加 20,直到 i 的值大于等于 500 为止。在每次循环中,使用 Graphics 对象绘制一个圆形,并且通过 Thread.sleep 方法让线程暂停一段时间,以实现动画效果。而在每次绘制圆形之前,使用 Graphics 对象绘制一个白色的矩形,以清空之前绘制的圆形,保证只有一个圆形在屏幕上显示。

       这种方式实现动画效果的思路是,通过不断地绘制、清除图形,来模拟图形的运动过程,从而实现动画效果。而循环变量 i 的增量为 20,是为了控制圆形的移动速度,如果增量过小,动画效果就会非常缓慢,如果增量过大,动画效果就会非常快,不易观察。

try语句

       在 DrawThread 类的 run 方法中,有一个 try-catch 语句块,用来捕获可能抛出的异常并进行处理。在 try 语句块中,使用 Thread.sleep 方法让线程暂停一段时间,以实现动画效果;而在 catch 语句块中,由于该项目只是一个简单的练习项目,所以直接忽略了所有的异常。在实际的开发中,应该根据具体情况对异常进行处理,以保证程序的健壮性和可靠性。

总结

       这个小项目是一个简单的飞机大战游戏,通过绘制图形和动画来实现游戏效果。虽然这个项目比较简单,但是它涉及到了 Java 的基础知识,例如面向对象编程、图形绘制、多线程编程等。同时,这个项目也提供了一些发散思考的点,例如如何实现更流畅的动画效果、如何让飞机在屏幕上自由移动、如何让游戏更加有趣等。

       同时我也提出三个值得发散思考的点,读者可以在写完这份代码的同时,想想如何更加优化这份代码。

  1. 如何实现更流畅的动画效果?可以考虑使用更高级别的绘图库,例如 JavaFX,或者使用专门用于游戏开发的游戏引擎,例如 Unity、Unreal Engine 等。
  2. 如何让飞机在屏幕上自由移动?可以使用键盘事件来控制飞机的移动方向和速度,或者使用鼠标拖拽事件来控制飞机的移动方向和位置。
  3. 如何让游戏更加有趣?可以增加更多的游戏元素,例如障碍物、敌人、子弹等,或者增加更多的游戏模式,例如多人游戏、关卡模式等。