紧接着我们上一篇的坦克大战一,今天我们先画出一个坦克。

如果直接用面向过程的思想来做的话,那么很容易就可以画出一个坦克。

但是后面我们需要画出很多个坦克,

所以我们要先把面向对象的思想设计好。

我们的架构是Tank为一个父类,之后的我方坦克和敌方坦克都需要继承于这个类。

父类的属性如下:

//坦克类
class Tank{//坦克的横坐标int x = 0;//坦克的纵坐标int y = 0;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;}
}

由上面的代码可以看出,父类只有坦克的起始位置。其他属性还没有添加上。

在这个基础上我们再创建一个我方坦克类 Hero,属性如下:

//我的坦克
class Hero extends Tank{//套路调用父类构造函数public Hero(int x, int y){super(x, y);  //super调用父类构造函数}
}

我方坦克也是只设置了继承于父类的起始位置,其他什么都没有设置。

接着我们要开始在JPanel上面画坦克,要用最重要的画笔来画坦克。

(PS:我们可以在网上找点好看的坦克图,为什么要自己画这么low的坦克呢。

答:因为这样能节省对内存的消耗,自己画的图bit深度为2,网上找的可能是32bit。

内存开销过大肯能会导致画面不流畅)

接着我们要新建一个自己的MyPanel类来画坦克,属性如下:

//我的面板
class MyPanel extends JPanel
{//定义一个我的坦克Hero hero = null;//构造函数public MyPanel(){//在构造函数里面新建一个坦克,默认位置(10, 10)hero = new Hero(100, 10);}//冲写Paint函数public void paint(Graphics g){super.paint(g);//把活动区域填充为黑色(默认颜色)g.fillRect(0, 0, 400, 300);//用hero的坐标,把当前的画笔g传过去(不能自己new),//方向朝上,我方坦克drawTank(hero.getX(), hero.getY(), g, 0, 0);}/*** @brief 画出一个坦克* @param x  坦克的横坐标* @param y  坦克的纵坐标* @param g  画坦克的画笔* @param direction  坦克的方向(朝向哪边)* @param type  坦克的类型*/public void drawTank(int x, int y, Graphics g, int direction, int type){//判断坦克类型switch(type){//自己的坦克case 0:g.setColor(Color.CYAN);break;//敌方坦克case 1:g.setColor(Color.BLUE);break;default:break;     }//判断坦克方向switch(direction){//方向向上case 0:    //1.画出左边矩形//起始位置应该从hero中取g.fill3DRect(x, y, 5, 30, false);//2.画出右面矩形g.fill3DRect(x + 15, y, 5, 30, false);//3.画出中间矩形g.fill3DRect(x + 5, y + 5, 10, 20, false);//4.画出圆形g.fillOval(x + 5, y + 10, 10, 10);//5.画出线(炮筒)g.drawLine(x + 10, y + 15, x + 10, y);break;}}
}

当然我们的MyPanel也是集成于JPanel,在这里面我们要注意一下在调用drawTank这个方法的时候,画笔一定要用同一只。

千万不能再drawTank里面新建了一直画笔,否则画出来的坦克可能是七零八落的。

这里补充一下程序中的5、10、20这些数据怎么来的。是我们事先画图设置好的,如图:

最后我们在入口调用这个类在我们的面板上就画出了我们的第一只坦克。

public class MyTankGame1 extends JFrame{MyPanel mp = null; //新建一个MyPanelpublic static void main(String[] args) {// TODO Auto-generated method stubMyTankGame1 mt = new MyTankGame1();}public MyTankGame1(){mp = new MyPanel();this.add(mp);  //把MyPanel添加到JFrame主窗口this.setSize(400, 300);//设置主窗口大小this.setVisible(true); //主窗口可见}
}

运行一下,我们可以看到坦克已经画出来了。

