坦克案例的原材料类

/**

原材料类

*/

package Tank;

import java.io.*;
import java.util.Vector;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

/**
 * 坦克类
 */
class Tank{
    boolean shengming=true;
    int x=0,y=0;
    int sudu=5;
    int fangxiang=0;
    int color;
    public int getColor() {
        return color;
    }

public void setColor(int color) {
        this.color = color;
    }

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 Tank(int x,int y) {
        this.x=x;
        this.y=y;
    }
    public int getSudu() {
        return sudu;
    }
    public void setSudu(int sudu) {
        this.sudu = sudu;
    }
    public int getFangxiang() {
        return fangxiang;
    }
    public void setFangxiang(int fangxiang) {
        this.fangxiang = fangxiang;
    }
}
/**
 * 敌人的坦克
*/
class DiTank extends Tank implements Runnable{
    int sudu=2;
    int time=0;
    Zidan zd=null;
    Vector<DiTank> dtk=new Vector<DiTank>();
    Vector<Zidan> dzd=new Vector<Zidan>();
    public DiTank(int x, int y) {
        super(x, y);
    }
    // ----把敌方的三个坦克的向量传过来,用来判断相撞的  将Tank1的MyPanel类的坦克集合传递过来的
    public void dtkxl(Vector<DiTank> dxl)
    {
        this.dtk=dxl;
    }
    //判断敌方坦克碰撞的方法
    public boolean huxiangpengzhuang()
    {
        boolean b=false;
        switch(this.fangxiang)
        {
        case 0:
            
            for(int i=0;i<dtk.size();i++)
            {
                DiTank dt=dtk.get(i);
                
                if(dt!=this)
                {
                    if(dt.fangxiang==0||dt.fangxiang==2)
                    {
  
                     if(this.x>=dt.x && this.x<=dt.x+20
&& this.y>=dt.y && this.y<=dt.y+30)
                        {
                            return true;
                        }
  
                     if(this.x+20>=dt.x &&
this.x+20<=dt.x+20 && this.y>=dt.y &&
this.y<=dt.y+30)
                        {
                            return true;
                        }
                    }
                    if(dt.fangxiang==3||dt.fangxiang==1)
                    {
  
                     if(this.x>=dt.x && this.x<=dt.x+30
&& this.y>=dt.y && this.y<=dt.y+20)
                        {
                            return true;
                        }
  
                     if(this.x+20>=dt.x &&
this.x+20<=dt.x+30 && this.y>=dt.y &&
this.y<=dt.y+20)
                        {
                            return true;
                        }
                    }
                }
            }
            break;
        case 1:
            for(int i=0;i<dtk.size();i++)
            {
                DiTank dt=dtk.get(i);
                if(dt!=this)
                {
                    if(dt.fangxiang==0||dt.fangxiang==2)
                    {
                        if(this.x>=dt.x&&this.x<=dt.x+20&&this.y>=dt.y&&this.y<=dt.y+30)
                        {
                            return true;
                        }
                        //下一点
  
                   
 if(this.x>=dt.x&&this.x<=dt.x+20&&this.y+20>=dt.y&&this.y+20<=dt.y+30)
                        {
                            return true;
                        }
                    }
                    if(dt.fangxiang==3||dt.fangxiang==1)
                    {
                        if(this.x>=dt.x&&this.x<=dt.x+30&&this.y>=dt.y&&this.y<=dt.y+20)
                        {
                            return true;
                        }
  
                   
 if(this.x>=dt.x&&this.x<=dt.x+30&&this.y+20>=dt.y&&this.y+20<=dt.y+20)
                        {
                            return true;
                        }
                    }
                }
            }
            
            
            break;
        case 2:
            for(int i=0;i<dtk.size();i++)
            {
                DiTank dt=dtk.get(i);
                if(dt!=this)
                {
                    if(dt.fangxiang==0||dt.fangxiang==2)
                    {
  
                   
 if(this.x>=dt.x&&this.x<=dt.x+20&&this.y+30>=dt.y&&this.y+30<=dt.y+30)
                        {
                            return true;
                        }
  
                   
 if(this.x+20>=dt.x&&this.x+20<=dt.x+20&&this.y+30>=dt.y&&this.y+30<=dt.y+30)
                        {
                            return true;
                        }
                    }
                    if(dt.fangxiang==3||dt.fangxiang==1)
                    {
  
                   
 if(this.x>=dt.x&&this.x<=dt.x+30&&this.y+30>=dt.y&&this.y+30<=dt.y+20)
                        {
                            return true;
                        }
                        
  
                   
 if(this.x+20>=dt.x&&this.x+20<=dt.x+30&&this.y+30>=dt.y&&this.y+30<=dt.y+20)
                        {
                            return true;
                        }
                    }
                }
            }
            break;
        case 3:
            for(int i=0;i<dtk.size();i++)
            {
                DiTank dt=dtk.get(i);
                if(dt!=this)
                {
                    if(dt.fangxiang==0||dt.fangxiang==2)
                    {
  
                     if(this.x+30>=dt.x &&
this.x+30<=dt.x+20 && this.y>=dt.y &&
this.y<=dt.y+30)
                        {
                            return true;
                        }                        
  
                     if(this.x+30>=dt.x &&
this.x+30<=dt.x+20 && this.y+20>=dt.y &&
this.y+20<=dt.y+30)
                        {
                            return true;
                        }
                    }
                    if(dt.fangxiang==3||dt.fangxiang==1)
                    {
  
                     if(this.x+30>=dt.x &&
this.x+30<=dt.x+30 && this.y>=dt.y &&
this.y<=dt.y+20)
                        {
                            return true;
                        }
  
                     if(this.x+30>=dt.x &&
this.x+30<=dt.x+30 && this.y+20>=dt.y &&
this.y+20<=dt.y+20)
                        {
                            return true;
                        }
                    }
                }
            }            
            break;
        }        
        return b;//编译器不知道for循环里的return 是否会执行,所以必须加
    }
    @Override
    public void run() {
        while(true) {
            
            switch(this.fangxiang) {
            case 0:
                for(int i=0;i<30;i++) {
                    if(y>0 && !huxiangpengzhuang()) {
                        y-=sudu;
                    }
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {e.printStackTrace();}
                }            
                break;
            case 1:
                for(int i=0;i<30;i++) {
                    if(x>0 && !huxiangpengzhuang()) {
                        x-=sudu;
                    }                
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {e.printStackTrace();}
                }                    
                break;
            case 2:
                for(int i=0;i<30;i++) {
                    if(y<240 && !huxiangpengzhuang()) {y+=sudu;}                
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {e.printStackTrace();}
                }                        
                break;
            case 3:
                for(int i=0;i<30;i++) {
                    if(x<350 && !huxiangpengzhuang()) {x+=sudu;}                    
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {e.printStackTrace();}
                }            
                break;
            }
            this.fangxiang=(int) (Math.random()*4);    
            if(this.shengming==false) {
                break;
            }
            this.time++;
            if(time%2==0) {//时间为偶数时发射
                if(this.shengming) {//敌人坦克有生命
                    if(dzd.size()<5) {
                        
                        switch(this.fangxiang) {
                        case 0:
                            zd=new Zidan(x+10,y,0);
                            //每发射一次添加一颗
                            dzd.add(zd);
                            break;        
                        case 1:
                            zd=new Zidan(x,y+10,1);
                            dzd.add(zd);
                            break;
                        case 2:
                            zd=new Zidan(x+10,y+30,2);
                            dzd.add(zd);
                            break;
                        case 3:
                            zd=new Zidan(x+30,y+10,3);
                            dzd.add(zd);
                            break;
                    }
                    Thread t5=new Thread(zd);
                    t5.start();
                    }
                }    
            }
        }
    }
}                
/**
 * 我的坦克类 在这里启动子弹的线程类
 *子弹是跟随坦克走的
 */
