java初学者对于马士兵坦克大战的个人学习笔记及代码问题总结(第一阶段),
1、系统自动初始化了Graphics g参数
2、设计原则:高内聚,低耦合;
一个模块中的各元素之间的紧密程度越高,内聚性越高;
每个模块之间相互联系的紧密程度越低,耦合性越低。
对修改关闭,对扩展开放;
3、局部内部类:可以用,但是看起来不方便,内部类可以非常方便的访问包装类的局部变量
4、添加键盘监听时,如果使用implements KeyListener,则需要重写这个不需要的方法:
@Override
public void keyTyped(KeyEvent e) {
}
5、面向对象设计思想:
抽象出名词:类,属性
抽象出动词:方法
6、相对于int类型,用enum代表方向便于检查代码,编译期间就能知道错误,代码不易被修改
7、碰撞检测如何处理:
rectangle得到坦克和子弹的矩形,使用rect.intersects(tank.rect)判断两个矩形是否相交
8、坦克移动时一顿一顿的?
原因:把move方法放在了键盘监听的press方法和release方法里了,应该放在paint方法里

9、方块移动太快?
原因:paint方法的延时使用了以下方法(50微秒),使用MILLISECONDS(毫秒级)或者Thread.sleep正常
while(true){
try {
TimeUnit.MICROSECONDS.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
tf.repaint(); //repaint方法调用update方法,update方法调用paint方法
}

10、图像、声音资源只在程序打开时load一次,使用时调用即可
11、消除闪烁现象,先把图像数据加载到显存里的虚拟窗口,加载完成后再显示到窗口
12、NullPointerException 变量未初始化的异常
13、一个对象持有另一个对象的引用,把参数和方法传递给另一个对象
14、画不出敌方坦克?
原因是:if (this.group == Group.BAD) 的判断放在 if (this.group == Group.GOOD)的语句里了
15、简单处理,把碰撞检测看作判断坦克和子弹两个方块是否相撞,其他不规则物体判断相撞一般有封装的类库。可以直接引用
16、代码的重构:在不改变系统功能的前提下改善程序的结构,提高代码的质量
17、坦克可以出界?原因是用了以下程序
if (x>TankFrame.GAME_X+TankFrame.GAME_WIDTH-TANK_WIDTH-2){
x=TankFrame.GAME_X+TankFrame.GAME_WIDTH-TANK_WIDTH-2;
}
正确为:
if (x<0 || y<30 || x>TankFrame.GAME_WIDTH-TANK_WIDTH || y>TankFrame.GAME_HEIGHT-TANK_HEIGHT)
this.back();
}

18、坦克死了之后没有重画,但是可以发射子弹?
for (int i=0;i<tanks.size();i++) {
for (int j = 0; j < bullets.size(); j++) {
bullets.get(j).collidesWithTank(tanks.get(i));
}
}
此处for外循环的大括号没加,且子弹碰撞时的坐标写成了以下错误this.x应为this.y
int bY=this.x+TANK_HEIGHT/2-Bullet.BULLET_HEIGHT/2;

19、打死一个坦克后,再打另一个坦克出现错误
IllegalThreadStateException 非法的线程状态异常
原因是在TankFrame里Thread tr=new Thread(()->new Audio(“audio/explode.wav”).play());
然后在explode构造方法里调用tr.start方法,应该直接在构造方法里写new Thread(()->new Audio(“audio/explode.wav”).play()).start();
同一个线程不能多次执行start()方法

20、Class类:在硬盘上的class文件,虚拟机要用该文件时,会load进内存,便成为了Class类的对象

马士兵坦克大战学习笔记(一)相关推荐

  1. 马士兵python_马士兵:python学习(一)

    python学习 一. 输出函数print(P6) 1. 输出数字和字符串 print(520) print(52.01) print("hello world") print(h ...

  2. 马士兵hibernate(原始笔记)

    马士兵hibernate(原始笔记) 课程内容 1 HelloWorld a) Xml b) annotation 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么要有O/R ...

  3. Java高并发编程 (马士兵老师视频)笔记(一)同步器

    本篇主要总结同步器的相关例子:包括synchronized.volatile.原子变量类(AtomicXxx).CountDownLatch.ReentrantLock和ThreadLocal.还涉及 ...

  4. 马士兵java视频学习顺序

    第一部分:J2se学习视频内容包括: 尚学堂科技_马士兵_JAVA视频教程_JDK5.0_下载-安装-配置 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第01章_JAVA简介_源代码_及重 ...

  5. Java高并发编程 (马士兵老师视频)笔记(二)并发容器

    本篇主要总结了:线程安全的单例模式和并发容器.其中并发容器包含:ConcurrentHashMap.ConcurrentSkipListMap.CopyOnWriteArrayList和队列相关的内部 ...

  6. 马哥 mysql教学笔记_【马哥linux学员学习笔记】MySQL多实例详解

    本文作者系马哥linux学员云中鹤. 学习联系QQ:1660809109.1661815153.2813150558 马哥Linux运维 更多资讯:www.magedu.com 目录 一.基本概念 1 ...

  7. 伽马校正(gamma correction)学习笔记

    学习HDR和Bloom特效的过程中,接触到了伽马矫正的问题.查阅了不少资料,这一篇讲的最清楚,下面的图片也是来自该文章. 这应该说是一个历史遗留问题,以前的CRT显示器是使用电子显像管,通过控制电流大 ...

  8. HTML坦克大战学习02---坦克动起来

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><ti ...

  9. 微信小程序之坦克大战学习

    1.问题一:在menu.js中需要使用到const.js文件中的变量,怎么办?如下图: 解决:在const.js文件中写上module.exports={},大括号里面写对应的变量对,如下图: 然后在 ...

最新文章

  1. 反对人工智能的九条意见是什么?
  2. fme中oracle转shp,FME中CASS扩展属性转SHP的方法
  3. PHP实现四种排序-插入排序
  4. Java Script基础(九) 下拉列表对象
  5. C++嵌入Python,以及两者混用
  6. ** is not in the sudoers file. This incident will be reported. 给某个用户开放sudo权限。
  7. 计算机在线拍照解答,摄影景深在线计算器
  8. 小米10青春版刷鸿蒙,没有高刷弱不禁风?小米10青春版刷新低价,这次用户或许会满意!...
  9. web简单静态页面设计【HTML+CSS】
  10. ArcGIS批量裁剪栅格数据
  11. MeshBaker一键合并网格编辑器实现
  12. 推荐几个免费论文查重网站
  13. 面试题汇总二 Java 多线程篇
  14. Podman使用详解
  15. PTA 一帮一 (in Python)
  16. OceanBase分区
  17. 交换机/路由器的存储介质
  18. 解决电脑声音图标红叉的办法
  19. dbg 寻找main函数
  20. redmine2.0 + mongrel

热门文章

  1. J2EE达内18天笔记
  2. 已知正方形面积求边长c语言,正方形知道面积怎么求边长.
  3. Redis命令之HGetAll性能问题解决方案
  4. 【跨境电商】5个最佳免费极简主义WordPress主题(一)
  5. 3.ERP选型——四点禁忌爱情攻略
  6. 【JAVA8】Set排序四种写法-倒序
  7. 关于uni-app获取完整的iccid(中间带有字母的iccid)
  8. 25 年前 Java 诞生,把你对她的热爱大声说出来好吗
  9. 鱼眼图像畸变校正——透视变换
  10. 预制体与非预制体_为什么更多的Web设计师应该尝试使用预制网站