【JAVADAY12-坦克大战之让坦克动起来,画图技术,按键监听】

坦克大战

关键:首先了解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.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keyle777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值