坦克大战
关键:首先了解JAVA的图像加载时,代码是怎么运行的。
切勿进入的误区:在坦克还没建好前,千万不要考虑怎么让坦克动起来的问题。
JAVA的画图方法(重点)
JAVA画图工具主要是JPanel类,主要是paint方法,其参数是一支笔,即Graphics g,因此我们想要调用该对象的方法,即我们想要画图,我们需要继承该类,并重写方法。
关于Graphics g,g的方法我就不在此赘述了,可以参考JDK手册。
我们来讲一下图像是怎么生成的:
首先需要工具
1:画板,即我们写的继承了Jpanel类的类我们称为HB类吧,它的对象就是画板。
2:画笔,画板继承Jpanel后,重写paint方法,即得画笔g。
3:窗体,一切都准备好后,总得有个能够放画板得地方,即窗体Jframe。
然后
1、你主函数所在得类我们称为MAIN类吧,需要继承一个窗体类JFrame,然后就可以使用父类JFrame得方法,在程序运行时,把窗体中的东西展示出来。
2、具体实现:
-
在MAIN类中,首先定义一个DB类型的变量我们就叫mp,用于接受DB类的对象,放在外面是为了其他方法体也能用。
-
创建一个MAIN类的无参构造器。
-
在构造器中进行以下步骤:
//初始化面板
mp = new MyPanel();
//把面板放入到窗口
this.add(mp);//这里this代表DrawCircle add把画板放到窗体里面
//设置窗体的大小
this.setSize(400,300);
//当点击红叉程序就真正退出了
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//让它可以显示
this.setVisible(true);
-
在主函数中new MAIN类的对象
3、程序怎么运行的?
程序会在main中进行,先遇到的是new MAIN(),然后进入到MAIN的构造器,创建DB类对象,创建窗体,然后系统会自动调用paint方法,用笔画出图像。
//绘图的一个方法 //系统自动调用paint //第一次出现时 //最大化 //最小化 //窗口大小发生变化都会调用paint
public void paint(Graphics g) {
super.paint(g);//super一定要保留
//用笔画一个圆形
g.drawOval(10,10,100,100);
//演示不同的图像
//直线
g.drawLine(10,10,100,100);
//矩形
g.drawRect(100,100,200,300);
//画填充矩形
g.setColor(Color.red);
g.fillRect(10,20,100,100);
//填充椭圆/圆
g.fillOval(10,10,100,100);
//画图片固定写法,第一个斜杠代表项目的根目录
Image image = Toolkit.getDefaultToolkit().getImage("out/bg.png");
g.drawImage(image,20,20,150,149,this);
//画字符串
//可以给画笔设置颜色
g.setColor(Color.blue);
g.setFont(new Font("黑体",Font.BOLD,50));
g.drawString("北京你好",100,100);
}
以上就是yi整个过程,坦克大战,是基于此过程的拓展,坦克大战把坦克分为了敌方坦克和我方坦克,因此会创建
个坦克类(父类),子类一个是我方,一个是敌方,分为2个对象是因为地方坦克要完成的方法和我方坦克不一样,这样容易控制,但都继承了普通坦克的特征。加上画板类,以及主函数类。
一共是5个类
坦克大战主函数所在的类
package Tnke;
import javax.swing.*;
public class TankDoker extends JFrame {
MyPanel myPanel=null;
public static void main(String[] args) {
new TankDoker();
}
public TankDoker(){
myPanel=new MyPanel();
this.add(myPanel);
this.setSize(1000,750);
this.