JAVA入门到精通-第34讲-绘图技术-坦克大战2
椭圆的X/Y轴在左上角;


Toolkit是一个类;
用Panel里面的getResource方法把图片加载到Toolkit里面;

dx1/2图片左上角;
dy1/dy2图片的宽高;
this表示JPanel本身;表示把图片画到JPanel上;

str画出什么东西;
x ,y 出现的位置;

Font有三个参数:“字体”,“字体粗体还是斜体”,“字体的大小”

一般不会用现成图片,耗费资源比较大;
class Tank

坦克下面有各种各样的坦克,先抽象出来一个父类;
用父类的构造函数初始化子类的对象;

坦克的活动区域在JPanel上;
将来的坦克是生活在Panel区域里面的;

可以认为,坦克是一个Panel的成员变量的;
一个类里面是可以有引用类型的;

以左上角的参照点来计算;

X/Y轴坐标从hero中取得;
g.fill填充的 颜色;


把整个代码进行封装-画出坦克的函数:敌人的函数、我的函数
:横坐标X,纵坐标Y,画笔g,方向,坦克的类型;

switch判断什么类型的坦克,敌人的坦克?我的坦克?


这样画不同的坦克,一次就搞定了;
/画图Graphics画图类--画图片--画字[Window015.java]
xxxxxxxxxx40
1
import java.awt.*;2
import javax.swing.*;3
public class Window015 extends JFrame{4
//定义组件5
MyPanel1 mp=null;6
public static void main(String[] args) {7
Window015 th=new Window015();8
}9
public Window015(){10
//构建组件11
mp=new MyPanel1();12
//加入组件13
this.add(mp);14
//设置窗体15
this.setSize(400, 300);16
this.setLocationRelativeTo(null);17
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);18
this.setVisible(true);19
}20
}21
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)22
class MyPanel1 extends JPanel{23
//重写(覆盖)JPanel的paint方法24
public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔25
//1、调用父类函数,完成初始化任务26
super.paint(g);27
//在面板上画出图片28
Image im=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/F22.jpg"));29
//实现30
g.drawImage(im, 0, 0, 300, 200, this);31
32
//如何画出字33
g.setColor(Color.red);34
g.setFont(new Font("黑体",Font.BOLD,40));35
g.drawString("祖国万岁", 100, 100);36
//画弧形37
g.drawArc(100, 100, 120, 200, -50, -100);38
}39
}40

x
1
package com.guiTest.www.model;2
import java.awt.*;3
import javax.swing.*;4
public class MyTank01 extends JFrame5
{6
//定义组件7
MyPanel mp=null;8
public static void main(String[] args) {9
// TODO Auto-generated method stub10
MyTank01 mt=new MyTank01();11
}12
13
14
15
//构造函数16
public MyTank01(){17
//构建组件18
mp=new MyPanel();19
20
//加入组件21
this.add(mp);22
23
//设置JFrame窗体24
this.setTitle("坦克大战");//JFrame标题25
this.setSize(400, 300);//JFrame窗体大小26
this.setLocationRelativeTo(null);//在屏幕中心显示27
this.setVisible(true);//显示28
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame29
30
}31
}32
//我的面板Panel33
class MyPanel extends JPanel{34
//定义一个我的坦克35
Hero hero=null;36
37
//构造函数38
public MyPanel(){39
hero=new Hero(10,10);//我的坦克初始位置40
}41
42
//重写paint函数43
public void paint(Graphics g){44
super.paint(g);//调用父类paint方法45
//设置Panel底色46
g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域47
//调用坦克48
this.drawTank(hero.getX(), hero.getY(), g, 0, 1);49
50
}51
52
//画出坦克的函数53
public void drawTank(int x,int y,Graphics g,int direct,int type){54
//判断是什么类型的坦克55
switch(type){56
case 0:57
g.setColor(Color.cyan);//我的坦克颜色58
break;59
case 1:60
g.setColor(Color.yellow);//敌人坦克颜色61
break;62
}63
64
//判断坦克的方向65
switch(direct){66
//向上走67
case 0:68
//画出我的坦克(到时再封装成一个函数)69
//1、画出左边的矩形70
g.fill3DRect(x, y, 5, 30, false);71
//2、画出右边的矩形72
g.fill3DRect(x+15, y, 5, 30, false);73
//3、画出中间矩形74
g.fill3DRect(x+5, y+5, 10, 20, false);75
//4、画出中间圆形76
g.fillOval(x+5, y+10, 10, 10);77
//5、画出线(炮筒)78
g.drawLine(x+10, y+15, x+10, y);79
break;80
}81
}82
83
}84
85
//定义坦克类86
class Tank{87
//表示坦克的X横坐标Y纵坐标88
int x=0,y=0;89
90
public Tank(int x,int y){91
this.x=x;92
this.y=y;93
}94
95
public int getX() {96
return x;97
}98
public void setX(int x) {99
this.x = x;100
}101
public int getY() {102
return y;103
}104
public void setY(int y) {105
this.y = y;106
}107
}108
109
//我的坦克110
class Hero extends Tank{111
public Hero(int x,int y){112
super(x,y);113
}114
} 1、public构造函数-构造JFrame;
2、class MyPanel 构造面板
3、class Tank 构造坦克
4、class Hero extends Tank 构造“我的坦克”


浙公网安备 33010602011771号