坦克案例的原材料类

/**

原材料类

*/

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();
        }
    }    
}

posted @ 2017-11-19 14:26  smartwen  阅读(419)  评论(0编辑  收藏  举报