坦克大战Java项目二

《Java小游戏实现》:坦克大战 《Java小游戏实现》:坦克大战前面写了一个简单的聊天小程序,今天开始就写一个坦克大战的游戏,算是对Java相关小知识点的一个应用。这个游戏的完成,我们也是分步完成,逐步累加,一个一个小功能的添加,最后直至完成整个游戏的开发。第一步:写一个界面 public class TankClient extends JFrame{ public static void main(Stri 阅读详情

任务二 绘制坦克外形

绘图技术
1.1.1绘图实现原理
Java在AWT的根类Component类中预置了paint(Graphics g)方法
paint方法的参数是一个图形类Graphics对象
在类Graphics中系统预置了大量的用于图形处理与输出的方法
在paint()方法的重新定义中,可以通过Graphics的对象g来调用方法进行图形处理与输出。
paint()方法是由程序运行的环境来调用,每当一个AWT构件首次显示或在部分显示已被破坏而必须刷新时该方法被自动地调用。
Component类提供了两个和绘图相关最重要的方法
1)paint(Graphics g)绘制组件外观
2)repaint()刷新组件的外观
3)update(Graphics g): 调用paint()方法,刷新组件外观。
当组件第一次在屏幕显示时,程序会自动的调用paint()方法来绘制组件。
1.1.2 Graphics类
Graphics类是一个抽象的画笔对象,Graphics可以在组件上绘制丰富多彩的几何对象和位图。坐标同前面讲的一样,容器左上角为(0,0),向右x坐标增加,向下y坐标增加。
1)在Graphics类中使用drawLine()方法画一条线段,方法如下:
drawLine(int x1,int y1,int x2,int y2)
2)Graphics类中提供了3种类型的矩形:普通矩形、圆角矩形和三维矩形。
每一种矩形都提供两种不同风格的方法:
仅画出矩形的边框;
不仅画出边框,并且还用相同的颜色将整个矩形区域填满;
 画出普通矩形
drawRect(int x,int y,int width,int)
 画出一个填充型风格的普通矩形
fillRect(int x,int y,int width,int height)
 画出一个圆角矩形
drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)
 画填充型的圆角矩形
fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)
 画三维矩形
draw3DRect(int x,int y,int width,int height,boolean raised)
 画填充型三维矩形
fill3DRect(int x,int y,int width,int height,boolean raised)
3)圆和椭圆的输出
Java中绘制椭圆是以其外接矩形作为参数来实现的,与画普通矩形的方法相似。
drawOval(int x,int y,int width,int height) 绘制一个椭圆
fillOval(int x,int y,int width,int height) 绘制椭圆并将其内部用前景色填充。
任务2实现
思考:项目中既有我方坦克,也有敌方坦克,敌我双方坦克颜色不同,出现位置不同,并且后期坦克还会移动。在程序中如何设计?
类提取:名词提取法,项目需求文档,提取名词。名词有可能是类,还有可能是类的静态属性,子弹
坦克属性:坐标,方向,颜色,类型

需要注意的是:

	要在任务一中创建的MenuDemo类中创建GamePanel的对象,将其添加到center容器中
		`GamePanel tk=new  GamePanel();
			center.add("jiemian",tk);`
	然后在对**开始**菜单项添加事件监听
startMenuItem.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				card.show(center,"jiemian");
			}
			
		});

分别创建四个类

1. GamePanel //用于呈现坦克的界面

import java.awt.Color;
import java.awt.Graphics;

import java.util.Vector;

import javax.swing.JLabel;
import javax.swing.JPanel;

public class GamePanel extends JPanel{
	Vector<DfTank> v;
	DfTank df1,df2,df3;
	MyTank my;
	public GamePanel() {
		JLabel jl1;
		jl1=new JLabel("Game Start!");
		this.add(jl1);
		my=new MyTank(10,10,1);
		v=new Vector<DfTank>();
		df1=new DfTank(130,250,2);
		df2=new DfTank(250,100,3);
		df3=new DfTank(300,150,4);
		v.add(df1);
		v.add(df2);
		v.add(df3);
	} 
	