Java之坦克大战(二)---坦克图形绘制相关推荐

  1. Matlab二维图形绘制与图形处理

    Matlab二维图形绘制与图形处理 一.二维图形绘制 1.极坐标图 2.散点图 3. 平面等值线图 二.图形处理 1.添加格栅,图例 和标注 2.定制坐标 3.在之前基础上继续作图 4.新建图形置于当 ...

  2. MATLAB二维图形绘制

    MATLAB二维图形绘制 数据点标记 数据点 颜色 线型 曲线图 一.plot函数 (一)最简单的plot函数调用格式: plot(x) (1)plot函数的参数 X 为普通向量, (2)plot函数 ...

  3. 计算机图形学实验一(二维图形绘制)

    计算机图形学实验一(二维图形绘制) 一.实验内容 二.实验环境 三.问题分析 四.算法设计 五.源代码 六.程序运行结果 一.实验内容 (1)绘制金刚石图案 金刚石图案的成图规则是:把一个圆周等分成n ...

  4. MATLAB学习——图形绘制(2):二维图形绘制plot指令

    摘要 二维图形是MATLAB图形的基础,也是应用最广泛的图形类型之MATLAB提供了许多二维图形绘制函数. MATLAB基本的二维图形包括线型(LinePlots) .散点型(ScatterPlots ...

  5. autocad2007二维图画法_CAD二维图形绘制的教程

    一般来说,大家使用CAD绘制的图形都是二维的,这些二维图形其实不难.接下来就是学习啦小编精心整理的一些关于CAD二维图形绘制的教程的相关资料,供你参考. CAD二维图形绘制的教程 1.绘图菜单绘图菜单 ...

  6. 【Java_项目篇1】--JAVA实现坦克大战游戏--坦克移动+添加敌方坦克(二)

    前期文章: [Java_项目篇<1>]--JAVA实现坦克大战游戏--画出坦克(一) 控制小球移动 1.外部类 实现KeyListener监听接口写法 package com.test3; ...

  7. java 坦克大战画坦克_【JAVA语言程序设计基础篇】--JAVA实现坦克大战游戏--画出坦克(二)...

    坦克类: //坦克父类 可以设置坦克出现位置(x,y) class Tank { int x = 0; int y = 0; public Tank (int x,int y){ this.x = x ...

  8. java 坦克大战画坦克_Java坦克大战部分:画出界面,敌人坦克,我的坦克,不出界,键盘事件【诗书画唱】...

    含很多自己写的个理解和注释,想出的解决,建议,提示,注意事项等方法: package tankeGame; import java.awt.Color; import java.awt.Graphic ...

  9. java 坦克大战画坦克_java简易坦克大战(2)

    public class Tank1 extends JFrame implements ActionListener { MyPanel mp = null; GuanKaPanel gkmb = ...

最新文章

  1. windows中的常用Dos命令
  2. 爬虫 404 try_无所不能的Python之爬虫那点事儿
  3. Kafka参数broker.id详解
  4. Python基础语法:数据类型、进制转换、转义字符、字符编码、整数与浮点数运算规则、布尔型运算规则
  5. Spring Bean的生命周期(非常详细)
  6. 支付宝老年大学招95后青年讲师:不要大厂经验高学历,只要会跳广场舞会钓鱼?...
  7. 布隆过滤器速度_高并发系统一定要考虑的 Bloom Filter 布隆过滤器
  8. nginx与IIS服务器搭建集群实现负载均衡(三)
  9. jq cookie的使用
  10. 开源 - WPF报表引擎
  11. 微软发布 Win11新补丁
  12. 计算机公式大小写,Excel表格金额大小写转换公式设置
  13. html怎么链接scc,htmlscc基础知识
  14. 关于HTML的table表格换行一事
  15. 泛式的extends和supper
  16. GitLab 安全漏洞 (CVE-2016-4340)复现
  17. Python逆向进阶:Web逆向私单
  18. python车牌识别系统开源代码_python+opencv实现车牌定位功能(实例代码)
  19. GRUB--多系统启动引导器
  20. Android音频架构工程师开篇引言

热门文章

  1. 怎么用云服务器搭建游戏,搭建游戏用什么云服务器
  2. 好好讲一讲:到底什么是Java架构师(含福利放送)
  3. RTX 3090 Ti 正式发布!30系列显卡的封顶之作!
  4. 深度学习环境配置:ubuntu 16.04 安装2080ti驱动 cuda9.0和cudnn7.3 anaconda3.7 tensorflow12.0
  5. 9款别出心裁的jQuery插件
  6. C#中的lock(锁)应用例子
  7. 读取MoleBox打包的可执行文件中的数据文件一法
  8. android 蓝牙自动断开,Android蓝牙:连接()/断开()
  9. 微信点餐系统的开发与实现
  10. C语言中用零作为终止标记,求出一批非零整数中的偶数.奇数的平均值,用零作为终止标记的程序...