《游戏学习》JAVA版坦克大战课程设计及源码,java定时任务原理

mw.draw(g);

}

homeTank.collideWithTanks(tanks);

homeTank.collideHome(home);

for (int i = 0; i < metalWall.size(); i++) {// 撞到金属墙

MetalWall w = metalWall.get(i);

homeTank.collideWithWall(w);

w.draw(g);

}

for (int i = 0; i < otherWall.size(); i++) {

CommonWall cw = otherWall.get(i);

homeTank.collideWithWall(cw);

cw.draw(g);

}

for (int i = 0; i < homeWall.size(); i++) { // 家里的坦克撞到自己家

CommonWall w = homeWall.get(i);

homeTank.collideWithWall(w);

w.draw(g);

}

}

public TankClient() {

// printable = false;

// 创建菜单及菜单选项

jmb = new MenuBar();

jm1 = new Menu(“游戏”);

jm2 = new Menu(“暂停/继续”);

jm3 = new Menu(“帮助”);

jm4 = new Menu(“游戏级别”);

jm1.setFont(new Font(“TimesRoman”, Font.BOLD, 15));// 设置菜单显示的字体

jm2.setFont(new Font(“TimesRoman”, Font.BOLD, 15));// 设置菜单显示的字体

jm3.setFont(new Font(“TimesRoman”, Font.BOLD, 15));// 设置菜单显示的字体

jm4.setFont(new Font(“TimesRoman”, Font.BOLD, 15));// 设置菜单显示的字体

jmi1 = new MenuItem(“开始新游戏”);

jmi2 = new MenuItem(“退出”);

jmi3 = new MenuItem(“暂停”);

jmi4 = new MenuItem(“继续”);

jmi5 = new MenuItem(“游戏说明”);

jmi6 = new MenuItem(“级别1”);

jmi7 = new MenuItem(“级别2”);

jmi8 = new MenuItem(“级别3”);

jmi9 = new MenuItem(“级别4”);

jmi1.setFont(new Font(“TimesRoman”, Font.BOLD, 15));

jmi2.setFont(new Font(“TimesRoman”, Font.BOLD, 15));

jmi3.setFont(new Font(“TimesRoman”, Font.BOLD, 15));

jmi4.setFont(new Font(“TimesRoman”, Font.BOLD, 15));

jmi5.setFont(new Font(“TimesRoman”, Font.BOLD, 15));

jm1.add(jmi1);

jm1.add(jmi2);

jm2.add(jmi3);

jm2.add(jmi4);

jm3.add(jmi5);

jm4.add(jmi6);

jm4.add(jmi7);

jm4.add(jmi8);

jm4.add(jmi9);

jmb.add(jm1);

jmb.add(jm2);

jmb.add(jm4);

jmb.add(jm3);

jmi1.addActionListener(this);

jmi1.setActionCommand(“NewGame”);

jmi2.addActionListener(this);

jmi2.setActionCommand(“Exit”);

jmi3.addActionListener(this);

jmi3.setActionCommand(“Stop”);

jmi4.addActionListener(this);

jmi4.setActionCommand(“Continue”);

jmi5.addActionListener(this);

jmi5.setActionCommand(“help”);

jmi6.addActionListener(this);

jmi6.setActionCommand(“level1”);

jmi7.addActionListener(this);

jmi7.setActionCommand(“level2”);

jmi8.addActionListener(this);

jmi8.setActionCommand(“level3”);

jmi9.addActionListener(this);

jmi9.setActionCommand(“level4”);

this.setMenuBar(jmb);// 菜单Bar放到JFrame上

this.setVisible(true);

for (int i = 0; i < 10; i++) { // 家的格局

if (i < 4)

homeWall.add(new CommonWall(350, 580 - 21 * i, this));

else if (i < 7)

homeWall.add(new CommonWall(372 + 22 * (i - 4), 517, this));

else

homeWall.add(new CommonWall(416, 538 + (i - 7) * 21, this));

}

for (int i = 0; i < 32; i++) {

if (i < 16) {

otherWall.add(new CommonWall(220 + 20 * i, 300, this)); // 普通墙布局

otherWall.add(new CommonWall(500 + 20 * i, 180, this));

otherWall.add(new CommonWall(200, 400 + 20 * i, this));

otherWall.add(new CommonWall(500, 400 + 20 * i, this));

} else if (i < 32) {

otherWall.add(new CommonWall(220 + 20 * (i - 16), 320, this));

otherWall.add(new CommonWall(500 + 20 * (i - 16), 220, this));

otherWall.add(new CommonWall(220, 400 + 20 * (i - 16), this));

otherWall.add(new CommonWall(520, 400 + 20 * (i - 16), this));

}

}

for (int i = 0; i < 20; i++) { // 金属墙布局

if (i < 10) {

metalWall.add(new MetalWall(140 + 30 * i, 150, this));

metalWall.add(new MetalWall(600, 400 + 20 * (i), this));

} else if (i < 20)

metalWall.add(new MetalWall(140 + 30 * (i - 10), 180, this));

else

metalWall.add(new MetalWall(500 + 30 * (i - 10), 160, this));

}

for (int i = 0; i < 4; i++) { // 树的布局

if (i < 4) {

trees.add(new Tree(0 + 30 * i, 360, this));

trees.add(new Tree(220 + 30 * i, 360, this));

trees.add(new Tree(440 + 30 * i, 360, this));

trees.add(new Tree(660 + 30 * i, 360, this));

}

}

theRiver.add(new River(85, 100, this));

for (int i = 0; i < 20; i++) { // 初始化20辆坦克

if (i < 9) // 设置坦克出现的位置

tanks.add(new Tank(150 + 70 * i, 40, false, Direction.D, this));

else if (i < 15)

tanks.add(new Tank(700, 140 + 50 * (i - 6), false, Direction.D,

this));

else

tanks

.add(new Tank(10, 50 * (i - 12), false, Direction.D,

this));

}

this.setSize(Fram_width, Fram_length); // 设置界面大小

this.setLocation(280, 50); // 设置界面出现的位置

this.setTitle("坦克大战——(重新开始:R键 开火:F键) ");

this.addWindowListener(new WindowAdapter() { // 窗口监听关闭

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

this.setResizable(false);

this.setBackground(Color.GREEN);

this.setVisible(true);

this.addKeyListener(new KeyMonitor());// 键盘监听

new Thread(new PaintThread()).start(); // 线程启动

}

public static void main(String[] args) {

new TankClient(); // 实例化

}

private class PaintThread implements Runnable {

public void run() {

// TODO Auto-generated method stub

while (printable) {

repaint();

try {

Thread.sleep(50);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

private class KeyMonitor extends KeyAdapter {

public void keyReleased(KeyEvent e) { // 监听键盘释放

homeTank.keyReleased(e);

}

public void keyPressed(KeyEvent e) { // 监听键盘按下

homeTank.keyPressed(e);

}

}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals(“NewGame”)) {

printable = false;

Object[] options = { “确定”, “取消” };

int response = JOptionPane.showOptionDialog(this, “您确认要开始新游戏!”, “”,

JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null,

options, options[0]);

if (response == 0) {

printable = true;

this.dispose();

new TankClient();

} else {

printable = true;

new Thread(new PaintThread()).start(); // 线程启动

}

} else if (e.getActionCommand().endsWith(“Stop”)) {

printable = false;

// try {

// Thread.sleep(10000);

//

// } catch (InterruptedException e1) {

// // TODO Auto-generated catch block

// e1.printStackTrace();

// }

} else if (e.getActionCommand().equals(“Continue”)) {

if (!printable) {

printable = true;

new Thread(new PaintThread()).start(); // 线程启动

}

// System.out.println(“继续”);

} else if (e.getActionCommand().equals(“Exit”)) {

printable = false;

Object[] options = { “确定”, “取消” };

int response = JOptionPane.showOptionDialog(this, “您确认要退出吗”, “”,

JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null,

options, options[0]);

if (response == 0) {

System.out.println(“退出”);

System.exit(0);

} else {

printable = true;

new Thread(new PaintThread()).start(); // 线程启动

}

} else if (e.getActionCommand().equals(“help”)) {

printable = false;

JOptionPane.showMessageDialog(null, “用→ ← ↑ ↓控制方向,F键盘发射,R重新开始!”,

“提示!”, JOptionPane.INFORMATION_MESSAGE);

this.setVisible(true);

printable = true;

new Thread(new PaintThread()).start(); // 线程启动

} else if (e.getActionCommand().equals(“level1”)) {

Tank.count = 12;

Tank.speedX = 6;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)**
[外链图片转存中…(img-pqzSA2yj-1712785754376)]

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

[外链图片转存中…(img-ezs6aEcK-1712785754376)]

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

[外链图片转存中…(img-9pq01qYY-1712785754377)]

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

[外链图片转存中…(img-zFzeg1Qj-1712785754377)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-92lPQ8cb-1712785754377)]

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值