求助,新手写坦克大战遇到问题解决问题

C#编坦克大战写IsOver类时出现问题,具体如下_百度知道
C#编坦克大战写IsOver类时出现问题,具体如下
public override void IsOver()
SingleObject.Getsingle().AddGameObject(new Boom(this.X - 25, this.Y - 25));
SingleObject.Getsingle().RemoveGameObject(this);
SoundPlayer sp = new SoundPlaye...
我有更好的答案
不就是多了个if语句么。选中Life-右键-查找所有引用,看在哪里被赋值过。
我看了但感觉还是没解决问题,我是跟着视频做的,我看了好几遍,就是不知道哪错了
在if那句加断点,运行看到底是几。
采纳率:69%
来自团队:
为您推荐:
其他类似问题
坦克大战的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【图片】求助,小弟新手,写个坦克大战,求助高手这种现象是怎么回事【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:687,965贴子:
求助,小弟新手,写个坦克大战,求助高手这种现象是怎么回事收藏
在地方坦克不能动之前一切良好,可是让它们动了以后,只有我方坦克一按射击键j,敌方三辆坦克立即同时消失,望高手指正。
下面是我写的代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class MyTankGame6 extends JFrame{
MyPanel mp=
public static void main(String[] args) {
MyTankGame6 mytankgame6=new MyTankGame6(); }
public MyTankGame6()
mp=new MyPanel();
//启动mp线程
Thread t=new Thread(mp);
t.start();
this.add(mp);
this.addKeyListener(mp);
this.setTitle("坦克大战");
this.setSize(400,350);
this.setLocation(500,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}}class MyPanel extends JPanel implements KeyListener,Runnable{
//初始化我的坦克
Hero hero=
//敌人的坦克
Vector&Enemy& vcs=new Vector&Enemy&();
Vector&Bomb& bombs=new Vector&Bomb&();
int ensize=3;
//定义图片
Image image1=
Image image2= Image image3=
//构造函数
public MyPanel() {
hero=new Hero(200,250);
//初始化敌人坦克
for(int i=0;i&i++)
//定义一个敌人的坦克
Enemy enemy=new Enemy((i+1)*50,0);
//坦克颜色
enemy.setColor(1);
//坦克方向
enemy.setDirect(2);
//启动敌人坦克
Thread t=new Thread(enemy);
t.start();
vcs.add(enemy);
//初始化图片
image1=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/爆炸1.jpg"));
image2=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/爆炸2.jpg"));
image3=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/爆炸3.jpg")); } public void paint(Graphics g) {
super.paint(g);
//填充面板颜色
g.fillRect(0,0,400,350);
//画出自己的坦克
this.drawTank(hero.getX(),hero.getY(),g,hero.getDirect(),0);
//从ss中取出每颗子弹并画出
for(int i=0;i&hero.ss.size();i++)
Shot myShot=hero.ss.get(i);
//画出一颗子弹
if(myShot!=null&&myShot.isLive==true)
g.draw3DRect(myShot.x,myShot.y,1,1,false);
if(myShot.isLive==false)
//把子弹在ss中删除
hero.ss.remove(myShot);
//画出炸弹
for(int i=0;i&bombs.size();i++)
//取出炸弹
Bomb b=bombs.get(i);
if(b.life&6)
g.drawImage(image3, b.x,b.y,30,30,this);
else if(b.life&3)
g.drawImage(image2, b.x,b.y,30,30,this);
g.drawImage(image1, b.x,b.y,30,30,this);
//让b的生命值减小
b.lifeDown();
//如果炸弹生命值为0,则删掉
if(b.life==0)
bombs.remove(b);
//画出敌人的坦克
for(int i=0;i&vcs.size();i++)
Enemy enemy=vcs.get(i);
if(enemy.isLive)
this.drawTank(enemy.getX(),enemy.getY(),g,enemy.getDirect(),1); }} }
//写出一个函数判断子弹是否击中敌人坦克
public void hitTank(Shot s,Enemy enemy) {
//判断该坦克的方向
switch(enemy.direct) {
//如果敌人坦克此时的方向是向上或者向下
if(s.x&enemy.x&&s.x&(enemy.x+20)&&s.y&enemy.y&&s.y&(enemy.y+30))
{ //击中,子弹和敌人坦克死亡
enemy.isLive=
//创建一颗炸弹,放入**
Bomb b=new Bomb(enemy.x,enemy.y);
bombs.add(b);
if(s.x&enemy.x&&s.x&(enemy.x+30)&&s.y&enemy.y&&s.y&(enemy.y+20));
enemy.isLive=
//创建一颗炸弹,放入**
Bomb b=new Bomb(enemy.x,enemy.y);
bombs.add(b);
//画出坦克的函数
public void drawTank(int x,int y,Graphics g,int direct,int type)
//判断是什么类型的坦克
switch(type)
g.setColor(Color.green);
g.setColor(Color.blue);
//判断方向
switch(direct)
//画出我的坦克
//1、左面的矩形
g.fill3DRect(x,y,5,30,false);
//2、右面矩形
g.fill3DRect(x+15,y,5,30,false);
//3、中间矩形
g.fill3DRect(x+5,y+5,10,20,false);
//4、中间圆形
g.fillOval(x+5,y+10,10,10);
g.drawLine(x+9,y+15,x+9,y);
//1、上面的矩形
g.fill3DRect(x,y,30,5,false);
//2、下面矩形
g.fill3DRect(x,y+15,30,5,false);
//3、中间矩形
g.fill3DRect(x+5,y+5,20,10,false);
//4、中间圆形
g.fillOval(x+10,y+5,10,10);
g.drawLine(x+15,y+9,x+30,y+9);
//1、左面的矩形
g.fill3DRect(x,y,5,30,false);
//2、右面矩形
g.fill3DRect(x+15,y,5,30,false);
//3、中间矩形
g.fill3DRect(x+5,y+5,10,20,false);
//4、中间圆形
g.fillOval(x+5,y+10,10,10);
g.drawLine(x+9,y+15,x+9,y+30);
//1、上面的矩形
g.fill3DRect(x,y,30,5,false);
//2、下面矩形
g.fill3DRect(x,y+15,30,5,false);
//3、中间矩形
g.fill3DRect(x+5,y+5,20,10,false);
//4、中间圆形
g.fillOval(x+10,y+5,10,10);
g.drawLine(x+15,y+9,x,y+9);
public void keyPressed(KeyEvent arg0) {
if(arg0.getKeyCode()==KeyEvent.VK_W)
//设置我的坦克的方向
this.hero.setDirect(0);
this.hero.moveUp();
else if(arg0.getKeyCode()==KeyEvent.VK_A) {
this.hero.setDirect(3);
this.hero.moveLeft(); }
else if(arg0.getKeyCode()==KeyEvent.VK_S)
this.hero.setDirect(2);
this.hero.moveDown();
else if(arg0.getKeyCode()==KeyEvent.VK_D)
this.hero.setDirect(1);
this.hero.moveRight(); }
//判断玩家是否按下J键
if(arg0.getKeyCode()==KeyEvent.VK_J)
if(this.hero.ss.size()&5)
this.hero.shotEnemy();
this.repaint();
public void keyReleased(KeyEvent arg0){
public void keyTyped(KeyEvent arg0) {
public void run()
while(true)
Thread.sleep(100);
catch (Exception e) {
e.printStackTrace();
//判断是否击中
for(int i=0;i&hero.ss.size();i++)
//取出子弹
Shot myShot=hero.ss.get(i);
//判断子弹是否有效
if(myShot.isLive)
//取出每个坦克与子弹匹配
for(int j=0;j&vcs.size();j++)
//取出坦克
Enemy enemy=vcs.get(j);
if(enemy.isLive)
this.hitTank(myShot, enemy);
this.repaint();
好长……看看
代码不全啊……
//炸弹类class Bomb{
//炸弹坐标
//炸弹的生命
int life=9;
boolean isLive=
public Bomb(int x,int y) {
this.y=y; }
public void lifeDown() {
if(life&0)
this.isLive=
} }}//子弹类class Shot implements Runnable{
int speed=3;
//是否还活着
boolean isLive=
public Shot(int x,int y,int direct) {
this.direct= }
public void run()
while(true)
Thread.sleep(50);
catch (Exception e) {
switch(direct)
if(x&0||x&400||y&0||y&300)
this.isLive=
//坦克类class Tank{
//是否还活着
boolean isLive=
//坦克的横坐标
//坦克纵坐标
//坦克方向
//0 表示向上
1 表示向右
2 表示向下
3 表示向左
int direct=0;
public int getColor() {
public void setColor(int color) {
this.color = }
//定义速度
int speed=2;
public int getSpeed() {
public void setSpeed(int speed) {
this.speed = }
public int getDirect() {
public void setDirect(int direct) {
this.direct = }
public int getX() {
public void setX(int x) {
this.x = }
public int getY() {
public void setY(int y) {
this.y = }
public Tank(int x,int y) {
this.y=y; }}
大家都喜欢坦克大战,这代码读完需要勇气。。。建议在life--和this.isLive=false之类的地方打断点调试
太长了呀,你看看子弹击中的判断对不对
登录百度帐号推荐应用网页游戏一周开服表
游戏名称游戏类型开服时间游戏官网服务器名运营平台
双线1005服
坦克大战常见问题
时间: 16:17 来源:52pk整理  编辑:云端
Q1:游戏中各种坦克如何获得?
A:游戏中的坦克可以通过每日签到奖励、任务奖励、奖章兑换的额外赠送及商城购买等多种渠道获得。
Q2:为什么不能使用技能炮弹?
A:坦克只有在装备主动技能卡之后才能发射技能炮弹。大家可以通过每日签到奖励、任务奖励、奖章兑换的额外赠送及商城购买技能卡,在【技能卡】栏为坦克装备技能卡后就可以使用技能炮弹了,主动技能卡按键对于键盘上的&1、2、3、4&。
Q3:战场中怎么和其他战友交流?
A:在战场中可以点击回车弹出聊天框,输入聊天信息后再点击回车发送,也可以按下数字键&5、6、7、8、9、0&进行快速发言。
Q4:怎样才能参加奖章兑换?
A:奖章分为英勇奖章、皇家奖章、荣耀奖章和节日奖章四种。大家需要拥有奖章才能参与兑换,一次兑换会消耗一个奖章。大家可以通过以下途径获得奖章:1、通过每日签到、战役掉落、战役结算奖励和翻起结算卡牌获得英勇奖章和皇家奖章;2、通过完成特殊兑换任务来获得皇家奖章;3、通过完成每日训练任务来获得英勇奖章;4、通过累计兑换奖励获得皇家奖章或荣耀奖章;5、通过功勋值排行奖励获得荣耀奖章。
Q5:怎样才能提高自己的军衔?
A:军衔的提高需要荣誉达到一定的数值,荣誉值可以通过参加比赛获得,比赛排名越靠前获得的荣誉值越多。
Q6:为什么不能报名参加比赛模式?
A:比赛场开放是根据赛场安排在固定时间段进行的。比赛开始前5分钟 VIP玩家开始报名,2分钟后普通玩家开始报名,报名时间持续3分钟,比赛开始前20秒停止报名。系统公告会提示比赛场相关信息,准备比赛的玩家需要注意公告提示按时报名参赛。
Q7:为什么不能参加闯关战役和挑战战役?
A:每天参加闯关战役和挑战战役有一定的次数限制,普通玩家一天可以参加2次闯关战役和2次挑战战役,VIP玩家一天可以参加3次闯关战役和3次挑战战役。如果当天的次数已经用完,大家可以通过购买闯关战役或挑战战役的场次来进行闯关或挑战。注意:通过购买增加的场次仅限当日有效。
Q8:个人天赋中的各项属性分别有什么作用?
A:精准:影响坦克的攻击力和暴击几率。
意识:影响坦克的攻击力、能量值、能量回复速度。
知识:影响坦克的防御力、生命值、能量值。
操控:影响坦克的暴击几率、能量回复速度、防御力。
Q9:怎样进行道具的买卖?
A:坦克大战交易所的&寄售&功能可以进行道具的购买和交易。在寄售交易平台可以将大家想要交易的东西上架,等待其他玩家的购买(目前可以进行寄售的道具包括:技能卡、材料、部件以及任务物品);也可以通过寄售交易平台来购买需要的道具;还可以通过商城来购买需要的道具。
Q10:Ⅱ代和Ⅲ代的坦克如何获得?
A:Ⅱ代和Ⅲ代的坦克需要坦克强化等级和人物等级都达到一定要求后,通过坦克换代功能进行换代。Ⅰ代换Ⅱ代需要人物等级达到20级且坦克强化至+5以上;Ⅱ代换Ⅲ代需要人物等级达到30级且坦克强化至+5以上。
关注 52PK游戏网 微信公众号第一时间获取最火游戏激活码 最有趣游戏资讯
坦克大战3D游戏攻略
最新页游发号
Copyright © PK.COM 版权所有 52PK游戏网}

我要回帖

更多关于 遇到问题解决问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信