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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
这些内容对你有帮助,可以添加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)]