Java高级Day26-绘制坦克大战
82.坦克大战
绘图入门和机制:
//在面板上画圆 public class HelloJava extends JFrame {//JFrame对应窗口,即画框 //定义一个面便private MyPanel mp = null;public static void main(String[] args) {new HelloJava();}public HelloJava(){//初始化面板mp = new MyPanel();//把面板放入大奥窗口(画框)this.add(mp);//设置窗口大小this.setSize(400,300);//点击窗口的X,程序关闭this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);} } //1.先定义一个MyPanel()面便 class MyPanel extends JPanel{ //1.MyPanel 对象就是一个画板//2.Graphics g 把 g 理解成一支画笔//3.Graphics 提供了很多绘图的方法@Overridepublic void paint(Graphics g) {//绘图方法super.paint(g);//调用父类的方法完成初始化//画出一个圆形g.drawOval(10,10,100,100);} }
绘图原理:
Component类提供了两个和绘图相关最重要的方法:
-
paint(Graphics g)绘制组件的哇爱管
-
repaint()刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动的调用paint()方法,以下情况会被调用
-
窗口最小化,再最大化
-
窗口的大小发生变化
-
repaint函数被调用
Graphics类
-
画直线 drawLine(int x1,int y1,int x2,int y2)
-
画矩形边框 drawRect(int x,int y,int width,int height)
-
画椭圆边框 drawOval(int x,int y,int width,int height)
-
填充矩形 fillRect(int x,int y,int width,int height)
-
填充椭圆 fillOval(int x,int y,int width,int height)
-
画图片 drawImage(Image img,int x,int y)
-
画字符串 drawString(String str,int x,int y,..)
-
设置笔画的字体 setFont(Font font)
-
设置笔画的颜色 setColor(Color c)
绘制坦克:
//绘制面板 public class MyPanel extends JPanel {//定义我的坦克MyTank mytank = null;public MyPanel(){mytank = new MyTank(100,100);//初始化自己的坦克} @Overridepublic void paint(Graphics g) {super.paint(g);g.fillRect(0,0,1000,750);//填充矩形,默认黑丝} } //坦克类 public class Tank {private int x;//坦克的横坐标private int y;//坦克的纵坐标 public Tank(int x,int y){this.x = x;this.y = y;} public int getX() {return x;} public void setX(int x) {this.x = x;} public int getY() {return y;} public void setY(int y) {this.y = y;} } //绘制自己的坦克 public class MyTank extends Tank{public MyTank(int x, int y) {super(x, y);} } //绘制界面 public class TankGame extends JFrame {//定义MyPanelMyPanel mp = null;public static void main(String[] args) {TankGame tankGame = new TankGame();}public TankGame(){mp = new MyPanel();this.add(mp);this.setSize(1000,750);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);} }
绘出坦克:
//编写方法,画出坦克public void drawTank(int x,int y,Graphics g,int direct,int type){ //根据不同类型坦克,设置颜色switch (type){case 0://我们的坦克g.setColor(Color.cyan);break;case 1://敌人的坦克g.setColor(Color.yellow);break;} //根据坦克方向,来绘制坦克switch (direct){case 0://表示向上g.fill3DRect(x, y, 10,60,false);//画出坦克左边的轮子g.fill3DRect(x + 30, y, 10,60,false);//画出坦克右边的轮子g.fill3DRect(x + 10, y + 10, 20,20,false);//画出坦克身子g.fillOval(x + 10, y + 20, 20,20);//画出坦克圆盖g.drawLine(x + 20, y + 30, x +20,y);//画出坦克炮筒break;default:System.out.println("暂时没有处理");}}