Java 第16章 坦克大战1-2 思路整理

文章目录

  • 1 绘制坦克
    • 坦克
    • 画板Panel
    • 画框Frame
  • 2 让坦克动起来
    • 画板Panel
  • 3 本章作业

1 绘制坦克

坦克

不同坦克有共同属性,可以先提取共同特征(坐标位置)作为父类,然后其他坦克类继承它。

画板Panel

有坦克在画板上显示,所以包含不同的坦克子类,并在构造器初始化时创建该具体对象。

paint方法中:

  1. g.fillRect创建黑色背景
  2. 画坦克,由于代码会进行复用(会画很多坦克),所以在Panel类中专门写方法drawTank实现。其中包括对坦克类型(我方为青色,敌方为黄色)和前进方向(具体绘制,包括上下左右朝向)的设置
    在这里插入图片描述

画框Frame

有画板在画框中,所以包含Panel对象,并在构造器初始化时创建该具体对象。

构造器对于画板对象的设置,包括:

  1. 在Frame类对象中创建并添加画板Panel
  2. 设置Panel大小、默认关闭操作、是否可见

2 让坦克动起来

画板Panel

实现KeyListener接口,在keyPressed方法中通过WSAD键实现对坦克上下左右的控制,并调用this.repaint();重新绘制坦克。

上下左右的控制:

keyPressed中,以向上移动举例:

  1. 将坦克对象的方向设置好,然后朝该方向移动一定位置(坐标±speed)
  2. 由上引出方向direct和速度speed两个变量,均加入Tank类进行实现。
  3. 同时,移动位置也集成到Tank类中,可以直接对类中的坐标进行操作。

在Frame中添加this.addKeyListener(mp);(mp是Panel)用于监听。

3 本章作业

在这里插入图片描述
首先考虑到敌方坦克具有其特殊属性,所以单独建类EnemyTank,继承父类Tank。

考虑到增删的便利性、迭代的高效性和最重要的线程安全,我们使用集合Vector对坦克进行存储(静态数组三种优势都没有,ArrayList则是没有线程安全性)。

建立enemyTankSize作为敌方坦克的计数器,并在遍历集合时使用该变量,不然可能会出现被击毁的敌方坦克仍然显示的情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/297652.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Openai的openai新版本调用方式

最近大家有没有发现Openai的openai已经更新到1.6.1了,而且API的调用方式发生了巨大的变化,下面来看看openai新的调用方式吧。 欢迎关注公众号 module ‘openai’ has no attribute ChatCompletion. 提示openai的版本过低。(pip install -U openai) 1. Chat API from openai…

4.7 【共享源】流的生产者(二)

七,模式 流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。有效模式如下: 7.1 SCREEN_STREAM_MODE_DEFAULT 如果生产者应用程序没有在流上明确设置 SCREEN_PROPERTY_MODE 属性,则 Sc…

七天搞定java接口自动化测试实战,一文搞定...

前言 无论是自动化测试还是自动化部署,撸码肯定少不了,所以下面的基于java语言的接口自动化测试,要想在业务上实现接口自动化,前提是要有一定的java基础。 如果没有java基础,也没关系。这里小编也为大家提供了一套jav…

电子科大软件系统架构设计——软件建模详细设计

文章目录 软件建模详细设计概述软件建模详细设计目标软件建模详细设计原则开闭原则里氏 (Liskov) 替换原则依赖倒置原则接口分离原则单一职责原则最少知识原则(迪米特法则)高内聚原则松耦合原则可重用原则 软件建模详细设计内容 UML 软件静态结构视图建模…

vitis HLS中实现canny算法的IP核

一、前言 canny边缘检测主要用于提取图像的边缘,是最常用且有效的边缘检测算法。在AMD赛灵思提供的库函数中,使用xf::cv::Canny和xf::cv::EdgeTracing两个函数实现canny边缘提取。本文举例说明如何在vitis HLS 2023.1中实现canny算法。 二、xf::cv::Cann…

【数据结构】布隆过滤器原理详解及其代码实现

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

luceda ipkiss教程 53:在版图上加中文

要在版图上加中文,如: 可以通过如下方法实现: 首先,可以在ppt中加入文本框,在文本框中输入想要加到版图上的中文内容,如,复旦大学,并将文本框存为windows位图。 其次,通…

基于Java (spring-boot)的仓库管理系统

一、项目介绍 本系统的使用者一共有系统管理员、仓库管理员和普通用户这3种角色: 1.系统管理员:通过登录系统后,可以进行管理员和用户信息的管理、仓库和物品分类的管理,以及操作日志的查询,具有全面的系统管理权限。 2.仓库管理…

现代控制理论-李雅普诺夫

现代控制理论-李雅普诺夫 单输入单输出系统(BIBO)的系统函数如下: 则,该系统的能控标准型(能空性)为: 能观性: 李雅普诺夫下的稳定性: 李雅普诺夫下的渐进稳定性&a…

Docker部署 flowable-ui 进行流程建模

Docker部署 flowable-ui 进行流程建模 简介 安装Docker Desktop,本篇无安装步骤安装正常打开运行后,正式开始部署flowable-uicmd执行拉取镜像操作docker pull flowable/flowable-uicmd启动镜像docker run -d --name flowable -p 8081:8080 flowable/flowable-ui修…

【C++11/17】std::map高效插入

我们在使用stl的映射容器std::map时,经常需要向容器中插入数据。由于map的元素key值是唯一的,我们经常遇到这样的场景: 向map中插入元素时,指定的key已经存在则直接更新;指定的key不存在,然后才做插入操作…

【图的应用四:关键路径】- 用 C 语言实现关键路径

目录 一、AOE-网 二、算法的实现 2.1 - ALGraph.h 2.2 - ALGraph.c 2.3 - Test.c 一、AOE-网 与 AOV-网相对应的是 AOE-网(Activity On Edge),即以边表示活动的网。AOE-网是一个带权的有向无环图,其中,顶点表示事…