// 运用封装思想实现绘制坦克的方法/*** @param x 绘制坦克的起始横坐标* @param y 绘制坦克的起始纵坐标* @param g 画笔参数,调用该类的方法绘制图形* @param direction 绘制坦克的朝向* @param type 坦克的类型:自己的坦克,地方坦克*/publicvoiddrawTank(int x,int y,Graphics g,int direction,int type){// 判断坦克类型,设置不同的颜色switch(type){case0:// 自己的坦克:青色g.setColor(Color.CYAN);break;// 防止穿透现象的发生case1:// 敌人的坦克:红色g.setColor(Color.red);break;}// 根据坦克方向,绘制坦克switch(direction){case0:// 表示向上g.fill3DRect(x, y,10,60,false);// 画出坦克左边轮子g.fill3DRect(x +30, y,10,60,false);// 画出坦克右边轮子g.fill3DRect(x +10, y +10,20,40,false);// 画出坦克盖子g.fillOval(x +10, y +20,20,20);// 画出圆形盖子g.drawLine(x +20, y +30, x +20, y);// 画出炮筒,break;case1://表示向右g.fill3DRect(x, y,60,10,false);//画出坦克上边轮子g.fill3DRect(x, y +30,60,10,false);//画出坦克下边轮子g.fill3DRect(x +10, y +10,40,20,false);//画出坦克盖子g.fillOval(x +20, y +10,20,20);//画出圆形盖子g.drawLine(x +30, y +20, x +60, y +20);//画出炮筒break;case2://表示向下g.fill3DRect(x, y,10,60,false);//画出坦克左边轮子g.fill3DRect(x +30, y,10,60,false);//画出坦克右边轮子g.fill3DRect(x +10, y +10,20,40,false);//画出坦克盖子g.fillOval(x +10, y +20,20,20);//画出圆形盖子g.drawLine(x +20, y +30, x +20, y +60);//画出炮筒break;case3://表示向左g.fill3DRect(x, y,60,10,false);//画出坦克上边轮子g.fill3DRect(x, y +30,60,10,false);//画出坦克下边轮子g.fill3DRect(x +10, y +10,40,20,false);//画出坦克盖子g.fillOval(x +20, y +10,20,20);//画出圆形盖子g.drawLine(x +30, y +20, x, y +20);//画出炮筒break;}}
packageTankGame;importjavax.swing.*;importjava.awt.*;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;importjava.util.Vector;// 通过键盘监听接口来实现坦克的移动publicclass mypanle extendsJPanelimplementsKeyListener{// 定义自己的坦克MyTank myTank =null;// 考虑多线程问题,使用线程安全的 Vector 存放敌人的坦克Vector<EnemyTank> enemyTanks =newVector<>();int enemyTankSize =3;// 坦克的初始化publicmypanle(){myTank =newMyTank(100,100);// 绘制坦克的初始位置for(int i =0; i < enemyTankSize; i++){EnemyTank enemyTank =newEnemyTank((100*(i +1)),0);enemyTank.setDirection(2);// 初始化方向向下,和自己的坦克对峙enemyTanks.add(enemyTank);}}// 绘制游戏区域背景,在此基础上绘制坦克@Overridepublicvoidpaint(Graphics g){super.paint(g);g.fillRect(0,0,1000,750);// 默认是黑色// 调用方法绘制坦克/*diretion(顺时针方向:上下左右)(1)0表示向上的坦克(2)1表示向右的坦克(3)2表示向下的坦克(4)3表示向左的坦克type(1)0表示自己的坦克,颜色是青色(2)1表示敌方的坦克,颜色是红色*/// 绘制自己的坦克drawTank(myTank.getX(), myTank.getY(), g, myTank.getDirection(),0);// 绘制敌人的坦克for(int i =0; i < enemyTanks.size(); i++){EnemyTank enemyTank = enemyTanks.get(i);drawTank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirection(),1);}}// 运用封装思想实现绘制坦克的方法/*** @param x 绘制坦克的起始横坐标* @param y 绘制坦克的起始纵坐标* @param g 画笔参数,调用该类的方法绘制图形* @param direction 绘制坦克的朝向* @param type 坦克的类型:自己的坦克,地方坦克*/publicvoiddrawTank(int x,int y,Graphics g,int direction,int type){// 判断坦克类型,设置不同的颜色switch(type){case0:// 自己的坦克:青色g.setColor(Color.CYAN);break;// 防止穿透现象的发生case1:// 敌人的坦克:红色g.setColor(Color.red);break;}// 根据坦克方向,绘制坦克switch(direction){case0:// 表示向上g.fill3DRect(x, y,10,60,false);// 画出坦克左边轮子g.fill3DRect(x +30, y,10,60,false);// 画出坦克右边轮子g.fill3DRect(x +10, y +10,20,40,false);// 画出坦克盖子g.fillOval(x +10, y +20,20,20);// 画出圆形盖子g.drawLine(x +20, y +30, x +20, y);// 画出炮筒,break;case1://表示向右g.fill3DRect(x, y,60,10,false);//画出坦克上边轮子g.fill3DRect(x, y +30,60,10,false);//画出坦克下边轮子g.fill3DRect(x +10, y +10,40,20,false);//画出坦克盖子g.fillOval(x +20, y +10,20,20);//画出圆形盖子g.drawLine(x +30, y +20, x +60, y +20);//画出炮筒break;case2://表示向下g.fill3DRect(x, y,10,60,false);//画出坦克左边轮子g.fill3DRect(x +30, y,10,60,false);//画出坦克右边轮子g.fill3DRect(x +10, y +10,20,40,false);//画出坦克盖子g.fillOval(x +10, y +20,20,20);//画出圆形盖子g.drawLine(x +20, y +30, x +20, y +60);//画出炮筒break;case3://表示向左g.fill3DRect(x, y,60,10,false);//画出坦克上边轮子g.fill3DRect(x, y +30,60,10,false);//画出坦克下边轮子g.fill3DRect(x +10, y +10,40,20,false);//画出坦克盖子g.fillOval(x +20, y +10,20,20);//画出圆形盖子g.drawLine(x +30, y +20, x, y +20);//画出炮筒break;}}}