2_J2SE Project Notes.doc_第1页
2_J2SE Project Notes.doc_第2页
2_J2SE Project Notes.doc_第3页
2_J2SE Project Notes.doc_第4页
2_J2SE Project Notes.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、eclipse的使用 调用方法:类名(右键)Source 显示窗口:WindowShow View 调整代码格式:右键SourceFormat 鼠标划词显示设置:右键窗口JavaEditorHoversCombined Hover Debug的运用 一步一步跟踪代码 为代码设置断点(break point) Step into 和 step over的概念 在运行过程中观测变量的值 右键 Open Call Hierarchy查看方法被谁调用了二、J2SE练习项目聊天系统 开发思路:Startmain方法调用launchFrame()方法connect()方法Socket连接到服务器端把对外的输出流保存好 actionPerformed中往外写字符串时直接用即可 disConnect方法(清理资源)从服务器端断开在窗口关闭时调用 此时写两下,读一下,有问题; 定义控制accept()方法和是否绑定上服务器端的boolean类型变量 客户端可写多个语句并被server端接收。 多个client端连接server端 Server端将各个客户端发送的内容转发给其他客户端。 结束 总结与真正聊天系统的差距 1)管理clients的办法此:List把Socket去掉,用的是catch Exception的方法。 实:设置一个boolean的量,代表是否退出。起一个单独的监视线程,监听客户端什么时候退出或死掉。 2) 聊天账户名 3)选择聊天对象 4) 写程序步骤:1. 写界面窗口2. 窗口、组件事件监听3. 连接server端4. client端与server端通信u 问题1:server已在一个端口上监听,重复启动.BindException: Address already in use: JVM_Bind解决:先把第一个server停掉。u 问题2:服务器端 end of filejava.io.EOFException解决:readUTF()是阻塞式的,写try/catch,将ServerSocket异常抛出,catch到任何Exception后将dis/socket关掉。u 问题3:多个client端连接server端.SocketException: Connection reset解决:readUTF()是阻塞式方法,accept第一个连接后进入死循环,第二个客户端就连接不上来了。异步解决办法newIO,异步模式使用单独线程(传统解决办法):一个线程控制一个客户端; 1)建立一个线程类(按需写成内部类),类名:client 2)重写run方法,要求每接收到一个Socket都交给一个线程去处理。在拿到相关东西进行处理。 3)接收到一个Socket连接后,启动一个线程,把socket连接传递给线程,用构造方法传递属性。 5. client端与client端通信u Server端: 1)用集合类将client端存储起来 2)每接收到一个客户端连接,起一个线程,挨排写给每一个客户端对象。u Client端: 1)起一个线程,显示内容u 问题: 1)两个客户端正在通信,突然关掉一个客户端,send(),run()出问题 解决:将Client定义在外面一层,再移除client。 错误u .SocketException: Software caused connection abort: socket write error软件导致连接终止:套接字写错误定义控制accept()方法和是否连接上服务器端的boolean类型变量判断。u java.io.EOFExceptionEOF end of file内部类BlockDataInputStream.的方法peekByte抛出的异常,意思就是到达了文件的末尾,程序却没有正常结束读取文件内容,你可以单步调试一下看看到达文件末尾之后程序为什么没有停下来u 静态方法中new不出内部类对象,在外部类中包装一个方法,不要直接new。 调试程序:u 打印相关信息u 使用debug坦克大战 项目需求1. 能够四处移动2. 能够打击敌人3. 敌人能够移动4. 能够模拟爆炸5. 能够产生障碍6. 能够增长生命 开发步骤:1. 版本0.1u 功能:产生一个窗口 800*600-2. 版本0.2u 功能:1)添加关闭窗口的事件处理2)不允许窗口的大小改动 Api文档中Frame类或其父类方法。u 掌握1)匿名类的用法 类短小、不涉及将来的扩展、不涉及重要的业务逻辑。2)通过Eclipse重写父类的方法-3. 版本0.3u 功能:画出代表坦克的实心圆。u 掌握:如何重写paint方法。u 注意:不要改变原来的前景色u 回顾:1)paint(Graphics g)方法,窗口重画时自动调用2)X轴、Y轴的方向-4. 版本0.4u 功能:1)让坦克动起来2)步骤: a. 将位置改变为变量 paint(x,y,w,h),改变x,y值。 b. 启动线程不断重画 为什么使用线程重画,而不是每按下一个键进行一次重画? - 线程重画更均匀,能控制重画的速度; - 按键重画不能解决子弹自动飞行的问题。 c. 每次重画改变Tank位置 问题:屏幕闪烁现象 解决:双缓冲u 掌握:内部类的使用: a. 好处:可以方便的方位包装类的方法。 b. 使用时机:不方便公开的,职位包装类服务的类应当定义为内部类。u 注意:X,y值的含义,指的是小方块的左上角点。-4_1. 版本0.41u 功能使用双缓冲消除闪烁现象。u 原因1)刷新重画频率太快,paint方法还没有完成2)逐条显示u 解决办法将所有东西画在虚拟图片上,一次性显示出来1)模拟一张虚拟图片2)重写update方法 创建虚拟图片(800*600) 将所有的东西画到图片上 图片的画笔 paint() 前面的画笔drawImage() 重置背景颜色u 思考:把游戏窗口的大小改变为640 *480?解决:定义常量以应付将来的改动-5. 版本0.5u 功能:代码重构 a. 讲以后可能需要多处改变的量定义为常量 Frame的宽度和高度常量名一般大写。u 注意:常量一般是 public static final的。-6. 版本0.6u 功能:让坦克听从指挥:1)加入键盘事件监听(方向键),即添加键盘监听器类KeyMonitor;2)TankClient添加键盘监听器;3)针对不同的键改变坦克的位置,与重画线程结合产生不同方向运动。u 注意:switch case 语句中break语句的运用u 思考增加100辆坦克到游戏中-7. 版本0.7u 思路:存放100个坦克? 1) 采用面向对象的思维 2) 把坦克包装成一个类Tank构造方法 draw坦克 3) 在TankClient的paint()方法中直接调用draw方法; 4)在Tank类中定义keyEventu 功能:1)将坦克单独包装成类2)步骤: a. 建立Tank类 b. 为Tank类添加成员变量x,y c. 添加draw方法,使Tank类独立控制自己的画法 d. 添加Tank类处理按键的方法 e. 根据Tank类修改TankClient类u 掌握:面向对象的思考方法: 1)细节隐藏、构建单独的类、首先考虑系统中有哪些类 2)合适的方法应该出现在合适的类中u 思考如何让坦克向8个方向行走?-8. 版本0.8u 思路:定义boolean类型成员变量控制方向键是否被按。枚举 Driection(八个方向)Move方法locateDriection方法定位方向键。u 功能:1)让主坦克向8个方向行走(1)2)步骤: a. 添加记录按键状态的布尔量 b. 添加代表方向的量(使用枚举) c. 根据按键状态确定Tank方向 d. 根据方向进行下一步的移动(move)-9. 版本0.9u 功能:1)让主坦克向8个方向行走(2)2)步骤: a. 处理键抬起的消息 b. 修改TankClient相关代码-10. 版本1.0u 功能1)添加子弹类2)步骤: a. 添加Missile类 b. 添加x,y,dir等属性以及常量 b.1. 添加构造方法,draw方法等必要方法 b.2. 根据不同方向,进行不同的运动 b.3. 在TankClient中模拟一颗子弹 - new一颗子弹出来 - 画出来u 注意将步骤分解开来注意进行调试。-11. 版本1.1u 功能:1)根据主战坦克的方向和位置,打出子弹2)步骤 a. 增加对Ctrl按键处理 b. 根据“坦克打出一发子弹”这句话,来确定Tank中的方法fire,其返回值为Missile c. 根据Tank方向和位置设定子弹的方向和位置并计算出来,然后返回(fire方法的实现)u 注意:掌握面向对象的思维方式来确定类应该具有的方法。u 思考:坦克不动时,打出的炮弹也是不动的。怎么解决?-12. 版本1.2u 思路:定义炮筒方向u 功能:1)为了解决坦克停下也能打出炮弹的问题画出炮筒2)步骤: a. Tank类增加新的属性炮筒方向(ptDri) b. 每次move后根据Tank新的方向确定炮筒的方向 c. 将炮筒用直线的形式表现出来-13. 版本1.3u 功能:1)打出多发炮弹2)步骤: a. 使用容器装炮弹b. 每当抬起Ctrl键就往容器中加入新的炮弹c. 逐一画出每一发炮弹u 注意:1) 泛型的使用2) 将TankClient的实例传递到Tank中3) this的运用,类的初始化过程-14. 版本1.4u 功能:1)解决炮弹不消亡的问题2)解决坦克出界的问题3)步骤: a. 加入控制炮弹生死的量bLive(Missile) b. 当炮弹已经死去就不需要对其重画 c. 当炮弹飞出边界就死亡 d.当炮弹死亡就从容器中去除u debug-15. 版本1.5u 功能:1)画一辆敌人的坦克2)步骤: 加入区别敌我的量bGood 根据敌我的不同设置不同的颜色 更新Tank的构造函数,加入good TankClient中new出敌人的坦克并画出-16. 版本1.6u 功能:1)将敌人坦克击毙2)分析:一颗子弹击中敌人坦克3)步骤: Missile中加入hitTank(Tank)方法,返回布尔类型 碰撞检测的辅助类Rectangle 为Tank和Missile都加入getRect方法 当击中敌人坦克时,坦克被打死,子弹也死去 增加控制Tank生死的量live 如果死去就不画了u WinMerge比较前后目录内容的工具-17. 版本1.7u 功能:1)加入爆炸2)步骤: a. 添加爆炸类 用不同直径的圆模拟爆炸 加入live 加入位置属性 加入draw方法 b. 爆炸应该存在于集合类中 TankClient加入集合 将集合中的爆炸逐一画出(如果死去就去除) c. 击毙一辆坦克后应产生爆炸 hitTank时应产生爆炸 不能直接访问爆炸集合 加入TankClient引用(Missile类) 当new Missile时应制定在哪里画出(哪个TankClient) 修改Tank类fire方法,当new Missile时将保存好的TankClient变量传递给Missile。-18. 版本1.8u 功能:1)添加多辆坦克2)步骤: a. 用容器来装敌人的Tank b. 向容器中装入多辆敌人Tank c. 画出来 d. 运行,不能打掉 添加hitTanks方法,打一系列Tank TankClient里面每发子弹都打tanks-19. 版本1.9u 思路:让敌方的坦克动起来。随机数控制方向。u 功能:1) 让敌军坦克更加智能2) 步骤: a. 让敌军坦克动起来 b. 让敌军坦克向随机方向移动 c. 让敌军坦克向随机方向移动随机的步骤 d. 让敌军坦克发射炮弹 e. 敌军炮火不能太猛烈-20. 版本2.0u 功能:1)添加两堵墙2)步骤: a. 建Wall类、建立Wall对象、画出来 b. 让每一颗子弹打击每一堵墙 hitWall()方法 注意:子弹速度不能太快,否则很容易穿过墙 c. 让坦克不能穿过墙 记录上一次的位置oldX, oldY 修改构造函数 每次move之前记录上一次位置 添加stay方法 记录移动前的位置 当撞到时回到移动前的位置 当碰到墙的时候stay-21. 版本2.1u 功能:1)坦克不能互相穿越2)步骤:当坦克撞到Tank时stay;-22. 版本2.2u 功能:1)超级炮弹2)步骤:处理按键A-23. 版本2.3u 功能:1)主战坦克的生命值2)步骤: a. 加入life变量 b. 在窗口显示生命值-24. 版本2.4u 功能:1)图形化表示主坦克的生命值2)步骤:根据不同的life值进行的不同的显示-25. 版本2.5u 功能:1)添加“血块”2)步骤 a. 添加blood类 b. 添加必要的方法 c. 让blood对象固定轨迹,并在一定时间后消失-26. 版本2.6u 功能:1)敌人死光了重新加入2)我军死掉了F2开始-注释/文档与打包u 生成javadocs文档u 生成jar文件坦克的不足之处u 面向对象的组织仍然不是很完美1)细小的毛病 退出时控制线程结束2)专门的GAME API3)主战坦克和机器人(敌人坦克)应当分开控制u 界面不漂

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论