	public void paint(Graphics g) {
		super.paint(g);
		    drawTank(g,my.getX(),my.getY(),my.getType(),my.getDirection());
			for(int i=0;i<v.size();i++) {
				DfTank df=(DfTank)v.get(i);		
				drawTank(g,df.getX(),df.getY(),df.getType(),df.getDirection());
			}
	}
	public void drawTank(Graphics g, int x, int y, int type, int direction) {
		switch (type) {
		case 1: // 我方坦克
			g.setColor(Color.red);
			break;
		case 0:// 敌方坦克
			g.setColor(Color.blue);
			break;
		}
		switch (direction) {
		case 1:// 方向向上
			g.fill3DRect(x, y, 5, 30, false); // 绘制左边矩形
			g.fill3DRect(x + 5, y + 5, 10, 20, false); // 绘制中间矩形
			g.fill3DRect(x + 15, y, 5, 30, false);// 绘制右边矩形
			g.drawOval(x + 8, y + 11, 4, 4);// 绘制圆
			g.drawLine(x + 10, y, x + 10, y + 15);// 绘制线
			break;
		case 2:// 方向向右
			g.fill3DRect(x, y, 30, 5, false); // 绘制上边矩形
			g.fill3DRect(x + 5, y + 5, 20, 10, false); // 绘制中间矩形
			g.fill3DRect(x, y + 15, 30, 5, false);// 绘制下边矩形
			g.drawOval(x + 11, y + 8, 4, 4);// 绘制圆
			g.drawLine(x + 15, y + 10, x + 30, y + 10);// 绘制线
			break;
		case 3:// 方向向下
			g.fill3DRect(x, y, 5, 30, false); // 绘制左边矩形
			g.fill3DRect(x + 5, y + 5, 10, 20, false); // 绘制中间矩形
			g.fill3DRect(x + 15, y, 5, 30, false);// 绘制右边矩形
			g.drawOval(x + 8, y + 11, 4, 4);// 绘制圆
			g.drawLine(x + 10, y + 15, x + 10, y + 30);// 绘制线
			break;
		case 4:// 方向向左
			g.fill3DRect(x, y, 30, 5, false); // 绘制上边矩形
			g.fill3DRect(x + 5, y + 5, 20, 10, false); // 绘制中间矩形
			g.fill3DRect(x, y + 15, 30, 5, false);// 绘制下边矩形
			g.drawOval(x + 11, y + 8, 4, 4);// 绘制圆
			g.drawLine(x, y + 10, x + 15, y + 10);// 绘制线
			break;
		}

	}
	
}

2. tank //所有坦克的父类

import java.awt.Color;
public class tank {//我们通常会对tank类进行封装,这样就可以增加了数据访问限制,增加了程序可维护性
	private int x;
	private int y;
	private int direction;
	Color color;//为我方坦克和敌方坦克设置颜色加以区分
	private int type;//声明坦克的类型(敌我)
	private int speed;
	
	/*对象的封装性:
	private的只有对象自己才可以访问,其他任何对象不行,包括它的子类和父类。
	安全性高,其他对象只能通过它的public方法,set,get来获取或设置原对象的private属性。*/
	
	
	public  tank(int x,int y,int direction) {
		this.x=x;
		this.y=y;
		this.direction=direction;
	}
	
	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 int getDirection() {
		return direction;
	}
	public void setDirection(int direction) {
		this.direction = direction;
	}
	public Color getColor() {
		return color;
	}
	public void setColor(Color color) {
		this.color = color;
	}
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	
}

3. MyTank //我方坦克

import java.awt.Color;
import java.util.Vector;
public class MyTank extends tank{
	public MyTank(int x, int y, int direction) {
		// TODO Auto-generated constructor stub	
		super(x,y,direction);
		this.setType(1);
		this.setSpeed(2);
	}
	
}

4. DfTank //敌方坦克


public class DfTank extends tank{
	public DfTank(int x, int y, int direction) {
		super(x, y, direction);
		// TODO Auto-generated constructor stub
		this.setType(0);
		this.setSpeed(2);
	}	
}

最后效果图如下:

图形界面

Java坦克大战简易版1.0 java 编写的简易坦克大战,由键盘控制坦克移动,和子弹发射。控制坦克不能跑出游戏界面以外,以及删除飞出界面外的无效子弹。 阅读详情

相关推荐

Java游戏项目之坦克大战

视频课程讲解了一个坦克大战游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE基础知识,便可以跟随教程视频制作出属于你自己的坦克大战游戏!

平平无奇の小透明的博客 1622

坦克大战(java)

该项目主要包括以下几个类:Bomb、EnemyTank、Hero、HspTankGame06、MyPanel、Node、Recoder、Shot、 Tank。 该项目主要包括:多线程技术、面向对象编程技术、IO流技术。

qq_45014958的博客 758

坦克大战完整版(纯面向对象)

