zoukankan      html  css  js  c++  java
  • 坦克案例的原材料类

    /**

    原材料类

    */

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

  • 相关阅读:
    转:Windows 7下安装CentOS双系统
    STL学习总结之<迭代器>
    转:linux静态库与动态库
    指向类成员和成员函数的指针
    STL学习总结之<仿函数>
    转:Linux Crontab 定时任务 命令详解
    转: 解决 Redhat 出现”This system is not registered with RHN”更新
    IOS 判断设备屏幕尺寸、分辨率
    IOS 文件管理共通函数整理
    IOS 编译ffmpeg For SDK6.1,模拟器、armv7、armv7s均可使用
  • 原文地址:https://www.cnblogs.com/smartwen666/p/7859699.html
Copyright © 2011-2022 走看看