java版坦克大战源码分享

前言

利用摸鱼时间学了个java的游戏引擎FXGL 本游戏是基于jdk17和FXGL开发的
在这里插入图片描述

操作

按键功能
WSAD移动
空格发射子弹
E使用技能

道具说明

道具玩家吃到敌人吃到
星星子弹升一级子弹升一级
子弹满级子弹满级
爱心道具恢复5点生命恢复5点生命
能过海无限时长能过海无限时长
头盔无敌12秒无敌12秒
坦克增加200点移速无限时长增加200点移速无限时长
炸弹获得一发技能获得一发技能
计时器暂停场上所有敌人持续10秒无效果(还没想好)
铁铲加固Home围墙15秒摧毁Home周围围墙

调试

调试功能
F1获得无限时长无敌buff(吃到无敌道具会重置)
F2获得加速buff
F3获得船
F4子弹升级
F5无限技能
F6清空所有buff
F7切换关卡
F8虚无
F9随机掉落一个道具
F10在玩家前方生成石头
F11创建一个敌人
F12地图上所有敌人获得无限技能

游戏启动类:
cn.liziguo.tank.TankGameApplication

地图编辑器启动类:
cn.liziguo.tank.TankMapEditor

游戏配置类:
cn.liziguo.tank.config.GameConfig

游戏按键修改:
cn.liziguo.tank.script.player.PlayerComponent

源码

https://gitee.com/li-ziguo/fxgl-tank-game

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,我们可以看出Java坦克大战是一个很好的学习体验,可以帮助初学者理解面向对象编程、集合、多线程、IO流、GUI编程等知识的运用。下面是一个简单的Java坦克大战源代码: ```java package com.tankgame; import java.awt.*; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.List; public class TankClient extends Frame { public static final int GAME_WIDTH = 800; public static final int GAME_HEIGHT = 600; Tank myTank = new Tank(50, 50, true, Direction.STOP, this); List<Missile> missiles = new ArrayList<>(); List<Tank> tanks = new ArrayList<>(); List<Explode> explodes = new ArrayList<>(); Wall w1 = new Wall(100, 200, 20, 150, this); Wall w2 = new Wall(300, 100, 300, 20, this); Image offScreenImage = null; public void paint(Graphics g) { g.drawString("missiles count:" + missiles.size(), 10, 50); g.drawString("explodes count:" + explodes.size(), 10, 70); g.drawString("tanks count:" + tanks.size(), 10, 90); for (int i = 0; i < missiles.size(); i++) { Missile m = missiles.get(i); m.hitTanks(tanks); m.hitTank(myTank); m.hitWall(w1); m.hitWall(w2); m.draw(g); } for (int i = 0; i < tanks.size(); i++) { Tank t = tanks.get(i); t.collidesWithWall(w1); t.collidesWithWall(w2); t.collidesWithTanks(tanks); t.draw(g); } for (int i = 0; i < explodes.size(); i++) { Explode e = explodes.get(i); e.draw(g); } myTank.draw(g); w1.draw(g); w2.draw(g); } public void update(Graphics g) { if (offScreenImage == null) { offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT); } Graphics gOffScreen = offScreenImage.getGraphics(); Color c = gOffScreen.getColor(); gOffScreen.setColor(Color.GREEN); gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT); gOffScreen.setColor(c); paint(gOffScreen); g.drawImage(offScreenImage, 0, 0, null); } public void lauchFrame() { for (int i = 0; i < 10; i++) { tanks.add(new Tank(50 + 40 * (i + 1), 50, false, Direction.D, this)); } this.setLocation(400, 300); this.setSize(GAME_WIDTH, GAME_HEIGHT); this.setTitle("TankWar"); this.setBackground(Color.GREEN); this.addKeyListener(new KeyMonitor()); this.setVisible(true); new Thread(new PaintThread()).start(); } public static void main(String[] args) { TankClient tc = new TankClient(); tc.lauchFrame(); } private class PaintThread implements Runnable { public void run() { while (true) { repaint(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } } private class KeyMonitor extends KeyAdapter { public void keyReleased(KeyEvent e) { myTank.keyReleased(e); } public void keyPressed(KeyEvent e) { myTank.keyPressed(e); } } } ``` 这个源代码包含了坦克、导弹、墙、爆炸等多个类,通过多线程实现了游戏的动态效果。在这个源代码中,我们可以看到Java面向对象编程的精髓,例如类的封装、继承、多态等等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值