几乎写的跟真的坦克大战差不多,大家快来下载吧!物超所值啊!

java实现坦克大战

话不多说,直接上思维导图(比较粗略) 目录 ​窗口初始化 游戏父类的编写 添加坦克类 初始化子弹类 添加围墙、基地 添加游戏规则 窗口初始化 准备工作 首先创建一个TankWar项目,在scr相同路径下创建images、music文件夹,将需要使用的图片、音乐分别放在images、music中。创建一个com.tankwar(包),注意命名规范 窗口初始化 在com.tankwar中创建GamePanel类 import javax.swing.JFrame; public

小熙的博客 2万+

Java项目—坦克大战

用Java写的坦克大战,项目源码文件,喜欢的,有需要的可以下载

坦克大战(java项目)

java编写的坦克大战游戏,重温经典游戏。此项目完整的实现了坦克大战的游戏,非常适合开发者参考使用,也可以根据自己的喜好通过修改代码来实现各种关卡场景或者操作效果。

JAVA实战项目——坦克大战

敌方坦克自由移动,双方坦克均可发多发子弹,防止坦克重叠,含坦克音乐,可以记录坦克信息,击中有爆炸效果。

qq_52117201的博客 810

java小项目,坦克大战完整

NULL 博文链接:https://qq-24665727.iteye.com/blog/2261314

Java项目开发—坦克大战(附源码)

今天给小伙伴们分享一个坦克大战游戏的详细编写流程,即使你是刚入门java的新手,只要你简单掌握了该游戏所需要的javase基础知识,便可以跟随教程视频完成属于你自己的坦克大战游戏!同时还可以加深和巩固你对面向对象知识的理解。

m0_72882572的博客 3095

省三医院新门诊大楼网络安全建设项目实施方案

为了响应国家建设数字医疗,构建医联网、医共体的号召,新门诊大楼现有计算机网络,实现各门诊室、药房、医学影像科室及后勤科室的终端数据互通。在互联网出口以三层模式部署两台防火墙,作为连接公网的出口设备;出于等保合规和自身业务安全的考虑,现需要该网络上通过网络安全设备实现安全建设。公网出口防火墙,配置攻击防御策略,防御互联网上的病毒进入内网。公网出口防火墙配置攻击防御策略,防御外网对内网的入侵行为。服务器取得边界防火墙,配置攻击防御策略,入侵防御策略。公网出口防火墙配置入侵防御策略,防御外网对内网发起的D。

m0_63645854的博客 2014

OLED的字模提取(保姆级)---基于PCtoLCD2013

做为一个刚刚开始接触编程不久的白菜,这个OLED想做一个信息显示,可是商家给我的例程里就是88,816两种字体的格式,我的屏幕是0.91寸的8*16的字体显示上感觉特别丢丢儿小,我就想整个大的,哎,只怪直接学习习惯不好,总是学一半,绕了好大一圈,才搞好,想写一篇博客,时刻提醒踏实学习,第一次写博客,小白一枚,勿喷。。 OLED屏幕驱动程序功能 我们对Markdown编辑器进行了一些功能拓展与语法支...

qq_44886611的博客 7781

坦克大战--Java实现(附源码)

坦克大战之Java实现(附源码)无套路

6056

A2B音频总线在智能座舱中的应用

车载A2B链路音频是智能座舱的核心功能,涵盖车载音响、语音识别、e-Call、消噪及回声消除等应用,随着汽车智能网联化的发展,对音频的开发要求也越来越高,需要加入更先进、功能丰富的信息娱乐功能以满足消费者的用户体验。但传统的模拟并行音频信号传输方式,难以在功能增加与整车轻量化(线缆的重量及成本减少)之间取得均衡。这时候就需要A2B音频总线了。A2B音频总线用于连接车辆中的音频设备,如麦克风(MIC)、功放(AMP)、多媒体主机(Head Unit)和T-BOX等。通过一条低成本的非屏蔽双绞线UTP,进行跨距

怿星科技的博客 3935

Java学习总结之坦克大战项目(二)

V0.4:坦克类初步建好了,接下来考虑子弹,这里我曾纠结子弹到底是坦克的内部类还是兄弟类。根据面向对象的分析,子弹打出后,无论坦克是否消亡,子弹都会存在,所以子弹不是坦克的内部类,所以我们新建一个子弹类Cannonball。 在这个版本中我们只是初步构造子弹类,只编写构造方法、draw方法(绘制一颗子弹,仍然是用圆表示)和move方法(子弹的飞行)。构造方法确定子弹的初始坐标和方向,move方法