class MyTank extends Tank{
    
    Vector<Zidan> aa =new Vector<Zidan>();
     Zidan zd=null;        
    //子弹跟随坦克对象,子弹是线程类
    public void fszd() {
        switch(this.fangxiang) {
        case 0:
            zd=new Zidan(x+10,y,0);
            //每发射一次添加一颗
            aa.add(zd);
            break;        
        case 1:
            zd=new Zidan(x,y+10,1);
            aa.add(zd);
            break;
        case 2:
            zd=new Zidan(x+10,y+30,2);
            aa.add(zd);
            break;
        case 3:
            zd=new Zidan(x+30,y+10,3);
            aa.add(zd);
            break;
        }
        Thread t=new Thread(zd);
        t.start();
    }
    
    
    public MyTank(int x, int y) {
        super(x, y);
    }    
    public void xiangshang() {
        if(y>0) {y-=sudu;}
        //y-=sudu;
    }
    public void xiangzuo() {
        if(x>0) {x-=sudu;}
        //x-=sudu;
    }
    public void xiangxia() {
        if(y<230) {y+=sudu;}
        y+=sudu;    
    }
    public void xiangyou() {
        if(x<350) {x+=sudu;}
        //x+=sudu;        
    }    
}

//子弹类
class Zidan implements Runnable{
    int x,y;
    int fangxiang;
    int sudu=5;
    boolean shengming=true;
    public Zidan(int x,int y,int fangxiang) {
        this.x=x;
        this.y=y;
        this.fangxiang=fangxiang;
    }
    @Override
    public void run() {
        while(true) {
            try {
                Thread.sleep(50);//线程的死循环例都有个睡眠
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            switch(fangxiang) {
            case 0://上
                y-=sudu;
                break;
            case 1:
                x-=sudu;
                break;
            case 2:
                y+=sudu;
                break;
            case 3://右
                x+=sudu;
                break;
            }//使子弹在画布里跑
            if(x<0||y<0||x>400||y>300) {
                this.shengming=false;
            }
        }
        
    }
    
}
//爆炸类
class Baozha{
    int x,y;
    int shengcunqi=10;
    boolean shengming=true;
    public Baozha(int x,int y) {
        this.x=x;
        this.y=y;
    }
    public void suqsd() {
        if(shengcunqi>0) {
            shengcunqi--;
        }else {
            this.shengming=false;
        }
    }
}
class Jilu{
    private static int dtsl=10;
    private static int mtsl=2;
    private static int sdtj=0;
    private static FileWriter fw=null;
    private static BufferedWriter bw=null;
    private  static FileReader fr=null;
    private static  BufferedReader br=null;
    private static Vector<DiTank> dtk=new Vector<DiTank>();
    static Vector<Weizhi> wzjh=new Vector<Weizhi>();
    public Vector<DiTank> getDtk() {
        return dtk;
    }
    public void setDtk(Vector<DiTank> dtk) {
        this.dtk = dtk;
    }
    
