java 坦克大战 子弹击中敌方坦克 子弹消失 坦克不会消失 20C

import java.util.Vector;

public class MyTank {
int x=0;
int y=0;
int direction=0;
int sudu=2;
public MyTank(){

}
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 int getSudu() {
return sudu;
}
public void setSudu(int sudu) {
this.sudu = sudu;
}
public MyTank(int x,int y,int direction,int sudu){
this.x=x;
this.y=y;
this.direction=direction;
this.sudu=sudu;
}
public MyTank(int x,int y,int direction){
this.x=x;
this.y=y;
this.direction=direction;
}
public MyTank(int x,int y){
this.x=x;
this.y=y;
}

public void shang(){
y-=sudu;
this.setY(y);
}

public void xia(){
y+=sudu;
this.setY(y);
}
public void zuo(){
x-=sudu;
this.setX(x);
}
public void you(){
x+=sudu;
this.setX(x);
}

Zd zd=new Zd(this.getX(),this.getY(),this.direction);
Vector<Zd> zds=new Vector<Zd>();
//判断发射方向
public void fs(){
switch(this.direction){
case 0:
zd=new Zd(x+8,y-5,this.direction);
break;
case 1:
zd=new Zd(x+8,y+28,this.direction);
break;
case 2:
zd=new Zd(x-5,y+8,this.direction);
break;
case 3:
zd=new Zd(x+28,y+8,this.direction);
break;
}
t.start();
}

}
//子弹类
class Zd implements Runnable{
int x=0;
int y=0;
int direction=0;
int sudu=8;
boolean shengming=true;
public Zd(int x,int y){
this.x=x;
this.y=y;
}
public Zd(int x,int y,int direction){
this.x=x;
this.y=y;
this.direction=direction;
}
public void run(){
while(true){
try {
} catch (Exception e) {
}
switch(direction){
case 0:
y-=sudu;
break;
case 1:
y+=sudu;
break;
case 2:
x-=sudu;
break;
case 3:
x+=sudu;
break;
}
//判断子弹出界面
if(x500||y400){
this.shengming=false;
}
}

}

}

//敌方坦克类
public class EnemyTank {
int x=0;
int y=0;
int direction=0;
int sudu=5;
boolean shengming=true;

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 int getSudu() {
return sudu;
}
public void setSudu(int sudu) {
this.sudu = sudu;
}

public EnemyTank(int x,int y,int direction){
this.x=x;
this.y=y;
this.direction=direction;
}

public EnemyTank(int x,int y){
this.x=x;
this.y=y;
}

}

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Tank1 {

public static void main(String[] args) {
MianBan mb=new MianBan();
}

}
class MianBan extends JFrame{
HuaBi hb=null;
public MianBan(){
this.setSize(500,300);
this.setLocation(500, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

hb=new HuaBi();
this.setVisible(true);
}

}

class HuaBi extends JPanel implements KeyListener ,Runnable{
MyTank mt=null;
public HuaBi(){
mt=new MyTank(140,232);
}

public void paint(Graphics g){
super.paint(g);
g.fillRect(0, 0, 500, 400); //背景

//我放坦克
this.huaTank(mt.getX(), mt.getY(), g, 1, this.mt.getDirection());

//子弹
for(int i=0;i<mt.zds.size();i++){
Zd zd=mt.zds.get(i);
if(mt.zd!=null&&mt.zd.shengming==true){
g.setColor(Color.white);
g.fill3DRect(zd.x,zd.y, 3, 3, false);
}
if(zd.shengming==false){
mt.zds.remove(i);
}
}

//敌方坦克
Vector<EnemyTank> dtk=new Vector<EnemyTank>();
EnemyTank et=null;
int num=3;
for(int i=0;i<num;i++){
et=new EnemyTank((i)*226+6,10,1);
}

//绘制敌方坦克
for(int i=0;i<dtk.size();i++){
et=dtk.get(i);
if(et!=null&&et.shengming==true){
this.huaTank(et.getX(), et.getY(), g, 0, 1);
}
if(et.shengming==false){
dtk.remove(et);
}
}

//比较子弹和坦克坐标
for(int i=0;i<mt.zds.size();i++){
for(int j=0;j<dtk.size();j++){
if(mt.zds.get(i).shengming==true){
if(dtk.get(j).shengming==true){
this.jzdf(mt.zds.get(i), dtk.get(j));
}
}
}
}
this.repaint();
}

//判断子弹是否击中敌方坦克
public void jzdf(Zd zd,EnemyTank et){
if(zd.x>et.x&&zd.x<et.x+20&&zd.y>et.y&&zd.y<et.y+30){
zd.shengming=false;
et.shengming=false;
}
}

//fx为坦克方向
public void huaTank(int x,int y,Graphics g,int color,int fx){
switch(color){
case 0:
g.setColor(Color.green);
break;
case 1:
g.setColor(Color.yellow);
break;
}
//坦克方向
switch(fx){
case 0: //上
g.fill3DRect(x, y, 5, 26, false);
g.fill3DRect(x+15, y, 5, 26, false);
g.fill3DRect(x+4, y+4, 16, 20, false);
g.fillOval(x+4, y+8, 10, 10);
g.drawLine(x+9, y+15, x+9, y-4);
break;
case 1:
//下
g.fill3DRect(x, y, 5, 26, false);
g.fill3DRect(x+15, y, 5, 26, false);
g.fill3DRect(x+4, y+1, 16, 20, false);
g.fillOval(x+4, y+5, 10, 10);
g.drawLine(x+9, y+15, x+9, y+27);
break;
case 2:
//左
g.fill3DRect(x, y, 26, 5, false);
g.fill3DRect(x, y+15, 26, 5, false);
g.fill3DRect(x+4, y+4, 20, 16, false);
g.fillOval(x+10, y+5, 10, 10);
g.drawLine(x+15, y+9, x-4, y+9);
break;
case 3:
//右
g.fill3DRect(x, y, 26, 5, false);
g.fill3DRect(x, y+15, 26, 5, false);
g.fill3DRect(x+1, y+4, 20, 16, false);
g.fillOval(x+5, y+5, 10, 10);
g.drawLine(x+15, y+9, x+27, y+9);
break;
}
this.repaint();
}
public void keyTyped(KeyEvent e) {

}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_W){

// System.out.println("上");
this.mt.setDirection(0);
this.mt.shang();
}else if(e.getKeyCode()==KeyEvent.VK_A){
// System.out.println("左");
this.mt.zuo();
this.mt.setDirection(2);
}else if(e.getKeyCode()==KeyEvent.VK_D){
// System.out.println("右");
this.mt.you();
this.mt.setDirection(3);
}else if(e.getKeyCode()==KeyEvent.VK_S){
// System.out.println("下");
this.mt.setDirection(1);
this.mt.xia();
}
if(e.getKeyCode()==KeyEvent.VK_J){
if(mt.zds.size()<5){
this.mt.fs();
}
}
this.repaint();
}
public void keyReleased(KeyEvent e) {

}

