Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计

Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计

有图有真相

操作方法:ASDW控制移动,鼠标控制炮筒旋转,鼠标左键开枪,空格发射炮弹,

 

开发思路是标准的游戏开发思路,单线程帧率控制,调度器,绘图API,补间动画,技能冷却条,监听器,全都安排。

https://www.bilibili.com/video/BV1H54y1b7e9/

视频教程在这里,好好学习,天天向上,

收藏,点赞,好评,快来给我也安排一波

 

部分代码:

创建JFrame窗口,由于标题栏和边框也占用空间,所以实际内容和我们设置的尺寸会有出入,因此我们计算差值,重新设置尺寸,确保游戏画板的尺寸和我们预设的相同。

public class GameWindow extends JFrame {
    public GameWindow(){
        this.setSize(860,640);
        this.setLocationRelativeTo(null);
        //this.setResizable(false);
        this.setTitle("坦克大战 V1.0");
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.add(panel);

        int w = this.getContentPane().getSize().width;
        int h = this.getContentPane().getSize().height;
        System.out.println(w);
        System.out.println(h);
        int cw = 860-w;
        int ch = 640-h;
        this.setSize(860+cw,640+ch);
    }
}

鼠标监听:

MouseAdapter adapter = new MouseAdapter() {
    @Override
    public void mouseMoved(MouseEvent e) {
        //System.out.println(e.getX()+","+e.getY());
        double x = e.getX()-8;
        double y = e.getY()-32;
        tank.turretDir = Utils.ppDir(tank.x,tank.y,x,y)+90;
    }

    @Override
    public void mousePressed(MouseEvent e) {
        Shot shot = new Shot(tank.x, tank.y, tank.turretDir, 200);
        Director.nodes.add(shot);
    }
};
win.addMouseListener(adapter);          //处理点击事件
win.addMouseMotionListener(adapter);    //处理移动事件
win.addMouseWheelListener(adapter);     //处理滚轮事件

控制游戏帧率:

long lastUpdate = System.currentTimeMillis(); //当前系统时间
int fps = 60; //理论帧数
while (true) {
    long interval = 1000/fps; //理论间隔
    long curr = System.currentTimeMillis();
    long _time = curr-lastUpdate;
    if (_time < interval) {
        Thread.sleep(1);
    }else{
        lastUpdate = curr;
        float dt = _time*0.001f;            //两帧之间的间隔(秒)
        Scheduler.getInstance().tick(dt);   //推动调度器执行
        win.update(dt);
    }

}

坦克类:

package cn.itsub.tank.types;

import cn.itsub.tank.ImageCache;
import cn.itsub.tank.timer.Scheduler;

import java.awt.*;

public class Tank extends Node{


    public double turretDir; //炮筒方向

    public double hp=60;
    public double hpmax=100;
    public double hphf=10;//每秒回复生命

    public Tank() {
        //注册调度器,每帧都调用update方法,达到恢复生命值的目的
        Scheduler.getInstance().scheduleUpdate(this,0,false);
    }

    public void update(float dt) {
        hp += (hphf * dt);
        if (hp > hpmax) {
            hp = hpmax;
        }
    }

    @Override
    public void draw(Graphics2D g2) {
        Graphics2D g = (Graphics2D) g2.create(); //复制画笔
        g.translate(x, y);
        g.drawImage(ImageCache.get("tank_red"),-18,-19,null);
        g.drawRect(-23,-34,46,8);
        g.setColor(Color.RED);
        int whp = (int)(45.0*(hp/hpmax));
        g.fillRect(-22,-33,whp,7);

        g.rotate(Math.toRadians(this.turretDir));
        g.drawImage(ImageCache.get("turret_red"),-32,-32,null);

    }

}

这么好的东西我都安排了,

收藏,点赞,好评,也给我安排一波呗~~~

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
1.1 手机软件现状 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端: 1. 传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。 2. 传统手机访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。 而Java技术在无线应用方面的优势非常明显: 1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。 2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI); 3. Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。 基于以上分析,Java手机将是未来手机的发展方向,是业界的热点。 1.2 J2ME介绍 虽然 Java 已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard。其中J2ME定位在消费性电子产品的应用上。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,会是未来Java平台发展的重点项目。 J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算机设备的开发人员。J2ME的一个关键优点是,J2ME与所有支持Java的设备都是兼容的。支持Java的设备就是任何运行Java虚拟机器的计算机。Motorola、Nokia等生产厂商都生产支持Java的设备。、 J2ME平台是由配置(Configuration)和简表(Profile)构成的。配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机。简表是针对一系列设备 提供的开发包集合。在J2ME中还有一个重要的概念是可选包(Optional Package),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(Bluetooth API)提供了对蓝牙的支持。 目前,J2ME中有两个最主要的配置,分别是Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。 作为第一个面对小型设备的Java应用开发规范,CLDC是由包括Nokia,Motorola和Siemens在内的18家全球知名公司共同协商完成的。CLDC是J2ME核心配置中的一个,可以支持一个或多个profile。其目标主要面向小型的、网络连接速度慢、能源有限(主要是电池供电)且资源有限的设备,如手机、PDA等。 而CDC则是主要用于运算能力相对较佳、在电力供应上相对比较充足的嵌入式装置 (比方说冷气机、电冰箱、电视机机顶盒 (set-top box))

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程大玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值