hzp的专栏 1780

qiankun(微前端) - 解决Element组件库部分样式失效,主应用和子应用分别使用element-ui和element-plus,前端微应用qiankun样式无效污染隔离子应用样式影响其他应用

乾坤qiankun,微前端,vue,qiankun主应用使用vue2+elementui子应用使用vue3+element plus样式失效,子应用样式影响其他应用样式问题,qiankun项目与子应用样式混乱问题,彻底搞定样式污染,前端微应用qiankun样式污染,组件样式部分失效怎么办,互相影响,qiankun子应用中使用element-plus样式失效问题,组件库样式污染混乱,子应用样式影响到主应用怎么办,微前端qiankun子应用样式影响其他应用样式,样式冲突,Vue+qiankun框架样式混乱问题的

✅ 精选推荐文章 8875

复旦微FMSH_Procise安装流程

双击FMSH_Procise_2021.1_full_win64_202103151947.exe 选择好安装目录后点击“Next” 一路next 点install 找技术支持代为申请 License,将电脑MAC地址发过去,将获得的 license 拷贝到 procise 安装目录“data”文件夹,即可使用 procise。点license manager和copy license 将licence,.lic文件放到这个目录 要是报下面错误要...

wangjie36的博客 1万+

Java小项目:坦克大战(二)

0.8 功能:实现坦克在8个方向的移动 步骤如下: 添加记录按键状态的布尔量 private boolean bL=false,bU=false,bR=false,bD=false; 添加代表方向的量(使用枚举) enum Direction {L,LU,U,RU,R,RD,D,LD,STOP}; 根据按键状态确定Tank的方向 public void keyPressed(

李宁的博客 453

C# WinForm上位机:从串口调试工具到智能温控系统(Modbus RTU协议实战+完整源码)

做工业上位机开发时,我们常从串口调试工具入手:验证设备通信、查看数据帧,但面对实际场景(比如温控、电机控制),单纯的“收发数据”远远不够——需要解析工业标准协议(如Modbus RTU)、实时监控关键指标、实现自动化控制逻辑,还要有稳定的UI交互和数据记录。串口调试工具能收发数据,但看不懂Modbus RTU帧(地址、功能码、寄存器、CRC校验);想控制温控设备(如加热器、风扇),但不知道如何通过Modbus写入控制指令;手动调节目标温度时,温度波动大,需要PID算法实现精准控温,但不会集成;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1304

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

控制小球移动 1.外部类 实现KeyListener监听接口 package com.test3; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing

ACMer_Shadow的博客 1万+

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4643

追忆童年故事,波波老师带你一起“玩”《坦克大战》

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33807284的博客 147

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

韩顺平--Java坦克大战

韩顺平坦克大战

闲言 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java坦克大战

通过Java程序编写实现经典游戏坦克大战的运行一、通过这次课程设计,感觉收获颇多,团队内两个人通过不断地学习查找,修改,更新,完成了最终的确定的代码。也切实感受到了自己不会的东西还有太多,思路的设计上反映出学习需要自己长期积累。由于能力有限,所以在整个课程设计的底层逻辑上对他人有所借鉴,最后才让整个程序完全运行起来。

m0_74099509的博客 1868

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

基于java swing的坦克大战游戏

一.功能描述 java坦克大战主要功能: 1. 图形用户界面; 2. 有坦克、森林、河流、墙体等元素; 3. 界面中有一个我方大本营,我方大本营被敌方攻击则输游戏; 4. 墙体分为普通墙体和金属墙体两种,普通墙体可以被子弹射穿,金属墙体不能被子弹射穿; 5. 坦克可以通过森林,不能通过河流、墙体; 6. 坦克可以发射子弹,敌我双方的坦克属性相同; 7. 敌方坦克之间不能互相攻击

江江的博客 1万+

JAVA游戏《坦克大战》(二)

JAVA游戏《坦克大战》(二) 控制坦克移动 在前面将场景创建完成后,下一步就是控制坦克的移动了,如果是仅是移动实现起来也比较简单,但是除了简单的移动还要处理好坦克到达边界的问题以及后面的多个坦克重叠的问题。 首先最重要的是进行按键的监听,在原先的类中写入按键监听 //键盘监听 private class Keynote extends KeyAdapter{ //键盘按下 @Override...

丘秋的博客 2290
上一篇: 坦克大战Java项目一
下一篇: 坦克大战Java项目三
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值