已结贴√

问题点数:40 回复次数:3

能帮我看看这个子弹的坐标哪里错了吗

我的这个坦克哪里错了啊

运行坦克可以正常移动,但是子弹的坐标老是错误,子弹也飞不出去,到底是哪里错了啊,检查很久了

package unfinished;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class TryTank

{

MyPanel my;

JFrame jf;

public static void main(String[] args)

{

TryTank tr = new TryTank();

}

public TryTank()

{

jf = new JFrame("我的坦克大战");

my = new MyPanel();

jf.addKeyListener(my);

Thread t2 = new Thread(my);

t2.start();

my.setBackground(Color.black);

jf.add(my);

jf.setVisible(true);

jf.setSize(400,300);

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

class MyPanel extends JPanel implements KeyListener,Runnable

{

Mine t;

public MyPanel()

{

t = new Mine(10,10);

}

public void paint(Graphics g)

{

super.paint(g);

t.setType(2);

t.setSpeed(4);

this.paintTank(t.getX(), t.getY(), g, t.getDirect(), t.getType());

if(t.b != null&&t.b.isAlive == true)

{

t.b.setSpeed(2);

g.fillOval(t.b.getX(), t.b.getY(), 2, 2);

}

}

//画坦克

public void paintTank(int x, int y, Graphics g, int direct, int type)

{

//判断颜色,1是敌人,黄色。2是自己,红色

if(type == 1)

{

g.setColor(Color.YELLOW);

switch(direct)

{

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.fillOval(x+4,y+10,10,10);

g.drawLine(x+9,y+15,x+9,y-4);

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.fillOval(x+10,y+5,10,10);

g.drawLine(x+15,y+10,x+34,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.fillOval(x+4,y+10,10,10);

g.drawLine(x+9,y+15,x+9,y+34);

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.fillOval(x+10,y+5,10,10);

g.drawLine(x+15,y+10,x-4,y+10);

}

}

else if(type == 2)

{

g.setColor(Color.RED);

switch(direct)

{

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.fillOval(x+4,y+10,10,10);

g.drawLine(x+9,y+15,x+9,y-4);

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.fillOval(x+10,y+5,10,10);

g.drawLine(x+15,y+10,x+34,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.fillOval(x+4,y+10,10,10);

g.drawLine(x+9,y+15,x+9,y+34);

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.fillOval(x+10,y+5,10,10);

g.drawLine(x+15,y+10,x-4,y+10);

}

}

}

@Override

public void keyTyped(KeyEvent e)

{

}

@Override

public void keyPressed(KeyEvent e)

{

//设置WASD为移动

if(e.getKeyCode() == KeyEvent.VK_W)

{

t.setDirect(1);

t.moveUp();

}

else if(e.getKeyCode() == KeyEvent.VK_D)

{

t.setDirect(2);

t.moveRight();

}

else if(e.getKeyCode() == KeyEvent.VK_S)

{

t.setDirect(3);

t.moveDown();

}

else if(e.getKeyCode() == KeyEvent.VK_A)

{

t.setDirect(4);

t.moveLeft();

}

if(e.getKeyCode() == KeyEvent.VK_J)

{

t.fired();

}

this.repaint();

}

@Override

public void keyReleased(KeyEvent e)

{

}

@Override

public void run()

{

try

{

Thread.sleep(100);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

this.repaint();

}

class Tank

{

int x = 10, y = 10;

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;

}

}

class Mine extends Tank

{

int type = 0,direct = 1,speed =1;

Bullet b;

public Mine(int x, int y)

{

super(x,y);

}

public int getType()

{

return type;

}

public void setType(int type)

{

this.type = type;

}

public int getDirect()

{

return direct;

}

public void setDirect(int direct)

{

this.direct = direct;

}

public int getSpeed()

{

return speed;

}

public void setSpeed(int speed)

{

this.speed = speed;

}

//坦克移动

public void moveUp()

{

y-=this.getSpeed();

}

public void moveRight()

{

x+=this.getSpeed();

}

public void moveDown()

{

y+=this.getSpeed();

}

public void moveLeft()

{

x-=this.getSpeed();

}

//开火

public void fired()

{

switch(this.direct)

{

case 1:

b = new Bullet(x+10,y,1);

case 2:

b = new Bullet(x+30,y+10,2);

case 3:

b = new Bullet(x+10,y+30,3);

case 4:

b = new Bullet(x,y+10,4);

}

Thread t1 = new Thread(b);

t1.start();

}

}

class Bullet implements Runnable

{

int x = 10, y = 10,speed = 1,direct = 1;

boolean isAlive = true;

public Bullet(int x, int y,int direct)

{

this.x = x;

this.y = y;

this.direct = direct;

}

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 getSpeed()

{

return speed;

}

public void setSpeed(int speed)

{

this.speed = speed;

}

public int getDirect()

{

return direct;

}

public void setDirect(int direct)

{

this.direct = direct;

}

public void run()

{

while(true)

{

try

{

Thread.sleep(50);

} catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

switch(this.direct)

{

case 1:

y-=this.getSpeed();

break;

case 2:

x+=this.getSpeed();

break;

case 3:

y+=this.getSpeed();

break;

case 4:

x-=this.getSpeed();

break;

}

System.out.println("["+x+","+y+"]");

//            if(x<0||x>400||y<0||y>300);

//            {

//                isAlive = false;

//                break;

//            }

}

}

}

}

Java发射子弹出错_能帮我看看这个子弹的坐标哪里错了吗相关推荐

  1. 自学java编译老是出错_编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思...

    编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思 这个能出错的地方就难说了,能给出代码或者错误提示吗 为什么javac编译后说写入错误呢HelloWorld.java : ...

  2. java打开文件出错_打开文件错误太多,java.io.FileNotFoundException

    在我的程序中,我有循环扫描一堆文件并读取其内容.问题发生在大约1500个文件的迭代中,似乎无法再现(或理解(由我)) 问题: java.io.FileNotFoundException: /path/ ...

  3. 自学java编译老是出错_为什么按照书上的代码,编译老是出错?

    老是又小伙伴在群里说我的代码是按照书上的代码敲的,就是编译不过?想不通呀!目前市面上的一些书都是十来年以前编写的了,你不幸看的还是这些书,错误原因就在这里. 比如谭浩强的C语言程序设计这个本书都出了N ...

  4. java服务器内部出错_服务器遇到内部错误,导致无法完成此请求

    在上个月我完成了一个项目,它运行正常的一切.但今天我试图运行该项目,但我无法看到项目的输出. 我收到以下错误. 输入例外报告 说明服务器遇到内部错误,导致无法完成此请求. 例外 java.io.Fil ...

  5. java jdk 未知错误_解决JAVA JDK安装出错的最常见问题,帮你排除困扰

    一般来说,安装JAVA JDK的整个流程是很简单的,只要按照提示进行操作即可,就不会出现问题.但是呢,有小伙伴反映说,之前安装了JAVA JDK,进行卸载重装的时候出现错误提示,"正在进行另 ...

  6. 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...

    随着电脑的使用率越来越高,我们有时候可能会遇到win7系统Java活动脚本出错导致电脑死机问题,如果我们遇到了win7系统Java活动脚本出错导致电脑死机的问题,要怎么处理win7系统Java活动脚本 ...

  7. java让电脑死机怎么办,主编帮你win10系统Java活动脚本出错导致电脑死机的方法...

    今天和大家分享一下win10系统Java活动脚本出错导致电脑死机问题的解决方法,在使用win10系统的过程中经常不知道如何去解决win10系统Java活动脚本出错导致电脑死机的问题,有什么好的办法去解 ...

  8. Java web小项目_个人主页(2)—— 边缘加速原理与实现

    摘自:Java web小项目_个人主页(2)-- 边缘加速原理与实现 作者:丶PURSUING 发布时间: 2021-03-27 14:44:40 网址:https://blog.csdn.net/w ...

  9. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

最新文章

  1. 银行不能成为外国资本的“***”
  2. centos设置ip
  3. paddlepaddle测试安装_百度paddlepaddle深度学习7日入门-CV疫情特辑心得
  4. Duplicated Numbers (10分)
  5. php放量文档,成交量放量过顶买入法(图解)
  6. 重磅!Facebook 更新 PyTorch 1.1,打算跨 GPU 分割神经网络 | 技术头条
  7. 打印十字图-蓝桥杯历届试题
  8. linux中ldd命令查看二进制文件(程序或库)所依赖的其他库(LIBTIFF_4.0未定义的引用问题)
  9. 晶振匹配电容如何计算?--转载
  10. 怎么查看电脑连接的wifi密码?2种方法分享给大家!
  11. 视频贴片广告有哪些形式,视频贴片广告展示形式如何?
  12. 弗兰克赫兹实验计算机仿真实验报告,大学物理实验
  13. 扇贝单词与百词斩的竞品分析
  14. play Framework 配置
  15. 2023全网首发抖音标签检测程序源码+花800买的/最新版本
  16. BD15AAANB10派克伺服阀
  17. 计算机视觉基础-图像色彩空间转换
  18. frequentism-and-bayesianism-chs-ii
  19. 马克扎克伯格节俭_马克·扎克伯格的垃圾实在很难抢
  20. excel工作簿打开密码破解

热门文章

  1. C#中Windows Media Player控件使用实例|方法
  2. Tinker 热修复框架模拟使用
  3. java获取tomcat路径
  4. pl/sql developer 设置oracle的date类型默认显示样式
  5. 深入理解php 匿名函数和 Closure
  6. Javascript document对象常用的方法和属性
  7. context.Request.Files超过了最大请求长度
  8. [Node.js] nodejs 连接 mysql数据库
  9. Snabbdom(虚拟dom-4-init函数)
  10. php迭代器实例,PHP迭代器和生成器用法实例分析