@Override
public void run() {

}

}

2个回答

weixin_41731967 回复lier_liujinming: 都已经在paint里面了 一直在里面啊

lier_liujinming 他这个坦克是用Graphics画的，不是用的图片

//敌方坦克

//绘制敌方坦克

Java学习的正确打开方式

linux系列之常用运维命令整理笔录

Vue + Spring Boot 项目实战（十四）：用户认证方案与完善的访问拦截

Python十大装B语法
Python 是一种代表简单思想的语言，其语法相对简单，很容易上手。不过，如果就此小视 Python 语法的精妙和深邃，那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点，并附上详细的实例代码。如能在实战中融会贯通、灵活使用，必将使代码更为精炼、高效，同时也会极大提升代码B格，使之看上去更老练，读起来更优雅。 1. for - else 什么？不是 if 和 else 才

2019年11月中国大陆编程语言排行榜
2019年11月2日，我统计了某招聘网站，获得有效程序员招聘数据9万条。针对招聘信息，提取编程语言关键字，并统计如下： 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7

SQL-小白最佳入门sql查询一

“狗屁不通文章生成器”登顶GitHub热榜，分分钟写出万字形式主义大作

IT界知名的程序员曾说：对于那些月薪三万以下，自称IT工程师的码农们，其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居，但只是他们一厢情愿罢了。 此话一出，不知激起了多少(码农)程序员的愤怒，却又无可奈何，于是码农问程序员。 码农：你知道get和post请求到底有什么区别？ 程序员：你看这篇就知道了。 码农：你月薪三万了？ 程序员：嗯。 码农：你是怎么做到的? 程序员：
《程序人生》系列-这个程序员只用了20行代码就拿了冠军

11月8日，由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办，科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。 　　区块链技术被认为是继蒸汽机、电力、互联网之后，下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力，电力解决了人类基本的生活需求，互联网彻底改变了信息传递的方式，区块链作为构造信任的技术有重要的价值。 　　1

Android 9.0系统新特性，对刘海屏设备进行适配

【技巧总结】位运算装逼指南

8年经验面试官详解 Java 面试秘诀
作者 | 胡书敏 责编 | 刘静 出品 | CSDN（ID：CSDNnews） 本人目前在一家知名外企担任架构师，而且最近八年来，在多家外企和互联网公司担任Java技术面试官，前后累计面试了有两三百位候选人。在本文里，就将结合本人的面试经验，针对Java初学者、Java初级开发和Java开发，给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实

1.两种思维方式在求职面试中，经常会考察这种问题：北京有多少量特斯拉汽车？ 某胡同口的煎饼摊一年能卖出多少个煎饼？ 深圳有多少个产品经理？ 一辆公交车里能装下多少个乒乓球？ 一

so easy！ 10行代码写个"狗屁不通"文章生成器

MySQL数据库总结

20行Python代码爬取王者荣耀全英雄皮肤

2019年互联网寒冬，大批企业开始裁员，下图是网上流传的一张截图： 裁员不可避免，那如何才能做到不管大环境如何变化，自身不受影响呢？ 我们先来看一个有意思的故事，如果西游记取经团队需要裁员一名，会裁掉谁呢，为什么？ 西游记团队组成： 1.唐僧 作为团队teamleader，有很坚韧的品性和极高的原则性，不达目的不罢休，遇到任何问题，都没有退缩过，又很得上司支持和赏识(直接得到唐太宗的任命，既给
4G LTE/EPC 协议栈

iOS Bug 太多，苹果终于坐不住了！

（经验分享）作为一名普通本科计算机专业学生，我大学四年到底走了多少弯路

2020年大前端发展趋势

Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型？ 3、使用 Redis 有哪些好处？ 4、Redis 相比 Memcached 有哪些优势？ 5、Memcache 与 Redis 的区别都有哪些？ 6、Redis 是单进程单线程的？ 7、一个字符串类型的值能存储最大容量是多少？ 8、Redis 的持久化机制是什么？各自的优缺点？ 9、Redis 常见性...
Mybatis学习（2）史上最全的 自定义mybatis