Java 实现坦克大战 1.0
文章和代码已经归档至【Github 仓库:https://github.com/timerring/java-tutorial 】或者公众号【AIShareLab】回复 java 也可获取。
坦克大战 1.0
java 绘图坐标体系
坐标体系-介绍
下图说明了 Java 坐标系。坐标原点位于左上角,以像素为单位。在 Java 坐标系中,第一个是 x 坐标,表示当前位置为水平方向,距离坐标原点 x 个像素;第二个是 y 坐标,表示当前位置为垂直方向,距离坐标原点 y 个像素。
坐标体系-像素
绘图还必须要搞清一个非常重要的概念-像素一个像素等于多少厘米?
计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是 800×600,表示计算机屏幕上的每一行由 800 个点组成,共有 600 行,整个计算机屏幕共有 480 000 个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较。
介绍-快速入门
绘图原理
在面板上画一个小圆。
Component 类提供了两个和绘图相关最重要的方法:1. paint(Graphics g)绘制组件的外观
repaint()刷新组件的外观。
当组件第一次在屏幕显示的时候,程序会自动的调用 paint()方法来绘制组件。在以下情况 paint(将会被调用:
1.窗口最小化.再最大化
2.窗口的大小发生变化
3.repaint 方法被调用
Graphics 类
Graphics 类你可以理解就是画笔,为我们提供了各种绘制图形的方法:[参考 jdk 帮助文档]
1.画直线 drawLine(int x1,int y1,int x2,int y2)
2.画矩形边框 drawRect(int x, int y, int width, int height)
3.画椭圆边框 drawOval(int x, int y, int width, int height)
4.填充矩形 fillRect(int x, int y, int width, int height)
5.填充椭圆 fillOval(int x, int y, int width, int height)
6.画图片 drawlmage(Image img, int x, int y. ..)
7.画字符串 drawString(String str, int x, int y)
这里是以左下角为参考系的。
8.设置画笔的字体 setFont(Font font)
9.设置画笔的颜色 setColor(Color c)
绘出坦克
java 事件处理机制
基本说明
java 事件处理是采取"委派事件模型"。当事件发生时,产生事件的对象,会把此"信息”传递给"事件的监听者"处理,这里所说的“信息"实际上就是 java.awt.event 事件类库里某个类所创建的对象,把它称为"事件的对象"。
示意图
事件处理机制深入理解
前面我们提到几个重要的概念事件源,事件,事件监听器我们下面来全面的介绍它们.
事件源:事件源是一个产生事件的对象,比如按钮,窗口等。
事件:事件就是承载事件源状态改变时的对象,比如当键盘事件、鼠标事件、窗口事件等等,会生成一个事件对象,该对象保存着当前事件很多信息,比如 KeyEvent 对象有含有被按下键的 Code 值。 java.awt.event 包和 javax.swing.event 包中定义了各种事件类型
事件类型:查阅 jdk 文档
事件监听器接口: (1)当事件源产生一个事件,可以传送给事件监听者处理 (2)事件监听者实际上就是一个类,该类实现了某个事件监听器接口比如前面我们案例中的 MyPanle 就是一个类,它实现了 KeyListener 接口,它就可以作为一个事件监听者,对接受到的事件进行处理。 (3)事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现多个监听接口 (4)这些接口在 java.awt.event 包和 javax.swing.event 包中定义。列出常用的事件监听器接口,查看 jdk 文档。
坦克动起来
现在我们学习 java 事件处理机制和 java 绘图技术,请试试看如何让你的坦克可以通过按键控制上右下左(wdsa 表示)的移动。
作业
画出三辆敌人的坦克,注意颜色。如图所示分析:
因为敌人的坦克,是在 MyPanel 上所以我们的代码在 MyPanel
因为敌人的坦克,后面有自己特殊的属性和方法,可以单开一个 EnemyTank
敌人坦克数量多,可以放入到集合 Vector ,因为考虑多线程问题
代码同上。
版权声明: 本文为 InfoQ 作者【timerring】的原创文章。
原文链接:【http://xie.infoq.cn/article/809e7a2594c57523cc60b3f9a】。未经作者许可,禁止转载。
评论