JAVA入门到精通-第33讲-绘图技术.坦克大战1

 
  用的是Access数据库,安全性不够好,性能也不够强大;
   
  躲在这里,坦克很少过来,做了一个随机数;
  把得分的记录保存在数据库里面;
  SQLServer2005中型数据库;
  
 
 
 
 (x,y)坐标;

 
 
  800x600;  
  表示计算机屏幕上的每一行由800个点组成,共有600行;
  共有480000个像素;
   
  java绘图技术:
  绘图一般在JPane上画;
覆盖JPanel的paintat方法
Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔
super.paint(g);
drawOval画一个圆形;
 JFrame不提供画图方法,是在JPanel上画的;
把JPanel放到JFrame里面;
 MyPanel是自己定义的继承自JPanel的面板;

 
  坦克为什么在动?
  repaint( )不断的刷新;
  paint()方法会被系统自动调用;
 比如拖动窗口,最大化最小化会重新画了了一次;paint()会被调用;
 
 
 fillRect实心矩形;
  
 deaw3DRect 矩形3D的凹凸感,由boolean决定;
 setColor设置颜色;
 
----------------------------------------------------------------------------------
坦克大战游戏演示
为什么选择这个项目
1、好玩
2、涉及到java各个方面的技术
    1、java面向对象编程;2、界面编程;3、绘图技术;4、多线程;5、文件i/o操作;6、数据库
3、巩固旧知识,学习新知识

java绘图坐标体系
绘图坐标本系--介绍
坐标原点位于左上角,以像素为单位。像素是计算机屏幕上最小的显示单位。在java的坐标系中,第一个是X坐标,表示当前位置为水平方向,距离坐标原点X个像素;第二个是Y坐标,表示当前位置为垂直方向,距离坐标原点Y个像素。
 


坐标体系--像素
计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是800×600,表示计算机屏幕上的每一行由800个点组成,共有600行,整个计算机屏幕共有480000个像素。现在的计算机可以支持更高的分辨率,也就是说,屏幕上可以显示更多的像素。因此,像素是一个密度单位,而厘米是长度单位,两者无法比较。
9
绘图原理(1)[Window013.java]
Component类提供了两个和绘图相关最重要的方法:
1、paint(Graphics g)绘制组件的外观
2、repaint()刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法来绘制组件
x
 
1
/**
2
* 功能:java绘图原理
3
*/
4
import java.awt.*;
5
import javax.swing.*;
6
public class Window013 extends JFrame{
7
    //定义组件
8
    MyPanel mp=null;
9
    public static void main(String[] args) {
10
        Window013 th=new Window013();
11
    }
12
    public Window013 (){
13
        //创建组件
14
        mp=new MyPanel();
15
        //加入组件
16
        this.add(mp);
17
        //设置窗体
18
        this.setSize(400, 300);
19
        this.setLocationRelativeTo(null);
20
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
21
        this.setVisible(true);
22
    }
23
}
24
25
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
26
class MyPanel extends JPanel{
27
    //重写(覆盖)JPanel的paint方法
28
    public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔
29
        //1、调用父类函数,完成初始化任务
30
        super.paint(g);//super.paint(g);这句话不能少
31
        System.out.println("Paint被调用");//用于测试绘图原理2paint调用
32
        //先画一个圆
33
        g.drawOval(10, 10, 30, 30);//drawOval方法是画圆
34
    }
35
}
 
 
------------------------------------------------------------------------------
绘图原理(2)
在以下情况paint()将会被调用:
1、窗口最小化,再最大化
2、窗口的大小发生变化
3、repaint函数被调用

java绘图技术--Graphics
Graphics类[Window014.java]
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、画图片 drawImage(Image img.int x,int y,..);
7、画字符串 drawString(String str,int x,int y);
8、设置画笔的字体 setFont(Font font);
9、设置画笔的颜色 setColor(Color c);
//java画图Graphics绘图类的使用方法
xxxxxxxxxx
41
 
1
import java.awt.*;
2
import javax.swing.*;
3
public class Window014 extends JFrame{
4
    //定义组件
5
    MyPanel1 mp=null;
6
    public static void main(String[] args) {
7
        Window014 th=new Window014();
8
    }
9
    //构造函数
10
    public Window014(){
11
        //构建组件
12
        mp=new MyPanel1();
13
        //加入组件
14
        this.add(mp);
15
        //设置窗体
16
        this.setSize(400, 300);
17
        this.setLocationRelativeTo(null);
18
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
19
        this.setVisible(true);
20
    }
21
}
22
//定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
23
class MyPanel1 extends JPanel{
24
    //重写(覆盖)JPanel的paint方法
25
    public void paint(Graphics g){//Graphics是绘图的重要类,可以把它理解成一只画笔
26
        //1、调用父类函数,完成初始化任务
27
        super.paint(g);
28
        //画一个直线
29
        g.drawLine(10, 10, 40, 10);
30
        //画矩形边框
31
        g.drawRect(50, 50, 40, 40);
32
        //画椭圆边框
33
        g.drawOval(100, 100, 60, 60);
34
        //画填充矩形
35
        g.setColor(Color.blue);
36
        g.fillRect(10, 150, 70, 70);
37
        //画填充椭圆
38
        g.setColor(Color.red);//设置画笔颜色
39
        g.fillOval(200, 50, 80, 80);
40
    }
41
}
 

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





猜你喜欢

转载自www.cnblogs.com/xuxaut-558/p/10045702.html