    public static int getDtsl() {//多线程做成静态的 为了安全
        return dtsl;
    }
    public static void setDtsl(int dtsl) {
        Jilu.dtsl = dtsl;
    }
    public static int getSdtj() {
        return sdtj;
    }
    public static void setSdtj(int sdtj) {
        Jilu.sdtj = sdtj;
    }
    public static int getMtsl() {
        return mtsl;
    }
    public static void setMtsl(int mtsl) {
        Jilu.mtsl = mtsl;
    }
    public static void dtjs() {
        dtsl--;
    }
    
    public static void mtjs() {
        mtsl--;
    }
    //新建杀敌数量方法
    public static void sdsl() {
        sdtj++;
    }
    public static void bcjl() {//保存杀敌统计到硬盘
        try {
            fw=new FileWriter("f:/TKDZ/cpj1.txt");
            bw=new BufferedWriter(fw);
            bw.write(sdtj+"\r\n");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //fw.flush();bw.flush();
                bw.close();
                fw.close();
                
            } catch (IOException e) {}            
            
            }
        }
    //从硬盘读取记录
    public static void dqjl() {
        try {
            fr=new FileReader("f:/TKDZ/cpj1.txt");
            br=new BufferedReader(fr);
            String str=br.readLine();
            sdtj=Integer.parseInt(str);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                br.close();fr.close();    
            } catch (IOException e) {}            }
    
        }
    //点击存盘退出方法
    public void cunpan() {
        try {
            fw=new FileWriter("f:/TKDZ/cpj1.txt");
            bw=new BufferedWriter(fw);
            bw.write(sdtj+"\r\n");
            for(int i=0;i<dtk.size();i++) {
                DiTank dt=dtk.get(i);
                if(dt.shengming) {
                    String zb=dt.x+" "+dt.y+" "+dt.fangxiang+"";
                    bw.write(zb+"\r\n");
                }
                        
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //fw.flush();bw.flush();
                bw.close();
                fw.close();
                
            } catch (IOException e) {}            
            
            }
    }    
