坦克大战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

centos8 安装新版bind9源码

bind一直在更新,使用了比较多的新架构 本文记录新版本的bind怎么安装,以及其依赖库的安装 1. 在https://www.isc.org/download/ 下载最新stable版本bind,本文以bind-9.17.9.tar.xz为例。将软件传到/root目录下。 也可以到https://ftp.isc.org/isc/bind9/ 下载更多历史版本 2. 安装基本的依赖库,像gcc、amake等 3. 需要安装libuv库,但直接用yum时可能安装不全 建议使用源码安装,需要安..

linggang_123的博客 2539

AutoCAD中圆弧折线化方法与实现

在AutoCAD中,圆弧折线化是将圆弧曲线转换为由一系列线段组成的折线曲线的过程。本文将介绍如何使用LISP编写代码来实现圆弧折线化,并提供相应的源代码。上述示例代码将生成一个以坐标原点为圆心、起点为(5.0, 0.0, 0.0)、终点为(0.0, 5.0, 0.0)、半径为5.0、角度为90度的圆弧的折线表示。通过使用上述的LISP代码,你可以在AutoCAD中实现将圆弧转换为折线的功能。你可以根据需要修改代码中的参数来适应不同的圆弧转换需求。函数,并传入圆弧的起点、终点、圆心、半径和角度参数。

VcuOcaml的博客 1418

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

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

6056

深入浅出:使用Python爬取链家二手房数据

在数据驱动的时代,房地产数据作为社会经济的重要指标,一直是数据分析师、投资者和研究人员关注的焦点。链家作为国内领先的房产中介平台,其二手房数据具有较高的真实性和时效性。然而,官方API的访问限制和数据获取的门槛,让很多初学者望而却步。本文将带你从零开始,使用Python编写一个符合robots.txt规范的链家二手房爬虫,获取标题、户型、价格等信息。文章不仅会提供完整代码,还会深入讲解反爬策略、请求头伪装、数据解析、异常处理等实战技术。目录前言:为什么要写这篇博客?一、爬虫前的准备:法律与道德。

2201_76125261的博客 90

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

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

hzp的专栏 1780

Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)

by fanxiushu 2019-06-24 转载或引用请注明原始作者。 这里与远程桌面关系不是太大,但这个部分是xdisp_virt远程控制程序的实现多显示器桌面扩展的子功能,因此也归为远程桌面开发一类。 这篇文章与之前发布的...

fanxiushu的专栏 2万+

流体动力学仿真软件:Star-CCM+_(1).Star-CCM+基础及入门

Star-CCM+的用户界面(UI)分为多个部分,包括菜单栏、工具栏、工作区、视图窗口和控制台。菜单栏包含文件、编辑、视图、工具等常用菜单。例如,“File”菜单可以用于打开、保存和退出项目。工具栏提供常用的工具按钮,如新建项目、打开项目、保存项目等。也可以自定义工具栏,添加常用的功能按钮。工作区显示当前项目的结构和各个对象。可以通过拖拽方式组织和管理项目中的各个部分。视图窗口显示几何模型、网格、结果等。可以通过不同的视图模式查看和分析数据。控制台显示软件的运行日志和输出信息。

kkchenjj的博客 1202

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

大模型工作流Dify面试题及参考答案

设计一个基于 Dify 的智能摘要与重点提取 Agent,需结合Prompt 工程、模型能力配置和工作流优化,确保对长文本的高效解析和关键信息提炼。1. 明确任务需求与输入输出输入:长文本内容(如文章、报告、会议记录)或文本 URL输出摘要:简洁概括原文核心内容,控制在原文长度的 10%-20%重点列表:分点列出关键数据、结论、行动项等可选:关键词提取、情感倾向分析示例场景输入:一篇 5000 字的行业报告。

大模型大数据攻城狮的专栏 2515

【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万+

2026华为OD机试真题 9月27日 新系统 【均衡调度】

华为OD机试真题 新系统 9月27号【均衡调度】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【均衡调度】多语言题解。

qq_45776114的博客 1769

SQL基础:HQL之常用的行列转换应用总结

行列转换是数据开发者的基本技能,也是面试重点,在数据开发中处处可见,本文对常见的几种情况进行了总结,包括了多行转多列,多行转单列,多列转多行,单列转多行的几种情况,并给出了解决思路和方法,读者可根据本文给出的思路灵活应对业务中遇到的问题。

石榴姐yyds 1800

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

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

weixin_33807284的博客 147

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

韩顺平--Java坦克大战

韩顺平坦克大战

闲言 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java坦克大战

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

m0_74099509的博客 1868

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

基于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、付费专栏及课程。

余额充值