坦克大战1.0——前置知识

Java绘图坐标体系

 

  • 像素

 

 

 

  • 绘图原理

 

 

 

  • 小练习——画⚪
package game;

import javax.swing.*;
import java.awt.*;

/**
 * @author 紫英
 * @version 1.0
 * @discription 画⚪
 */
@SuppressWarnings("all")
public class DrawCircle extends JFrame {//窗口
    public DrawCircle(){
        Mypanel mypanel = new Mypanel();//new一个画板对象
        this.add(mypanel);//画板添加到窗口
        this.setSize(1500,1500);//设置窗口大小
        this.setVisible(true);//可视化
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时释放程序
    }

    public static void main(String[] args) {
        new DrawCircle();//程序运行时系统会自动调用paint方法
    }

}

class Mypanel extends JPanel{//画板
    @Override
    public void paint(Graphics g) {
        //System.out.println("paint");
        //画笔
        super.paint(g);
        //在(500,500的位置画一个矩形,矩形里画⚪)
        g.drawOval(100,100,500,500);
    }
}

 

 

  • Graphic类

 

   1.直线的坐标是两端点,矩形同理(对角线端点坐标)

   2.字符串坐标是字符串的左下角

  6.也可以用绝对路径

Image image = Toolkit.getDefaultToolkit().getImage("E:\\picture\\白凤.png");
        g.drawImage(image,500,500,471,346,this);
 

 

 

 

  • 画个小坦克

 

  • 事件处理机制

 

 

 

 

 

          

 

 

   案例——小球移动

package event;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 * @author 紫英
 * @version 1.0
 * @discription 小球移动案例
 */
public class BallMove extends JFrame {
    Mypanel mp=null;
    BallMove(){
        mp=new Mypanel();
        this.add(mp);//画板添加到窗口
        this.setSize(1000,750);//设置窗口大小
        this.setVisible(true);//可视化
        this.addKeyListener(mp);//监听器添加到窗口(接口多态)
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时释放程序
    }

    public static void main(String[] args) {
        new BallMove();
    }
}
class Mypanel extends JPanel implements KeyListener {
//    键盘监听
    //为了方便移动将位置做成变量
    int x = 200;
    int y = 200;
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x,y,100,100); //画个球
    }


    @Override
    public void keyTyped(KeyEvent e) {
//        有字符输出时触发

    }

    @Override
    public void keyPressed(KeyEvent e) {
//        按下键盘触发
//        System.out.println((char) e.getKeyCode()+"被按下");
        if (e.getKeyCode()==87){//w
            y--;//y--才是向上(页面左上角是原点)
        }else if (e.getKeyCode()==83){//s
            y++;
        }else if (e.getKeyCode()==65){//a
            x--;
        }else if (e.getKeyCode()==68){//d
            x++;
        }
        this.repaint();//重绘

    }

    @Override
    public void keyReleased(KeyEvent e) {
//        松开键盘触发

    }
}

按键代码见——键盘按键代码

 

 

 

 

 

 

posted @ 2022-01-24 00:16  紫英626  阅读(30)  评论(0编辑  收藏  举报

紫英