//读盘方法
    public static Vector<Weizhi> dupan(){
        try {
            fr=new FileReader("f:/TKDZ/cpj1.txt");
            br=new BufferedReader(fr);
            String s="";
            s=br.readLine();
            sdtj=Integer.parseInt(s);
            while((s=br.readLine())!=null)
            {
                String[] sz=s.split(" ");
                Weizhi wz=new Weizhi(Integer.parseInt(sz[0]),Integer.parseInt(sz[1]),Integer.parseInt(sz[2]));
                wzjh.add(wz);//将多辆坦克的位置加到集合中
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //fw.flush();bw.flush();
                br.close();
                fr.close();
                
            } catch (IOException e) {}            
            
            }
        return wzjh;
    }
}
class Weizhi{
    int x,y,fangxiang;
    public Weizhi(int x,int y,int fangxiang) {
        this.x=x;
        this.y=y;
        this.fangxiang=fangxiang;
    }
    
}
//音频类
class Shengyin extends Thread{
    private String wjm;
    public Shengyin(String ypwj)
    {
         wjm=ypwj;
    }

public void run() {

File wjl = new File(wjm);

AudioInputStream ypsrl = null;
        try {
            ypsrl = AudioSystem.getAudioInputStream(wjl);
        } catch (Exception e){}

AudioFormat format = ypsrl.getFormat();
        SourceDataLine aqsj = null;
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

try {
            aqsj = (SourceDataLine) AudioSystem.getLine(info);
            aqsj.open(format);
        } catch (Exception e){}        
        aqsj.start();
        
        int zjtj = 0;
        byte[] hczj = new byte[1024];
        try {
            while (zjtj  != -1) {
                zjtj = ypsrl.read(hczj, 0, hczj.length);
                if (zjtj  >= 0)
                    aqsj.write(hczj, 0, zjtj );
            }
        } catch (Exception e){}
        finally {
            aqsj.drain();//将残留部分处理干净
            aqsj.close();
        }
    }    
}

时间: 2024-10-03 18:16:01

坦克案例的原材料类的相关文章

【iOS开发-67】QQ好友列表案例:UITableViewHeaderFooterView类、layoutSubviews与didMoveToSuperView方法等

(1)效果 (2)源代码于素材下载 http://pan.baidu.com/s/1jfdr4 (3)总结 --有标记状态的属性,应该在对应的模型类中,并且把getter方法重命名为isXXX: --UITableViewHeaderFooterView不可以用xib,只能用代码创建. --layoutSubviews方法,是当改变父控件高度的时候,自动调用这个方法,所以一般在这里面设置子控件的frame.因为子控件随着父控件而改变.这里要注意的时,初始化方法中父控件没有frame,所以子控件设

css伪类选择器详细解析及案例使用-----伪类选择器(2)

结构伪类选择器: <div> <ul> /*ul:only-of-type*/ <li>one</li> /*li:first-child li:nth-child(2n+1)*/ <li>two</li> /*li:nth-child(2)*/ <li>three</li> /*li:last-child li:nth-child(2n+1)*/ </ul> <div>adc</

