• 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
    }





  • 相关阅读:
    利用 fsockopen() 函数开放端口扫描器
    oracle如何返回列名作为第一条数据简单解决
    redis
    MYSQL
    JUC 多线程
    java单例模式六种实现方式
    java.net.URISyntaxException 问题解决
    Calender类——字段值介绍
    Dorado开发——树形下拉框
    Java—— 一点关于String的转换
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10045702.html
Copyright © 2020-2023  润新知