没有合适的资源?快使用搜索试试~ 我知道了~
坦克大战游戏_java实现.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 44 浏览量
2022-06-11
13:08:03
上传
评论
收藏 120KB DOC 举报
温馨提示
试读
16页
坦克大战游戏_java实现
资源推荐
资源详情
资源评论
第一次课
一、要做的工作
1、 产生一个 800*600 的窗口,背景色为绿色。窗口可以被关闭,但不允许改
变大小
2、在窗口里画出一个红色的圆代表坦克
3、让坦克动起来
改变坦克的位置就相当于坦克移动了,因此首先需要把坦克的位置描述改为
变量
每重画一次坦克就动一次,让坦克不断的动就要不断的重画,我们用线程来
控制
二、知识点
1、使用 eclipse 建立项目,创建包和类的方法
2、变量命名规则:所有命名要求见名知义;类名首字母大小,变量和方法首字
母小写;驼峰标识(比如类名:TankWar)
3、事件机制
事件包括三个方面:监听器类,注册事件,覆盖方法
监听器类经常写成内部类(包括匿名内部类)或是类本身实现事件接口
事件接口包括 actionListener 接口、窗口事件接口、鼠标事件接口、键盘事
件接口等等
使用事件接口要求把接口的所有方法都写出,但不一定都实现
窗口事件和鼠标键盘事件接口还提供了较为简洁的适配器类
3、匿名内部类
类可以分为如下几种:
主类:包含主方法的类
内部类:在一个类内部定义的类为内部类
实例内部类:在一个类内部独立存在,不属于类的成员变量和方法
静态内部类:用 static 修饰的实例内部类
局部内部类:在一个类的方法内定义的类
匿名内部类:没有名字的局部内部类
外部类:包含内部类的类,外部类也可能是其他类的内部类
顶层类:不是任何类的内部类为顶层类
设计内部类的主要目标是“封装”。
顶层类只能用 public 修饰或者不修饰(即默认修饰方式),内部类可以
用 public,protected,private,默认四种方式修饰,局部内部类只能用
默认修饰
局部内部类和匿名内部类只在方法内可见,即该类只为该方法提供服务
实例内部类只在一个类内可见,只为该类提供服务
4、利用 eclipse 重写父类的方法
在 eclipse 中单击右键,源代码,生成覆盖方法。此时会列出当前类的所有父类,
当前类可以直接继承父类的方法。
5、图形的重画机制
在 frame 上画出的图形每次刷新时会重画,重画的过程是:系统自动调用
repaint 方法,repaint 调用 update 方法,update 调用 paint 方法,从而完成重画。
6、多线程
见第 17 课详细讲解
三、小注
1、我们使用的 Frame 组件,没有使用 JFrame,因为 JFrame 在后续画图时不好
用,到时举例看
第二次课
一、 要做的工作
1、 让坦克在键盘的控制下向四个方向移动
2、 我们已经写好一个坦克并且能够控制其移动,如果要求在加入一个坦克该
如何实现?
把坦克做成一个独立的类,把和坦克自身相关的属性和方法都写到坦克类
中,然后在 tankclient 类中生成 tank 类的对象,然后用 tanke 类的对象调用
坦克类的方法类完成各种功能
3、 让坦克在键盘的控制下向八个方向移动
1、 如何做出八个方向?通过四个方向键组合出八个方向,比如上、右同时
按下是一个方向。
2、 四个布尔变量代表四个方向键的按下情况,组合出八个方向,八个方向
用枚举类型表示。
4、优化代码:把一些可能会改变的值定义成常量
二、 知识点
1、 键盘事件适配器
键盘控制坦克移动就要使用键盘事件,事件三要素:监听器类(监听接口还是
适 配 器 类 ? 写 成 内 部 类 还 是 匿 名 内 部 类 ? ) , 注 册 事 件 , 覆 盖 方 法
(keypress,keytyped,keyreleased 用哪个方法)
2、 键盘代码
如何获取键盘按键代码:e.getKeyCode()
3、 Switch 语句:格式,case 后能跟什么样的变量?没有 break 会怎样?
4、 加入键盘事件后可否去掉多线程?
5、 面向对象编程思想:一切皆为对象。对项目进行抽象,形成若干个类,然
后生成对象来实现程序功能
把坦克抽象成一个类,把坦克的属性描述为成员变量,把坦克的行为描述为
方法。这样就把坦克相关的属性和方法都封装到一个类中,属性一般设计为
私有,通过 set 和 get 方法访问,方法一般为 public,供对象调用,从而实现
各种功能。
6、 构造方法
构造方法用来描述一个对象刚生成时的状态。调用构造方法才能生成对象。
一个类必须有构造方法,构造方法有三种情况
super(xxx): 第一句调用父类的构造方法
this(xxx): 第一句调用本类的其他构造方法
super(): 第一句没有调用任何其他的构造方法,系统会自动加上
这句,去调用父类的无参构造方法(如果父类没有无参构造方法,那么
子类会出错)
任何一个构造方法必然属于上述三者之一。任何一个类都必须提供一个空
的构造方法
7、 枚举类型
Tiger 中的一个重要新特性是枚举构造,它是一种新的类型,允许用常量来表
示特定的数据片断,而且全部都以类型安全的形式来表示。
Java 代码的两个基本的构造块是
类
和
接口
。现在 Tiger 又引入了
枚举
,一般
简称它为 enum。这个新类型允许您表示特定的数据点,这些数据点只接受分
配
定义枚举
enum Direction{U,D,R,L,RU,RD,LU,LD,STOP};
在这里,我使用了新的关键字 enum,为 enum 提供了一个名称,并指定了
允许的值。然后,Direction 就变成了一个
枚举类型
,
使用枚举类型
private Direction direction = Direction.STOP;
用以前定义过的类型(Direction)建立一个新的枚举(direction)之后,您
就可以像使用其他成员变量一样使用它了。当然,枚举只能分配枚举值中的一
个(例如,U,D,R 等)
三、 小注
1、 注意把坦克做成类后,程序的改变。
第三次课
一、 要做的工作
1、 添加子弹类
a) 新建一个 Missile 类作为子弹类
b) 设计子弹类的属性和方法
c) 要求子弹能够根据某个方向移动
d) 在主类中画出一个子弹,进行测试
2、 要求按下 ctrl 键让坦克打出子弹,并且让子弹沿着坦克移动的方向运动
a) 在坦克的 keyPress 方法中加入 ctrl 键响应,产生一颗子弹。写一个
attack 方法,在此处生成一个 Missile 对象。在 ctrl 响应中调用该方法
问题:上述方案无法打出子弹,因为没有画出子弹,两个地方可以调用
draw 方法画出子弹,tank 类里的 paint 方法,tankwar1 里的 paint 方法。
我们在 tanjwar1 里做,因为尽量把所有对象都定义到 tankwar1 里,这样
好管理。
b) 在 tankwar1 中定义一个子弹引用,在 tank 中生成子弹对象,那么如何
把 tank 中的子弹对象传递到 tankwar1 中。让 tank 持有 tankwar1 的引用,
然后把 tankwar1 的对象传递给坦克里的 tankwar1 的引用。
记住这种传递对象的方法。
c) 子弹从坦克中心打出
坦克的位置是 x,y,又知道坦克和子弹的半径,由此求出子弹的位置。
3、 坦克停止时也能打出子弹
子弹是根据坦克的方向飞行的,所以当坦克停止时子弹也就停止了。如何让
坦克停止时也能打出子弹呢,就是想办法记录坦克刚才的行动方向。我们用
一个炮筒方向来记录坦克的移动方向。
剩余15页未读,继续阅读
资源评论
omyligaga
- 粉丝: 54
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功