css伪类选择器详细解析及案例使用-----伪类选择器(1)

动态伪类选择器:E:link :选择匹配的E元素,并且匹配元素被定义了超链接并未被访问过.E:visited :选择匹配的E元素,而且匹配的元素被定义了连接并已被访问过.E:active :选择匹配的E元素,且匹配的元素被激活.常用于锚点与按钮上.E:hover :选择匹配的E元素,且用户鼠标停留在元素上.E:focus :选择匹配的E元素,且元素获得焦点. 锚点伪类设置遵守“爱恨原则”,即LoVe/HAte,也就是“link-visited-hover-active”. 目标伪类选择器(此为动

云+X案例展 | 民生类:易趋云全面提升三德科技管理效能

湖南三德科技股份有限公司创始于1993年2月,主要从事燃煤采样.制样.化验及燃料智能化管控整体解决方案的研发.制造.销售与服务,是国家高新技术企业.国家火炬计划重点高新技术企业.国家知识产权示范企业.湖南省创新型企业. 三德科技在项目管理上主要面临着以下问题: 1.资源统筹难度大:三德科技目前采用的是能力团队组织模式,成员会承担多个能力团队工作,比较分散,资源管理幅度非常大,而目前现行的项目和资源管控手段有限,无法高效地了解各项目及资源的状态. 2.项目状态跟踪难:在EasyTrack云(已更名

IO流的练习 —— 创建用户注册、登陆案例

把上次用集合做的时候的分析拿出来 需求: 用户登录注册案例 按照如下操作,可以让我们更符合面向对象思想: A:这个案例有哪些类 B:每个类中又有哪些东西 C:类与类之间的关系 分析: A:这个案例有哪些类 用户类 测试类 B:每个类中又有哪些东西 用户类: 成员变量:用户名.密码 构造方法:无参构造 成员方法:getXxx().setXxx() 登陆,注册 但,如果用户类的内容过多的时候,维护起来比较麻烦. 所以,为了以后维护起来比较容易,我们需要更清晰的分类: 用户类可以再分为2个类: 用户基

Objective-c---分类 、 扩展 、 ARC

1 分类练习 1.1 问题 分类是Objective-C提供的一种类的补充和扩展方法,补充和扩展的每个部分被称为分类,分类本质上是类的一部分.提出分类概念的作用有两个:一是分解大的代码,提高程序可读性:另一个是给已有的类添加新方法. 1.2 方案 定义一个TRMyClass类,在类中包含一个属性property,用于存储一个整型数,同时定义一个方法method1,该方法在控制台输出“method1执行了”. 首先,为TRMyClass类定义一个分类AddMethod,在分类中添加一个方法meth

视图层和视图类 、 绘制

1 绘制基本图形 1.1 问题 IOS中进行绘制比较方便,只需要在视图类(UIView及其子类)中重写drawRect方法,将绘制代码要写在该方法中即可,此方法会在视图显示前自动调用.本案例重写视图类中的drawRect方法,绘制一个简单的图形,如图-1所示: 图-1 1.2 方案 首先在创建好的Xcode项目中创建一个TRMyView类,继承至UIView.在Storyboard中拖放一个View控件,在右边栏的检查器中将View和TRMyView类进行绑定,并将背景设置为紫色. 然后在TRM

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

Objective-C语言介绍 . Objc与C语言 . 面向对象编程 . 类和对象 . 属性和方法 . 属性和实例变量 1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中, 1.2 方案 首先,启动集成开发工具Xcode. 然后,创建OC语言的工程. 最后,运行所创建的工

spring 入门案例

spring开发步骤: spring jar包介绍: 在3.0以下的版本,源码有spring中相关的所有包(包括spring核心包和依赖包) 在3.0以上版本,源码中只有spring的核心包 没有依赖包 依赖包需要自己下载 1)源码,jar包:spring-framwork-3.2.5.RELEASE commons-logging-1.1.3.jar           日志 spring-beans-3.2.5.RELEASE.jar       bean节点 spring-context-